|
|
发表于 2009-7-20 18:50:20
|
显示全部楼层
你可以先了解下DMA。
- {' ]6 b4 r1 ~5 U1 w+ V
2 M/ U1 J( r5 _" v; H8 M* t/ ?9 N6 a簡單的說要找base addr,
+ S; V$ ?. J* q0 S7 d: P我們只需關注pointer。& O, Q& l: b/ l: j
以下是原理:# i, W, g) c; U' z) N$ Q2 H
( i8 p% l1 v4 u% q
£ex in x86 asm3 i6 g$ \6 j" W6 N
1.mov dword ptr ds:[edx+4],edi0 s9 c- O7 D; M! p2 y. s
: F/ r) t, t7 h# z5 [# Nif the edx+4 is the dma addr which you want to find.5 R( S8 Q% Z: C- Z$ S
edx is the base addr.
}$ W+ j1 o1 q( L& @8 W7 I
0 p' n _3 b5 x2 E6 }" d! u {2.lea eax, [8*ecx+ecx]( k" r5 f/ _! G+ S% @) \' e C
if the eax is the dma addr which you want to find., S# @$ @. x9 w" U
ecx is the base addr.
" S/ Y5 o6 @/ E% ^9 z" G
! o* A% J% ~9 C) ~$ r! a$ n0 Z- W M! @) p2 L
£ex in C++:) R$ g: k2 `( ]
DWORD *BaseAddr,val=0xea937f26;
6 l u! t7 j+ q3 D# k+ u* FBaseAddr = new DWORD;
P+ B' B) Y! d2 {( A9 X! a0 k+ M*(BaseAddr+4)=val;
& g% `9 ^: L4 e! A) R6 Q( scout<<"OffsetAddr:"<<*(BaseAddr+4)<<endl;
& w0 Y( P8 [3 i) O, W©2009 VD7 Hacker Team Master- Krizal Chen$ d" h( l1 _! Z9 P
" ]8 K/ v K, \( g2 K, @- A# N+ N0 y
9 n+ T0 p. z: t
# I5 x9 g4 @ a/ x+ N% }
以上已經涵蓋找出baseaddr需要的原理,2 m1 U7 q0 i9 @9 T6 F' i9 U" L
接著用debugger分析和追蹤程式碼就要靠自己的努力了,1 p+ D! l; k, k: M8 K" ]
想學更多的話,個人最近沒什麼時間。
0 v4 Q% D0 d% L8 T2 m2 w& q
3 e+ U% I2 D* U& x1 y+ s找龍兒吧,如果他願意教的話,. n5 E5 _5 }& \/ [ T
你可以學到不少。9 J N7 x) T) @0 W+ H( c+ S, D
9 w0 M. g$ |+ U' N) z" f9 \% o3 i[ 本帖最后由 krizal 于 2009-7-20 20:06 编辑 ] |
|