|
|
发表于 2009-7-20 18:50:20
|
显示全部楼层
你可以先了解下DMA。+ `1 _1 v+ ?: G8 {
2 O/ H, h1 `7 A2 i8 L; g8 C6 E
簡單的說要找base addr,* A4 b, ]1 \. W1 [! B9 o0 a0 t) W
我們只需關注pointer。
0 x8 W* L# |0 s6 N% [1 M. v8 {5 K以下是原理:
3 b: Z, _9 v1 V9 n+ @( A4 f0 P5 e4 o. Q+ x% j% R; C
£ex in x86 asm( C# ~0 L( z5 H9 }" F2 D
1.mov dword ptr ds:[edx+4],edi' ~ f% W3 U0 s! W7 l. }( d
( g0 \% ?+ \- C9 C% v1 y. V+ E3 mif the edx+4 is the dma addr which you want to find.
% u' ~+ J, t, e$ i! ?edx is the base addr.
7 e, [4 T3 S Y. d0 i+ S
. Z2 H6 g' e# u7 U! z2.lea eax, [8*ecx+ecx]( V1 K @* Q/ i& D" a
if the eax is the dma addr which you want to find.
' S+ z: m6 m5 qecx is the base addr.+ q) ]8 R5 Q) x0 B7 O6 w) w5 G p
2 W1 S( }: L1 @
) U$ ?8 l$ b6 ?7 k+ V. _& X£ex in C++:+ ]5 \# D& h$ e* [( A. Z9 `; ]
DWORD *BaseAddr,val=0xea937f26;
3 o8 ^% k4 c7 i: y2 A2 QBaseAddr = new DWORD;$ ?% n/ p4 _! ~ S$ L
*(BaseAddr+4)=val;3 z2 @! \, ?% V* q* R& Y
cout<<"OffsetAddr:"<<*(BaseAddr+4)<<endl;
1 f4 w. l( S) U0 w©2009 VD7 Hacker Team Master- Krizal Chen" ?) T* o* ^- ~6 q8 z
+ N' D* j. c, D
# o7 e, |) H# Z, I0 G8 h1 A; a( c
- |+ H8 z# K: ]/ M( R以上已經涵蓋找出baseaddr需要的原理,
- V) M+ m! |& S: r接著用debugger分析和追蹤程式碼就要靠自己的努力了,: x7 v! k/ M+ B9 H) ^
想學更多的話,個人最近沒什麼時間。& E/ k P4 ]; y7 _+ h
1 @' h$ }% p: W4 ?8 t+ }
找龍兒吧,如果他願意教的話,( v/ t3 ?8 I) l$ g
你可以學到不少。
% N; L# r/ T! W0 V$ u
L6 B* {! U- B S4 s7 w[ 本帖最后由 krizal 于 2009-7-20 20:06 编辑 ] |
|