|
|
发表于 2009-7-20 18:50:20
|
显示全部楼层
你可以先了解下DMA。
' F$ J0 R- \+ b% E6 ^ w9 e: v5 W! C3 N
簡單的說要找base addr,
1 Z* J1 r. f3 z( r g我們只需關注pointer。
g+ @" C% C4 o0 E2 k# f以下是原理:& s3 H; k5 i6 w9 Y0 T" W2 y/ i
7 K# R: C$ K' T2 A£ex in x86 asm8 v9 [4 F6 K' [$ r( y3 v! ]
1.mov dword ptr ds:[edx+4],edi' |# f A2 X5 _" A7 ~
9 @$ k/ W2 E# i% z, d& X
if the edx+4 is the dma addr which you want to find.
6 W4 Y5 d$ L$ V1 |% E& k Jedx is the base addr.
# d# W j9 i3 [+ v& k+ a/ n3 {' K1 `& d \, B7 V
2.lea eax, [8*ecx+ecx]
% W/ w8 w; U" `3 w) p7 Z9 ]if the eax is the dma addr which you want to find.6 N& d( ?* ^3 ~
ecx is the base addr.; b5 q/ n, |- t2 f- i+ m
, j- d6 r! |' v- Y) K" s t% t+ |7 m+ I7 o- l; U
£ex in C++:
5 |# ?, M3 g) D- ]DWORD *BaseAddr,val=0xea937f26;
" R1 ]4 I3 l8 \1 aBaseAddr = new DWORD;
1 O3 x1 l4 r, ?! r2 l+ w0 [*(BaseAddr+4)=val;3 o# M+ \' B, |: R6 S# s) z' q7 }
cout<<"OffsetAddr:"<<*(BaseAddr+4)<<endl;; }) [# {. u+ P; l
©2009 VD7 Hacker Team Master- Krizal Chen- O1 o0 P4 S ^
& t! X- o( U, O7 i8 p2 F. h! K9 e; }5 ]
/ p" Q+ y& E% t8 i' Y) p4 o以上已經涵蓋找出baseaddr需要的原理,* @- a" E7 [) x# b1 y2 `
接著用debugger分析和追蹤程式碼就要靠自己的努力了,/ v+ E8 q* R; y
想學更多的話,個人最近沒什麼時間。, u5 F) k: q6 ~$ j% f
2 R2 j+ ~8 w" L. T) |
找龍兒吧,如果他願意教的話,2 n' U( D, x% I* |! p0 R
你可以學到不少。
9 y) ^3 j+ i/ C: A0 O6 j3 y
6 R: l# a8 D* Q) U* _[ 本帖最后由 krizal 于 2009-7-20 20:06 编辑 ] |
|