|
发表于 2009-7-20 18:50:20
|
显示全部楼层
你可以先了解下DMA。
: B4 s! }& ?4 j& a; Q7 N
( Q1 l7 X0 C, X1 ^0 ]0 ?簡單的說要找base addr,* \5 R' k. X1 z% C" s2 r
我們只需關注pointer。2 Q7 }- l6 B: J6 X. v
以下是原理:
" _, D! C. i9 p" k0 K) j/ a. P) @ P* `
£ex in x86 asm
. E7 ?( |8 P; z/ \- l1.mov dword ptr ds:[edx+4],edi4 ?) r% Z. x" {/ e6 ] f0 g
5 T1 }8 G' p. \) \ M' X4 eif the edx+4 is the dma addr which you want to find.
$ \9 ^+ E9 T2 U/ |edx is the base addr.
6 m; `) h/ B3 z2 [& U2 t) J
5 _ h( C! C6 M6 P f2.lea eax, [8*ecx+ecx]! U) g% s, P) R; m4 A9 g
if the eax is the dma addr which you want to find.6 h) R6 D8 n8 f; A! z- u& ?: N. ~
ecx is the base addr.; r* e' p$ ?& f: I9 Y8 q( A
! T& X/ t! X9 J6 Z8 o/ Y
5 L0 v6 ^" |9 P7 k& U/ _7 Z8 X3 c£ex in C++:
; T. Y. w$ X! a) ~% eDWORD *BaseAddr,val=0xea937f26;6 b7 o7 ^: r! {# b [& ~, a
BaseAddr = new DWORD;
, I( f/ X( C2 b% G% G# a*(BaseAddr+4)=val;! ^- N. i+ C$ ?1 H+ E2 _
cout<<"OffsetAddr:"<<*(BaseAddr+4)<<endl;
) [& C D3 c3 [. @©2009 VD7 Hacker Team Master- Krizal Chen
- l1 C) ^: X3 c
1 |+ @) N" W' m& N
3 }) [' o: W9 V$ D% ]: Z! x$ D
, [8 j7 j. N3 \, n以上已經涵蓋找出baseaddr需要的原理,
6 X8 ~" e5 D/ n$ b# r8 F接著用debugger分析和追蹤程式碼就要靠自己的努力了,
5 Y5 ^% }) F" D! @$ W想學更多的話,個人最近沒什麼時間。! k5 B% i5 L8 ^, Y& S! f
5 r, P9 d2 A3 `5 C+ Z' w6 x找龍兒吧,如果他願意教的話,
) o) k$ @" c; V3 b4 G! n你可以學到不少。
/ e- J7 R6 _$ V7 q/ Z) a
( s1 p. s7 m9 c5 e3 ^( H[ 本帖最后由 krizal 于 2009-7-20 20:06 编辑 ] |
|