|
|
发表于 2009-7-20 18:50:20
|
显示全部楼层
你可以先了解下DMA。
1 R6 H6 r( L; A' T
3 Z2 [3 k- ]- a5 |8 ` T6 T$ |簡單的說要找base addr,8 P V& x- B, K8 V
我們只需關注pointer。. Z. g- h, F$ }& g) W4 _& ^) u
以下是原理:
8 c# m+ U1 s' X4 m! Y
: e/ n, K2 W! I: Q, _£ex in x86 asm
. q! v; N8 s( t0 [4 W4 D9 t6 s1.mov dword ptr ds:[edx+4],edi
7 b [- \0 K! Q' O8 S+ C
' W' g6 ]% E0 k! F% Iif the edx+4 is the dma addr which you want to find. y$ l, h: M) o" W8 E
edx is the base addr.
$ ^4 W# w* ]& O3 ~: p$ ~- p* m8 A. P8 z! y
2.lea eax, [8*ecx+ecx]
4 `. I; E9 _5 d5 s! L5 m! mif the eax is the dma addr which you want to find.! `, m" }; q7 _4 f( N7 d' ?
ecx is the base addr.5 k! [; I" A% W! Z6 P: g& \3 J
: @2 x+ n+ w* i% C' C% s4 S. D* c
1 `, c1 I$ {7 l2 L7 w$ D# {* w
£ex in C++:
! {2 D, a: M2 y* [1 z% LDWORD *BaseAddr,val=0xea937f26;
0 m5 H D5 E- N! E) B) w5 q1 h" dBaseAddr = new DWORD;
* @1 t8 b. ]4 f" A3 Y*(BaseAddr+4)=val;$ W& w+ ^" v6 l: B# A8 m9 _9 ]( Z
cout<<"OffsetAddr:"<<*(BaseAddr+4)<<endl;& n$ F( s; p# N+ Q5 N6 W$ l
©2009 VD7 Hacker Team Master- Krizal Chen
; P' v8 W& ]6 ?% _. C# A
* E/ ~$ _, t4 ?" h5 i3 T8 A: l# ^3 J
9 A8 U2 z! T4 n+ K以上已經涵蓋找出baseaddr需要的原理,; c4 V) O6 d6 y: m0 A
接著用debugger分析和追蹤程式碼就要靠自己的努力了,
* C2 J! p( V# p+ n- V, i想學更多的話,個人最近沒什麼時間。6 _; K& S& N8 f) B b+ A2 j: F
$ _( H: x0 {% n& @4 t
找龍兒吧,如果他願意教的話,+ {' w- @! D; F9 a: n/ H
你可以學到不少。
, K. P) B; z0 y8 G$ V4 U/ W8 J3 |# v
[ 本帖最后由 krizal 于 2009-7-20 20:06 编辑 ] |
|