|
|
发表于 2009-7-20 18:50:20
|
显示全部楼层
你可以先了解下DMA。
( m4 V4 {& y. b F+ \2 }. }: V. t) T/ `7 s- D
簡單的說要找base addr,2 E* _% t7 |' v% }4 A" F
我們只需關注pointer。) \: F) n6 q! e. E" D* Z! n
以下是原理:' N B/ l# H' D; U( |
& e/ M8 D6 K. J6 L£ex in x86 asm
* U9 g) b4 c, T5 ~7 m1.mov dword ptr ds:[edx+4],edi
4 t: `, S8 R, q3 `( h7 E# g. ]! ?, t, J
) f; t8 T9 n* t; v% r2 f0 a0 mif the edx+4 is the dma addr which you want to find.
" D; Z- J& y. e6 Sedx is the base addr./ q( X4 [1 c0 n# ]) N
9 K( F" O8 `, ~8 j( F3 M+ i! b2.lea eax, [8*ecx+ecx]
7 r- R9 {) ?9 t9 N+ o- D0 sif the eax is the dma addr which you want to find.' g& D+ S* H8 e1 ~6 ?
ecx is the base addr.
- F5 `( F* S1 P
; T+ U) w: K! O& R2 v% W
; z' ]* ]& y. e5 _ T9 e" L6 _£ex in C++:2 J- R4 c6 B. T8 y: v$ K/ w% M
DWORD *BaseAddr,val=0xea937f26;
# K1 C% h4 ~" ?/ y9 E2 p7 zBaseAddr = new DWORD;
7 |- k, Y5 o& H, ]*(BaseAddr+4)=val;1 f% D- @( J7 j, r- {# ^" s! C* E
cout<<"OffsetAddr:"<<*(BaseAddr+4)<<endl;
* p0 ]2 A8 }2 u. L* B0 B7 ]©2009 VD7 Hacker Team Master- Krizal Chen
+ x F E O! v1 ~, {! [, F3 k. F8 }" { c+ V% z
0 o3 k4 C6 p$ V. }$ u% F: p! ?2 M3 B. ~% ~) _
以上已經涵蓋找出baseaddr需要的原理,8 p1 u1 Y/ B- I2 J. w, J' s( T
接著用debugger分析和追蹤程式碼就要靠自己的努力了,
: I/ R# f$ k) \# F% _# H0 s想學更多的話,個人最近沒什麼時間。
. ?3 W0 v4 U7 V+ Y; }% A! w4 L2 H1 V
找龍兒吧,如果他願意教的話,+ Q2 ]8 D; P2 {) H! z* a. P
你可以學到不少。5 t `) v! n) a3 ~9 s
7 ?! S8 v- Y S, O/ N: b
[ 本帖最后由 krizal 于 2009-7-20 20:06 编辑 ] |
|