|
|
发表于 2009-7-20 18:50:20
|
显示全部楼层
你可以先了解下DMA。
9 T3 V! _, i/ n3 Q2 l
. i) u& V" j5 T; x8 o3 g: _/ [- B簡單的說要找base addr,
. J2 k3 T- X" i. v1 u& ^; Z J我們只需關注pointer。9 V: d! G3 i& u7 i: f# ^5 O
以下是原理:0 d- O% A+ w6 [: h1 R/ T
% s; x) }4 E5 F: ~9 K
£ex in x86 asm4 [# `( \0 q* H
1.mov dword ptr ds:[edx+4],edi. t9 i7 s3 i4 e6 r+ R/ M4 s5 Y( B- }4 j
+ K, v' Y3 r2 q' u8 n5 ]1 nif the edx+4 is the dma addr which you want to find.
2 Q# D7 X0 Z- |1 O( eedx is the base addr.: ?' i4 t, i/ w+ B# `" l
/ J5 |7 {- t. P2.lea eax, [8*ecx+ecx]8 X/ a' B) c/ S; ^6 O/ p
if the eax is the dma addr which you want to find.
1 E' y9 ]7 e! Lecx is the base addr.
* H+ J. D- o. a
- w- d! d+ @, i6 C2 l V" S* C9 ^
, Z3 W& b4 V: U£ex in C++:
+ D+ c% N3 Y' U: P7 u1 \, QDWORD *BaseAddr,val=0xea937f26;
6 [5 q! _; B7 f; GBaseAddr = new DWORD;
2 B2 p9 ^- h0 f2 S7 T* x*(BaseAddr+4)=val;$ F: V0 B8 I5 A
cout<<"OffsetAddr:"<<*(BaseAddr+4)<<endl;
0 E5 A8 S# c$ d9 r% y( I5 M& Y©2009 VD7 Hacker Team Master- Krizal Chen
+ f2 Q/ @/ m6 k# P
9 e$ R/ y" l" y- h. a6 F
" D- ^& f/ }/ V
; F, u/ F$ v2 b5 j以上已經涵蓋找出baseaddr需要的原理,
1 M4 P& k% I% z6 C接著用debugger分析和追蹤程式碼就要靠自己的努力了,
7 u2 }4 Z0 J6 a( I: _( y想學更多的話,個人最近沒什麼時間。
$ a0 V4 t( z' t. {) E; G% f, x3 x! {' O" Q* H _& v4 \# ~+ p
找龍兒吧,如果他願意教的話,2 t6 o; {! B. [. f2 m
你可以學到不少。) P$ t( l! Z6 m; L6 }3 k7 z
7 `9 {7 S; o* f6 u7 D. i[ 本帖最后由 krizal 于 2009-7-20 20:06 编辑 ] |
|