|
|
发表于 2009-7-20 18:50:20
|
显示全部楼层
你可以先了解下DMA。
% a u1 x1 J* z
+ t: {& K% k' }/ D, Z/ w6 C- h( o簡單的說要找base addr,
! X, {/ B1 G& C2 c) s: z我們只需關注pointer。% M. l y( l! ?+ Y
以下是原理:% t# z2 }' Q2 Y4 X8 D/ M" N; ]& I p
+ J$ a$ I1 }. {# O" O. b1 Z£ex in x86 asm2 y! d# `" `: @
1.mov dword ptr ds:[edx+4],edi1 z. n4 I: V" @
& s. N, J& u8 K; a) K4 p ?if the edx+4 is the dma addr which you want to find.1 Z& t( u! X- z3 m3 |$ M. s
edx is the base addr.9 l* L) ] r6 _+ f
; I% a( G6 k- R& R
2.lea eax, [8*ecx+ecx]4 M3 q( ]" R& t. }
if the eax is the dma addr which you want to find.1 Z5 }5 c# I8 U# W
ecx is the base addr." K* J' Z9 b. R" {
5 h3 m# ^9 O" ^5 ?4 X: ` a& u
- m/ H4 N- B9 T
£ex in C++:% O. x9 k5 z- ?8 A- d
DWORD *BaseAddr,val=0xea937f26;1 S+ I7 t+ v; |5 b0 b
BaseAddr = new DWORD;
0 T$ |3 Q* N- n. L+ d*(BaseAddr+4)=val;
. j8 O7 q; N( Z) z* ~cout<<"OffsetAddr:"<<*(BaseAddr+4)<<endl;
5 `1 b. `" H+ v9 j©2009 VD7 Hacker Team Master- Krizal Chen- f3 ?* s! U B* s j0 I; A+ D- K
7 l$ G) c2 F; ^4 d2 _
! t, _: b5 d! N# Y3 L, _+ f. [3 E) N1 ?
以上已經涵蓋找出baseaddr需要的原理, d. U& D$ q5 l8 t1 G: @* ]6 u& M
接著用debugger分析和追蹤程式碼就要靠自己的努力了,
' D# s- X7 I! a! [$ ~! Z! o3 r7 l( q想學更多的話,個人最近沒什麼時間。; ~! T; c# ~# E
6 B. J/ R( T* ?
找龍兒吧,如果他願意教的話,
) z2 }0 t- j; L8 W6 K; `8 A你可以學到不少。
* a3 r0 M# K. P, O# d+ O
1 H1 B. u% D/ \9 S* }9 I+ v[ 本帖最后由 krizal 于 2009-7-20 20:06 编辑 ] |
|