|
|
发表于 2009-7-20 18:50:20
|
显示全部楼层
你可以先了解下DMA。2 R- w" o, f; w1 v1 v" H% i3 s
( Y7 M) I: T' P4 Z9 ~. L1 M+ j
簡單的說要找base addr,
! R B& d9 A6 w我們只需關注pointer。4 @- g2 W& p5 F2 c. a* J4 L
以下是原理:
: f8 x; r, l9 m5 q/ _3 D0 `! p6 I4 r0 F
£ex in x86 asm
* k0 W2 g0 J- b* C7 ~: Y1.mov dword ptr ds:[edx+4],edi
7 A I9 ^) a" p/ H$ R% W0 m4 Y+ \
if the edx+4 is the dma addr which you want to find.2 ?# W) X7 a- Y5 i
edx is the base addr.
8 E+ D. D2 K1 Q
( [$ Y) v- z$ b2.lea eax, [8*ecx+ecx]9 Z* T9 t. g" p. ]5 y1 i
if the eax is the dma addr which you want to find.6 ]3 i/ B" \& j, P2 L" \+ U
ecx is the base addr.
$ k N- M6 g$ H9 O! C' c+ ~2 d8 G) o1 L5 U# M. l! |6 {/ }3 @) i
' d, i. S1 w4 g2 U9 J
£ex in C++:
! H! H0 d- e0 nDWORD *BaseAddr,val=0xea937f26;
. @0 A+ F5 v: ?4 T4 @BaseAddr = new DWORD;$ p C8 v: ^: z# Y' a
*(BaseAddr+4)=val;) P; B; T2 }) c d
cout<<"OffsetAddr:"<<*(BaseAddr+4)<<endl;/ F& _# J* U/ f8 ]$ ~7 \1 }& X' L
©2009 VD7 Hacker Team Master- Krizal Chen
) m1 m, @6 J) I; l% G' ^! d7 b+ q; v3 y; C2 H
) Z8 H4 l/ { S1 \
( z7 w v# `9 i7 J以上已經涵蓋找出baseaddr需要的原理,
2 ]* k4 b' O' Y% \) g/ G0 B5 N! Q接著用debugger分析和追蹤程式碼就要靠自己的努力了,
3 ^# u, W) \% x; ? N1 g想學更多的話,個人最近沒什麼時間。7 z* ` [+ ~% T8 ]2 F+ U' |& k$ j
6 K9 o. Y9 M) Z
找龍兒吧,如果他願意教的話,
! E# \/ F4 ?3 M9 @1 j q6 P& g你可以學到不少。
& ]3 L, L. F! j4 s' M8 k$ C+ T# w
! A2 X/ B) m* {1 R& H7 s[ 本帖最后由 krizal 于 2009-7-20 20:06 编辑 ] |
|