|
发表于 2009-7-20 18:50:20
|
显示全部楼层
你可以先了解下DMA。
7 D H' A/ V9 h& }0 F6 X
/ z. C% Y0 C I6 c8 X$ m簡單的說要找base addr, }1 a3 H0 Q2 v0 T# ^% E) z
我們只需關注pointer。
4 a# C+ K: P. v: j- ~& O以下是原理:
6 w$ l0 d5 L( w7 v# J
' g# H% j! X/ V' s8 n8 X6 S£ex in x86 asm# Z0 ]. _% l- Y/ d& k8 I
1.mov dword ptr ds:[edx+4],edi
' k" ?) X( t o1 u6 M
* [/ Q6 S) P( Aif the edx+4 is the dma addr which you want to find.% R& ?. ?0 `- q, s6 N) @
edx is the base addr.
9 H( [+ @* f. {& v! Y: Z O' O
" p9 i: J1 _: t( Y# B6 E2.lea eax, [8*ecx+ecx]
: {5 |) y3 o4 V3 |if the eax is the dma addr which you want to find.! o$ ] N% J0 w6 ]
ecx is the base addr.6 n9 _6 m d& X* h
* Y; ?' m! @; J5 P0 a3 H. `# B+ N
, r; p- T# [ u" _£ex in C++:, i! Y) Z4 F1 `" {, ~
DWORD *BaseAddr,val=0xea937f26;0 W* u) ^ s7 G. b' `% l( Q
BaseAddr = new DWORD;
7 G$ E+ y8 \/ r2 d8 A*(BaseAddr+4)=val;0 }8 L. {* r" j3 p& Z! u
cout<<"OffsetAddr:"<<*(BaseAddr+4)<<endl;8 [7 N! v: p+ F8 i b& b
©2009 VD7 Hacker Team Master- Krizal Chen
$ X1 s5 f+ M6 `: g$ ]% j+ M# r6 S; R7 L
+ H0 H8 T! p* I6 }% G$ a
: E# w( Q) p5 ?以上已經涵蓋找出baseaddr需要的原理,
6 o1 [$ n& }" L% K接著用debugger分析和追蹤程式碼就要靠自己的努力了,
+ K/ w& [' D d想學更多的話,個人最近沒什麼時間。+ ?2 {! O, X3 S- [
; C! n* b5 a- n: a
找龍兒吧,如果他願意教的話,: p# q, k5 u% q7 j/ V: b! |% g, r
你可以學到不少。. K( w4 V" c: u2 K2 N
|/ j% P0 h+ o# S
[ 本帖最后由 krizal 于 2009-7-20 20:06 编辑 ] |
|