|
发表于 2009-7-20 18:50:20
|
显示全部楼层
你可以先了解下DMA。
; Z. s' |1 }3 X" e' c3 Y! n9 }
8 n$ M# V" ~- d) A# c簡單的說要找base addr,
' {. t. M( h0 e# `! \# x7 f我們只需關注pointer。* w/ P4 b- L5 p+ ^/ p" O, b
以下是原理:
! f: D" U: P7 B9 Y1 c
) x( j. N6 U E% A5 k* _9 N1 R! q£ex in x86 asm1 K$ h+ y8 M# K3 E3 I! {
1.mov dword ptr ds:[edx+4],edi
! e! Z1 O1 s% i' [8 P2 }; w7 v$ u' t* F0 s! q. P- f E0 _
if the edx+4 is the dma addr which you want to find.
& s8 T3 c2 k6 V8 _ l7 l$ ]edx is the base addr.5 H& M3 E L% N5 n! Z
7 u5 o# B; S6 ~, |, Z
2.lea eax, [8*ecx+ecx]: F9 N. E c; R# `! E6 I" `. B
if the eax is the dma addr which you want to find.
" k: | L8 H5 Q- F7 f2 P. D fecx is the base addr.: i: s3 K" z" ~5 f" y) V
' D; B9 P. D* m- P, E
. V; d0 w) @& G5 q£ex in C++:
4 @1 q p4 G( p- l+ G) gDWORD *BaseAddr,val=0xea937f26;
: g. r( W4 Y# ^$ SBaseAddr = new DWORD;* R4 s! q3 D# y2 ]
*(BaseAddr+4)=val;: X o: b2 ]! P ^, x
cout<<"OffsetAddr:"<<*(BaseAddr+4)<<endl;
i4 x) o4 Y1 P; Q/ a. ~6 Z9 e©2009 VD7 Hacker Team Master- Krizal Chen) p+ K6 s2 |4 H& Z1 r( e
4 `7 j8 [3 j1 p+ E9 c9 x0 S
; r6 l8 h' u% o" ?5 M* t7 _: M" c. J) R
以上已經涵蓋找出baseaddr需要的原理,* W: g' m$ i8 {- F+ p
接著用debugger分析和追蹤程式碼就要靠自己的努力了,2 I G) d' t& A7 ^
想學更多的話,個人最近沒什麼時間。: J- C0 _' a5 H; v. ]8 f
! c- ~2 p4 R5 p; {/ u1 i* }
找龍兒吧,如果他願意教的話, \+ K0 r5 q( B* g9 ^6 W& H
你可以學到不少。0 w* u3 U0 K: _
3 N. Y( v+ v/ N[ 本帖最后由 krizal 于 2009-7-20 20:06 编辑 ] |
|