|
|
发表于 2009-7-20 18:50:20
|
显示全部楼层
你可以先了解下DMA。0 p& B: C. |: ^4 C
T: q3 a/ v8 p
簡單的說要找base addr,
3 B+ \ I- c' I3 y, J9 y0 w我們只需關注pointer。
. Z. t; k X( s" S0 m以下是原理:5 _2 O# C2 p2 D: P; }
' x- b- Z7 J0 r' B£ex in x86 asm) ~4 e4 m, B" c/ E6 [: H1 C3 }
1.mov dword ptr ds:[edx+4],edi
- o, d! ~2 I: [" J- I/ z+ Q# r3 z" s0 }% `0 z% a# H
if the edx+4 is the dma addr which you want to find.; c2 B2 {& a) I' t' n
edx is the base addr.
- n( n( S+ [) m5 k. ?# h3 R- O5 K) ?& X3 v
2.lea eax, [8*ecx+ecx]
7 T1 `0 K& x/ L! j( }, c0 N+ t8 wif the eax is the dma addr which you want to find.# K |( [( [, m$ J5 L
ecx is the base addr.
0 j' D2 w& a+ o7 q6 [( R L# V! Q% V% W7 P1 e( V# L) g
# T/ x' y, |9 z% P, Z, K) r
£ex in C++:
: n; P4 O* n" LDWORD *BaseAddr,val=0xea937f26;: [2 _" i% a3 O4 J! Z9 |& Y8 N4 \& f
BaseAddr = new DWORD;0 R/ o+ t/ {, v: [, ]+ s
*(BaseAddr+4)=val;8 F! `; {8 ]3 w' f( x$ i
cout<<"OffsetAddr:"<<*(BaseAddr+4)<<endl;
2 Q3 X z! G: C9 m4 s7 i0 ~©2009 VD7 Hacker Team Master- Krizal Chen
+ z& d9 C; P* ?4 {* r3 q: I X# A+ j9 F# S$ J' q# e
8 b6 i$ f0 n* b3 U! O
v0 p8 e8 A& ?# N, I6 M. m1 K以上已經涵蓋找出baseaddr需要的原理,
' A8 P: q7 `- B7 R t0 i$ s9 E接著用debugger分析和追蹤程式碼就要靠自己的努力了,
# E0 J5 p9 L$ i+ ^7 F8 i想學更多的話,個人最近沒什麼時間。 ]: a% g4 N6 ?: C f
6 Q# w5 R [* o8 h' P+ j找龍兒吧,如果他願意教的話,( Y* M/ B7 |& f7 ^& p4 H
你可以學到不少。
# U. p5 M! c3 X/ O; q, S3 s( R% \% P& Z8 c- A: Q
[ 本帖最后由 krizal 于 2009-7-20 20:06 编辑 ] |
|