|
发表于 2009-7-20 18:50:20
|
显示全部楼层
你可以先了解下DMA。
: n+ m. g9 m9 J/ I7 y9 U$ o/ g% x. A1 G' \8 p3 y
簡單的說要找base addr,
2 ~8 v8 r, B3 K/ Z# ~' s. ^) C我們只需關注pointer。
: K: E5 f w' ~' I. s1 y+ T1 c以下是原理:; ?- g) P, _; V, \. f
T1 x0 R7 V3 {% H- _$ e; {£ex in x86 asm/ L' f% w) U% |0 h4 q
1.mov dword ptr ds:[edx+4],edi
* J7 T: W! @9 k2 V2 r2 m, g6 Y4 {- z$ n# m6 v6 [8 q0 W& _& s; P
if the edx+4 is the dma addr which you want to find.
* S1 w: r& b% N2 y9 bedx is the base addr.& L) z/ L( }; a5 i8 ]
+ I( g! G0 S3 n$ n; F
2.lea eax, [8*ecx+ecx]
5 [2 x% V/ J5 s. N8 oif the eax is the dma addr which you want to find.
! g" v5 B) a% Q( s$ @. Y9 K6 h1 Necx is the base addr.5 R) f5 c% a# X$ H- j( ?: C
! [1 S- z$ W$ L9 x, l W2 ]# e: f, @6 }& C8 Q d
£ex in C++: x+ C, r% Y/ K
DWORD *BaseAddr,val=0xea937f26;" W$ t5 h1 g: a1 [. x4 V8 b
BaseAddr = new DWORD;
1 `/ H8 Y/ G* k( Z; `) Y' y1 T1 M*(BaseAddr+4)=val;
6 N6 ?1 U$ @5 T o' h% m- hcout<<"OffsetAddr:"<<*(BaseAddr+4)<<endl;
( N1 J! d1 j# _( g. V9 K( j©2009 VD7 Hacker Team Master- Krizal Chen
8 _0 {* ?4 S% U& N5 D6 k+ _3 h
+ J0 q. r! o0 ^" n7 v+ Q' ?' V& ?8 |! T8 G( g" u
9 p6 n4 `1 P, N: X以上已經涵蓋找出baseaddr需要的原理,% x% ~6 W) r) K& p
接著用debugger分析和追蹤程式碼就要靠自己的努力了,
9 t# ?& U8 h4 r$ i) m: f3 U* |$ L想學更多的話,個人最近沒什麼時間。( B9 _) J [, v3 d% Q# g9 L3 J% `( X& _
0 I! @2 a \1 \找龍兒吧,如果他願意教的話,1 S2 ^. K. k- E) s+ ?; d( [
你可以學到不少。
" n! C# C5 ]7 u h4 t6 m9 `& K( O" o% h+ g; r2 i) G
[ 本帖最后由 krizal 于 2009-7-20 20:06 编辑 ] |
|