|
发表于 2009-7-20 18:50:20
|
显示全部楼层
你可以先了解下DMA。+ G" h o# E- M: `6 w# R
5 \- \1 w, e1 k5 S6 w( ?簡單的說要找base addr,
' J6 c* r2 `: }$ z# w我們只需關注pointer。
4 M- u$ ~8 R g; O. t以下是原理:
( F) d/ Z, d0 n( v4 q5 l* `
& a3 p9 E8 u: T$ e2 M+ ?£ex in x86 asm
5 @1 X9 i0 O4 Q7 h, A. q6 S1.mov dword ptr ds:[edx+4],edi
1 W2 U1 j: R; O* P: d2 r
& ]% j, ?% E& c9 K2 Yif the edx+4 is the dma addr which you want to find.( `! u7 F1 Y% L3 |( S3 W$ `' g* C
edx is the base addr.' w; Y0 ~; _8 s+ J3 o8 D) Q
& S5 j8 n+ C3 R# i
2.lea eax, [8*ecx+ecx]% n0 ^7 X+ Z. Z7 h
if the eax is the dma addr which you want to find.
" [: }+ P) e2 M# s( Gecx is the base addr.+ ~: ^* l9 X7 U6 T* g- U% V" h% m5 P
( S6 {, F9 A2 W$ |8 p
% D: k! d! g! C) o1 C
£ex in C++:& X L) c6 v7 i: ?% Y e
DWORD *BaseAddr,val=0xea937f26;
+ J" m( r9 j8 F9 R4 _( BBaseAddr = new DWORD;5 _! L* i. e# V& Q+ A8 t
*(BaseAddr+4)=val;/ k# ?! r' }+ j- m1 X) g4 p
cout<<"OffsetAddr:"<<*(BaseAddr+4)<<endl;
2 m+ q, q- i3 \; m©2009 VD7 Hacker Team Master- Krizal Chen4 y* t ^! q4 q
7 S- {7 h$ r6 s( {2 g, z$ ^2 B4 E3 k/ q$ d6 T* \# b& a* X
( U" V- I, q: Z, P; U( Q6 {0 C
以上已經涵蓋找出baseaddr需要的原理, N I: e( F8 c2 c x
接著用debugger分析和追蹤程式碼就要靠自己的努力了,
1 v6 i! |& \8 T1 t2 L" f4 C8 B! z想學更多的話,個人最近沒什麼時間。1 O" K* e/ F6 Y/ o6 s0 Z
R6 W, l+ P$ p: x+ |0 d" l找龍兒吧,如果他願意教的話,
6 s& I ~4 E D9 Y5 h+ |. L! s你可以學到不少。
5 c6 ^7 j$ ?7 M
' Y1 @! M7 D/ K- M+ U$ @[ 本帖最后由 krizal 于 2009-7-20 20:06 编辑 ] |
|