|
|
发表于 2009-7-20 18:50:20
|
显示全部楼层
你可以先了解下DMA。
3 j7 k& t, c' q- z0 J) D1 l( B
8 i, R! ~: g8 U, P; ?1 R* Z# a( `簡單的說要找base addr,
& S6 k% E* [' B3 Y9 Q7 P我們只需關注pointer。9 W( x& t& z- |1 m; H
以下是原理:: `( ^$ R- w& H5 x
5 b9 h Z) W }1 w* r
£ex in x86 asm7 T+ G2 H; {8 l5 _
1.mov dword ptr ds:[edx+4],edi; Y1 i3 k: z4 ]. Z) Y& E9 |, z
% l" V) m+ z$ `5 p3 }9 wif the edx+4 is the dma addr which you want to find.
' K8 K. o6 [, O( K/ {4 V( redx is the base addr.
, B& X0 b3 R6 q3 b f0 | o: z8 Z; b. x
2.lea eax, [8*ecx+ecx]8 |2 `! ?9 l- o x7 Q3 n
if the eax is the dma addr which you want to find.1 M* i: f* [ T4 F! o7 V0 J# _2 { ]
ecx is the base addr.
* w+ R( Z& N) w( r( {, U& n% x8 ^
8 t) ^5 ?( f" x# {£ex in C++:
* |, \1 w! Z" I/ ~( X4 X1 I3 l' CDWORD *BaseAddr,val=0xea937f26;3 w' z& a* k. |
BaseAddr = new DWORD;* a4 u+ A( b1 }5 ?
*(BaseAddr+4)=val;
; |' i) Q% p' J" R `$ T& z& tcout<<"OffsetAddr:"<<*(BaseAddr+4)<<endl;2 w. c# C3 S' ]) {
©2009 VD7 Hacker Team Master- Krizal Chen
# h) l, C' z7 u' O Z
- n7 w; {+ g3 ^3 b6 g3 j9 f. b ]. {( g. }
- U$ n8 T3 i! Z! N# ]6 P
以上已經涵蓋找出baseaddr需要的原理,- q4 L* h' b; S! K7 n1 y
接著用debugger分析和追蹤程式碼就要靠自己的努力了,0 Z! {1 r: s( t" b3 N. T- s
想學更多的話,個人最近沒什麼時間。
?: P1 B# `! V' s
( s* \# G4 l( R8 O; Q, d& ^9 P找龍兒吧,如果他願意教的話,
0 x) B4 z W; y9 O# a% n; _你可以學到不少。& h5 x F7 ?8 P6 z
: m/ F1 l, j1 C9 W0 H
[ 本帖最后由 krizal 于 2009-7-20 20:06 编辑 ] |
|