|
发表于 2009-7-20 18:50:20
|
显示全部楼层
你可以先了解下DMA。7 n z, c/ W7 ?% n
4 J2 R7 l9 `: F( p' h4 c
簡單的說要找base addr, m8 J" h/ i s8 |. u1 W2 Q
我們只需關注pointer。# C9 p- r9 r; x; B0 O* c/ t
以下是原理:$ W; _9 ]% K: ]; j: ]0 {
. F( r, a) p2 C( b" n( _& [3 X
£ex in x86 asm x5 j8 x+ V1 `
1.mov dword ptr ds:[edx+4],edi2 }- r& s. ~$ E4 C
" ?0 X1 P; x- N" O8 j( F7 mif the edx+4 is the dma addr which you want to find.3 }$ ^+ }+ W9 G7 c0 K0 M& _
edx is the base addr.: L1 g: _' [6 Y7 N& Q
2 i+ E; z: F+ G/ Q. r2.lea eax, [8*ecx+ecx], U8 s$ O, B2 C# H7 r5 l
if the eax is the dma addr which you want to find.9 l( n* ~" e& q8 X, p
ecx is the base addr.
: `, Z9 W) V; J: S; H% f5 E. M+ x' h
" e4 j \4 d3 P/ [! j( s£ex in C++:: z" B8 y Z' R& N
DWORD *BaseAddr,val=0xea937f26;
: @6 Z) G5 A: g U+ H: K3 LBaseAddr = new DWORD;
' h8 K( A- Y! ?' U9 W6 r& u*(BaseAddr+4)=val;7 E3 \1 B; B5 U3 O) B
cout<<"OffsetAddr:"<<*(BaseAddr+4)<<endl;
- u. S9 U/ q3 M; X" b/ Q# E6 Q©2009 VD7 Hacker Team Master- Krizal Chen
/ v" Q$ _* i" {3 o! S" }( N' \$ [2 J* Z$ I" d: `0 Z' P' @0 g' [
% K3 ~. K; F: b% b" H# b8 s
R# t2 C. {* _; S- ?以上已經涵蓋找出baseaddr需要的原理,
( j7 _! I6 j# R6 u* H" X( ]接著用debugger分析和追蹤程式碼就要靠自己的努力了,
7 U% [4 I. K3 {( s( F想學更多的話,個人最近沒什麼時間。
' P9 A# \2 C" Y1 u2 x/ J2 c( Q+ d0 i8 X0 N9 D
找龍兒吧,如果他願意教的話,
2 c) k& z% e& M* D+ A( k1 x8 K4 G你可以學到不少。 n. f$ \3 o/ P* }5 ^! d
, _& f7 i# h4 Y4 x( `7 s[ 本帖最后由 krizal 于 2009-7-20 20:06 编辑 ] |
|