|
发表于 2009-7-20 18:50:20
|
显示全部楼层
你可以先了解下DMA。5 r' @8 D4 u, R0 X! [
& Z$ x, o5 v. U( Z- M
簡單的說要找base addr,
8 z) J9 y; H% N* @我們只需關注pointer。
' v" i d) s6 Y" R1 D3 U以下是原理:& @0 J* `, F0 F
' N7 `* z/ r# E4 j, l# O. ^9 z( K$ }) E# E£ex in x86 asm7 O; y7 u& x @& P' Q- ~
1.mov dword ptr ds:[edx+4],edi7 Z9 x+ K( s5 W0 o+ g3 L. O# w. { v
9 l9 X) b8 c0 Y, m4 Iif the edx+4 is the dma addr which you want to find.
2 t: m& z1 j, ^3 eedx is the base addr.
& T" @0 h( A1 C5 L/ O9 O A V$ l0 i
2.lea eax, [8*ecx+ecx]; u. q$ o" h" B% v! }% P* F
if the eax is the dma addr which you want to find.
1 X9 |0 v4 i7 |5 d2 Z& N0 `$ Aecx is the base addr.
# F/ L, V' ~6 R
. y6 t! x* z3 S# ?3 Y: _' @5 \& F3 f! D' o2 s
£ex in C++:6 \/ ~9 v8 N/ l" I, C# _9 R. F
DWORD *BaseAddr,val=0xea937f26;+ R8 U/ m- k( @9 V& M0 ]0 d
BaseAddr = new DWORD;% }* Q- }8 f% R6 P h5 z
*(BaseAddr+4)=val;) ]( Q5 G7 j6 L" L. w" K9 V& V. R, J
cout<<"OffsetAddr:"<<*(BaseAddr+4)<<endl;
8 c6 P+ N; W0 q$ [0 y: h) R©2009 VD7 Hacker Team Master- Krizal Chen! K& }+ _# V( ~' b( o7 K
% K$ n6 t9 \# f) |- z t0 o% j. V- C
5 \( R* |1 A6 O# J: H' A
以上已經涵蓋找出baseaddr需要的原理,- B3 r- _# W5 ]9 ^( V
接著用debugger分析和追蹤程式碼就要靠自己的努力了,1 v3 |4 _5 [: p% n) f1 E
想學更多的話,個人最近沒什麼時間。, k2 U/ x5 m) r2 S4 L+ n2 Y
: b; k$ E- _% g! x; a8 r4 G2 D% y找龍兒吧,如果他願意教的話,
+ v& K- ]% g- k% |4 Q. \( M( ]你可以學到不少。
6 s# Q; ~ X8 X2 S3 r2 g' E/ e3 T% A; l$ q0 Y3 b7 g
[ 本帖最后由 krizal 于 2009-7-20 20:06 编辑 ] |
|