|
发表于 2009-7-20 18:50:20
|
显示全部楼层
你可以先了解下DMA。
, T& t- M9 \. ~+ B) F* j [7 l1 X# }; r
' V8 m5 J# ~$ ~( |簡單的說要找base addr,
" e6 p. S, O( _( H我們只需關注pointer。
+ R+ `+ X3 t' ^3 A ?: j9 s以下是原理:
3 V0 b9 C. C1 A5 K! G9 E7 z. f' n. |. P8 e4 F
£ex in x86 asm
, ^$ A: D4 d9 W3 S1.mov dword ptr ds:[edx+4],edi
) b3 | b3 e" p9 e$ N0 T4 D4 |: i( l. L- C$ s1 {
if the edx+4 is the dma addr which you want to find.
/ a( c, y- @" F9 Q6 wedx is the base addr., Z% B( S0 J' s4 y5 c
1 B; D ]! z4 W5 y5 F' z
2.lea eax, [8*ecx+ecx]1 O/ s! _$ |- ]- W, l
if the eax is the dma addr which you want to find.5 r# j) z) ~4 j* a: B! b
ecx is the base addr.4 Z# }( A0 Z5 O L6 u6 d9 ]5 \
9 p1 F5 H7 ~5 {' ] n# g& c
3 Z/ {* D* H* f: m( R0 N£ex in C++:
0 i! s! I9 H8 R0 w! PDWORD *BaseAddr,val=0xea937f26;
* N' ?% x$ H: r* k0 M" r5 BBaseAddr = new DWORD;
2 y& ^2 U! m1 r; I* \' H* r*(BaseAddr+4)=val;) C/ l& i0 I( O7 A
cout<<"OffsetAddr:"<<*(BaseAddr+4)<<endl;
( X7 E: V5 D0 r, t4 z) q©2009 VD7 Hacker Team Master- Krizal Chen
/ [3 [/ F+ g& N' ^ P9 G* z, r" C4 z7 \% {
( `8 m( b1 i! y4 K
% g7 F: Z, E* H$ k
以上已經涵蓋找出baseaddr需要的原理,, c" I* C# U* A
接著用debugger分析和追蹤程式碼就要靠自己的努力了,
/ D$ S* T" N$ c% k; ^+ X想學更多的話,個人最近沒什麼時間。3 \# W% L5 [: n2 l5 y
% ^# @: R: i* ?) u6 _& O, p' N找龍兒吧,如果他願意教的話,
" {+ j d5 ^% s你可以學到不少。6 Y$ |/ U/ J' g. ]- g
$ a6 ^" e9 A% a( D: }$ T[ 本帖最后由 krizal 于 2009-7-20 20:06 编辑 ] |
|