|
发表于 2009-7-20 18:50:20
|
显示全部楼层
你可以先了解下DMA。
" {1 }3 g5 m9 z+ c/ O, \7 C: i9 j' k l2 v' Z% C: f
簡單的說要找base addr,
/ y) {7 Q+ i/ \; d4 R% r! `* U7 E3 S我們只需關注pointer。- A1 r# \7 d E/ l: H3 c O; D
以下是原理:
7 O* M% y) p8 [1 [1 n
+ n! s5 _, O2 C+ G1 n7 m0 h0 ?2 Q£ex in x86 asm( f) G* U4 E: `( ?6 M! m4 ]9 _
1.mov dword ptr ds:[edx+4],edi
! P8 A: [6 M9 P1 b5 H2 u' k* u, [( S3 ?5 y2 Z Q
if the edx+4 is the dma addr which you want to find.
/ D5 ` m4 J! D1 y9 b# u& Bedx is the base addr.
) |0 I( L. I) K9 R! j6 M& ?; w' q4 ~ b" T+ v, ~" J! ^) D- u
2.lea eax, [8*ecx+ecx]/ U1 j5 \1 R! ^ K" @6 R& x
if the eax is the dma addr which you want to find.& L6 z' ^: t9 k0 [9 R( n
ecx is the base addr.$ I# k# y% T7 v
# E" O- G" ^) x( N
. K: A9 d8 _8 |* V& T
£ex in C++:" D2 B q1 b& q# \+ D$ i: `( o
DWORD *BaseAddr,val=0xea937f26;- w2 ~+ Q! h1 |/ v: U1 t. U
BaseAddr = new DWORD;
8 B; ]! z7 c/ Q+ n*(BaseAddr+4)=val;
9 e |- J0 C$ q5 e2 ~% b6 Bcout<<"OffsetAddr:"<<*(BaseAddr+4)<<endl;7 {! U1 d% g9 d) W. L* s7 W1 [. H
©2009 VD7 Hacker Team Master- Krizal Chen$ z) p4 Y" l1 W2 i1 T+ ^
$ ]1 G0 G9 F: [/ f% d, [) r2 z* R% _/ E: E
( |; O3 p* V# u! Z# d: j" J/ a5 a以上已經涵蓋找出baseaddr需要的原理,
/ Z' i& O+ _- H2 `接著用debugger分析和追蹤程式碼就要靠自己的努力了,( v4 X) g1 D5 J1 N' h
想學更多的話,個人最近沒什麼時間。; P+ q5 W/ y d( B# L0 D' j3 _- x
: y" p: E, j* ^+ S$ l
找龍兒吧,如果他願意教的話,
% ?4 z$ g0 Y3 d" H# z/ B5 {你可以學到不少。
) U, r% b, Z9 G1 R. d( z
3 h. G9 e; Q6 k$ v9 \7 P[ 本帖最后由 krizal 于 2009-7-20 20:06 编辑 ] |
|