|
发表于 2009-7-20 18:50:20
|
显示全部楼层
你可以先了解下DMA。
9 n2 e& T; |# `+ R$ p/ @
+ q" t: C8 O5 U簡單的說要找base addr,
. Y0 w [" {$ e; k- N* i$ l; h& j我們只需關注pointer。+ p5 r" Y) R" I8 w- |( k
以下是原理: E t) S4 L- K( x; J
y1 j# l7 O1 e& ?, o
£ex in x86 asm
4 D) }" d' R+ k, b1.mov dword ptr ds:[edx+4],edi" m$ J5 Z8 G6 J+ C% `1 j, i
% I6 b3 E# e; I& |# u9 y4 eif the edx+4 is the dma addr which you want to find.
& V% q4 o c2 `) K( H: y* nedx is the base addr.
% x. }$ D- z1 w) P, I w
% p4 w/ @3 o- v# H9 q9 a9 D0 Q2.lea eax, [8*ecx+ecx]
x/ v, q/ C# B. s$ Q, v# U& b9 B" kif the eax is the dma addr which you want to find.# ]; @4 L, M2 N6 G5 n9 X- D
ecx is the base addr.2 O" ~6 p) e$ d
$ s* F8 F7 F, p7 }4 ^, Q* J5 r1 ~" a5 {' i, u! o( j! r
£ex in C++:
0 e% y# o2 c5 Y) v* C7 HDWORD *BaseAddr,val=0xea937f26;
& p0 x1 G: U9 c2 g6 H' n; eBaseAddr = new DWORD;
# j( A) a/ }4 ~; X, {*(BaseAddr+4)=val;
0 n f( H3 l1 Z. r# J, hcout<<"OffsetAddr:"<<*(BaseAddr+4)<<endl;1 U s5 u' A3 w* j* Z9 s5 u
©2009 VD7 Hacker Team Master- Krizal Chen
3 k$ n; R1 y* [: [, |& L F) U5 E( o/ y# `/ ? h0 t
" a' T7 m k4 W K/ H/ W
$ k1 G0 B9 i0 p" b以上已經涵蓋找出baseaddr需要的原理,* k& D& y2 M/ b, I5 l1 g. ?3 e3 N
接著用debugger分析和追蹤程式碼就要靠自己的努力了,6 s3 K2 R9 M! o, d- c
想學更多的話,個人最近沒什麼時間。
* `8 _) @/ S2 i5 B
* \8 |2 P/ V$ | Y找龍兒吧,如果他願意教的話,2 m: d, s9 n: s
你可以學到不少。
0 M+ ^! B" u0 w
8 ~1 G: u0 d! }, @" J8 o[ 本帖最后由 krizal 于 2009-7-20 20:06 编辑 ] |
|