|
|
发表于 2009-7-20 18:50:20
|
显示全部楼层
你可以先了解下DMA。
Q$ m. _3 H! G) i5 E8 N9 X2 T H4 j% ]# Q& g0 P& w" @7 J
簡單的說要找base addr,
+ T. O& ], ]; y/ t我們只需關注pointer。 t# Z) |' H& q; J! I2 ?8 s% k
以下是原理:
3 K0 Z# _% P6 H$ T7 g/ g6 Z. Z: I6 R( h% n
£ex in x86 asm
4 s3 F& t* b; r% r( b/ r% r1.mov dword ptr ds:[edx+4],edi
3 b) w* s" b9 D% s, r. Q
4 n- X' ?. n4 S7 hif the edx+4 is the dma addr which you want to find.
& x) v" o! |' p1 ~- n9 x; h" f! Ledx is the base addr.3 l7 H8 W5 w M& D& {! `
! ?$ I" y2 A) x' @$ W9 u2.lea eax, [8*ecx+ecx]
- {/ u$ W$ X2 R, Jif the eax is the dma addr which you want to find.
. W( m: U. \) k4 D% s2 hecx is the base addr.
$ k0 Y- y4 H- y8 p' B% j7 B& U" f5 x9 ?1 ?$ x- u
3 z8 W. w" K6 x) o3 \; a4 _
£ex in C++:
! }6 j% T6 F- l3 y# o4 uDWORD *BaseAddr,val=0xea937f26;0 l4 d$ U5 v# j: v8 s2 m M
BaseAddr = new DWORD;
9 S" x S, C! Y1 D* r$ m*(BaseAddr+4)=val;' H9 _" O/ T9 b3 x% n! J3 s6 t
cout<<"OffsetAddr:"<<*(BaseAddr+4)<<endl;
! K, ^3 l r) R, O©2009 VD7 Hacker Team Master- Krizal Chen# ]& \- D9 D; h5 k, \* f
! T2 n3 E8 S8 f& O1 z
* @/ X! R& G+ n- f
0 p1 v4 I1 v3 e. O以上已經涵蓋找出baseaddr需要的原理,7 E; r3 j/ T9 k
接著用debugger分析和追蹤程式碼就要靠自己的努力了,. `0 D6 a6 i) u5 j
想學更多的話,個人最近沒什麼時間。
5 S& N% r8 M0 I& y! i' h% R! Z$ ^; i5 l# j
找龍兒吧,如果他願意教的話,
, e8 ^$ y }/ Y3 t; O- M& m. y) C你可以學到不少。3 k3 C8 S1 q/ ]
8 u9 @& B/ b- \2 O[ 本帖最后由 krizal 于 2009-7-20 20:06 编辑 ] |
|