|
发表于 2009-7-20 18:50:20
|
显示全部楼层
你可以先了解下DMA。 {, `/ b( T4 N7 d5 T4 a5 h2 R
( f+ s, h, v9 R' u3 x簡單的說要找base addr,7 `- W9 X# Q Z* a" D
我們只需關注pointer。
5 z5 b+ ^4 b' [2 h/ H0 |- C以下是原理:
/ J0 }; A% |/ l# M7 ^& ^
1 c; v% K4 k* ]£ex in x86 asm; Y& U9 V7 k$ U" V8 H
1.mov dword ptr ds:[edx+4],edi
/ D+ i! K5 Q2 H0 ?
$ g" J9 r1 |: q% |* \! U4 Hif the edx+4 is the dma addr which you want to find.
% e2 Y9 b* `, c8 ~; R# [edx is the base addr./ H* d# C" l/ Y+ O! x
- V3 }9 ?' [( k
2.lea eax, [8*ecx+ecx]
0 M3 y# n" r$ S" ]8 ^" e1 b. xif the eax is the dma addr which you want to find.4 r/ G. P" C J5 k4 g" E7 |3 N
ecx is the base addr.1 F# m7 p' W; x R1 h! S, g
0 e) h. t! ^ c2 d7 o* t
! |: G u o2 R" G
£ex in C++:7 ?7 c5 ^5 {9 {% e$ X* }5 x
DWORD *BaseAddr,val=0xea937f26;" r8 v1 o, S- |) V& E: }
BaseAddr = new DWORD;
$ _9 t9 B0 t9 ^" c% l0 v( K*(BaseAddr+4)=val;
! s3 \6 v: B1 E" {8 Dcout<<"OffsetAddr:"<<*(BaseAddr+4)<<endl;
& W. W# \: o# L0 }* d! C/ q©2009 VD7 Hacker Team Master- Krizal Chen
$ `$ n' B( |1 o" e { G/ W. Z8 G Z! z1 @) d+ f
& T, h! G2 z4 Q# R8 v% m) o) W
$ m& y8 q% M |2 G# _7 r* o
以上已經涵蓋找出baseaddr需要的原理,# M/ E9 T$ o% ^4 @
接著用debugger分析和追蹤程式碼就要靠自己的努力了,
3 x# \! Y( A* `7 ?+ a想學更多的話,個人最近沒什麼時間。3 M g: D/ e: ]2 J; Y
- n$ I, j( O# |9 H
找龍兒吧,如果他願意教的話,
$ f* {! D4 V6 i你可以學到不少。
3 T% t" X- k0 x3 Z! k5 e2 l8 V! _" d! Z- @- O# a& E
[ 本帖最后由 krizal 于 2009-7-20 20:06 编辑 ] |
|