|
发表于 2009-7-20 18:50:20
|
显示全部楼层
你可以先了解下DMA。
4 P. V9 e' D5 j( H4 T' u. m% S3 J' z% m) c `. }
簡單的說要找base addr,7 F" c1 G7 V) o ~' Q
我們只需關注pointer。
: U/ r U# o2 ^( s( d8 {, v以下是原理:
7 l: O) c4 L ~, ~( E# I# g! {, U& f9 r: V2 x9 Y: T5 r6 R0 `
£ex in x86 asm
- [2 f0 O# E4 S1.mov dword ptr ds:[edx+4],edi
* a, d: G9 h$ u4 q' h% k# H: ]9 V- l% T8 E
if the edx+4 is the dma addr which you want to find.
9 J5 Z3 \/ G* q. V: }3 @$ ^" M& g8 `edx is the base addr.
& o7 i# w4 P5 q# m% Q, w. ]; O1 e0 d, m8 o1 D- J7 q1 m
2.lea eax, [8*ecx+ecx]
! \7 i( X8 G! `0 Y) W! t# ~if the eax is the dma addr which you want to find.% f% T9 o; v" y- s# a) v
ecx is the base addr.1 s$ i7 X* z8 `% Z! X7 j
0 t4 [9 D8 I- `* U( w
$ H! m/ v+ d1 _6 Y$ S£ex in C++:& f3 f/ Y4 r7 p" h, g! c
DWORD *BaseAddr,val=0xea937f26;' w2 H8 D n0 V: ~
BaseAddr = new DWORD;
0 e! y. |$ X8 H4 {8 U; S*(BaseAddr+4)=val;+ U/ U9 j6 W5 _ S" d$ T- u
cout<<"OffsetAddr:"<<*(BaseAddr+4)<<endl;
5 a0 S8 m$ g3 A; x$ d6 Y7 U9 J©2009 VD7 Hacker Team Master- Krizal Chen( W6 U* ]/ p Q- r t7 P' K
( H8 u/ c; I* _0 R: {# f8 y2 n5 ~( y) ^
6 ]9 @* `8 U) y! s- r以上已經涵蓋找出baseaddr需要的原理,
( y' Y; P$ S: `( R# Z/ k% D接著用debugger分析和追蹤程式碼就要靠自己的努力了,
D0 b$ m- u3 n4 J+ d想學更多的話,個人最近沒什麼時間。
& p( T" k$ \& v) u4 D, a# Y3 _ I8 n/ X/ R! z
找龍兒吧,如果他願意教的話,2 |7 F% k" A9 U5 g5 N$ m- W. N
你可以學到不少。' x& [# t6 K" |; r: b
4 b- f3 ^( i+ E" Q8 G
[ 本帖最后由 krizal 于 2009-7-20 20:06 编辑 ] |
|