|
|
发表于 2009-7-20 18:50:20
|
显示全部楼层
你可以先了解下DMA。# V3 _7 p: \7 U. L2 f) n6 g9 {
; G7 C- s% D4 ^6 Y0 E
簡單的說要找base addr,0 D/ x5 D4 c( B! v# S X [
我們只需關注pointer。
# Q, j6 a' X, S! S以下是原理:
) E& w% Y- J: ]! N
- s5 T( K a ^; f2 x' ?£ex in x86 asm5 u# h. `% m" q, l# n6 E5 Y
1.mov dword ptr ds:[edx+4],edi% H2 l) j1 P$ R( v* B7 g
( o: _ a/ j9 w) `
if the edx+4 is the dma addr which you want to find.
3 D6 K" n1 p, e9 @% m! L3 _$ o6 jedx is the base addr.% q- ^; g. s7 {
3 x3 [5 k9 P0 C2.lea eax, [8*ecx+ecx]& I/ s1 J0 r% N- s: D3 H
if the eax is the dma addr which you want to find.
% o) J5 B6 \$ L3 E0 eecx is the base addr./ h. b) q/ A8 O% P6 x# B3 Z( N" k2 c
8 z7 A0 E O$ q! Z6 I9 g; ]
% T& k, [1 p# ]- ^& |8 L3 P N£ex in C++:4 f4 V1 U( Z2 i7 ~
DWORD *BaseAddr,val=0xea937f26;
4 [3 D2 n @* V8 A$ WBaseAddr = new DWORD;
# O* A0 e. ^9 f' ?5 R9 z*(BaseAddr+4)=val;: S+ |, g) E2 d
cout<<"OffsetAddr:"<<*(BaseAddr+4)<<endl;
; D" T! i1 D T7 k©2009 VD7 Hacker Team Master- Krizal Chen
9 o- [) y! g3 b. p6 _) U2 o! H, D6 S8 g9 A8 e/ a; C
4 j6 I# K) s! i3 k6 E4 I6 H* |9 `& r e: D
以上已經涵蓋找出baseaddr需要的原理,# f0 J& w0 L- ]3 I( h
接著用debugger分析和追蹤程式碼就要靠自己的努力了, m. D: _3 d9 k& s' z
想學更多的話,個人最近沒什麼時間。1 H3 C: ^* A; S/ Q" F: i
" [5 Q: }3 e- c; N* g- n; |找龍兒吧,如果他願意教的話,
! O1 K2 S6 i% f, ~7 V! j5 E6 d! c你可以學到不少。
1 W1 u, f0 L9 i* u E! e& M5 R; z" h) u2 K( `, m# e! u
[ 本帖最后由 krizal 于 2009-7-20 20:06 编辑 ] |
|