|
|
发表于 2009-7-20 18:50:20
|
显示全部楼层
你可以先了解下DMA。! u0 V: a* Y' d8 P: s9 k
) ^8 n7 s6 g- X7 f+ z/ Z6 S簡單的說要找base addr,
9 X Q- {) `! X* C我們只需關注pointer。0 _! u1 B% Q2 R; _2 e8 C/ p( K
以下是原理:
/ N7 K A/ S* m" R0 S+ ~# C
( w% R$ \* j0 O) T. L£ex in x86 asm
$ P( Z+ G& E, f" e5 |7 M4 Y1.mov dword ptr ds:[edx+4],edi
; _" g; e: U" x# {; t$ a4 H+ p' B$ @3 S6 k. v2 |
if the edx+4 is the dma addr which you want to find.
! J6 H* Z! V# N" |edx is the base addr.
3 H" z9 k% Q# m
3 ?5 U4 V7 T9 ]/ {% u2.lea eax, [8*ecx+ecx]
$ P( Q: @0 ^( N T7 lif the eax is the dma addr which you want to find.
2 A& _" |* ~4 V) |! N2 _" B' becx is the base addr.
% p' G* _/ @ |% n, {% N ^' Y
# U/ N7 i# F, ~4 {7 e
. C" B% Q7 x! y2 @£ex in C++: z" E- B3 q! B! k; q9 m
DWORD *BaseAddr,val=0xea937f26;
7 h( P0 o, U3 Z6 J1 L+ y4 GBaseAddr = new DWORD;. N( {1 j% l8 ~* r& |0 K2 f& q E8 Q' r
*(BaseAddr+4)=val;
! f; |2 G, a b6 |' }2 ucout<<"OffsetAddr:"<<*(BaseAddr+4)<<endl;
- z) B1 n" z# u- B { |©2009 VD7 Hacker Team Master- Krizal Chen7 J5 U# m. p' F9 G4 K
; c) E% I% ^0 i3 Z9 q
* H: w0 a+ C7 n# z. S: D, x
/ j$ J6 p! q4 L" T$ }) a: U以上已經涵蓋找出baseaddr需要的原理,5 A# a0 g1 `2 Z1 h8 B
接著用debugger分析和追蹤程式碼就要靠自己的努力了,; G1 |+ M# I- ~" k0 d1 G
想學更多的話,個人最近沒什麼時間。
, c1 ^7 E: Q( V* n( i! _" |, c, _5 k# G5 h" V+ z
找龍兒吧,如果他願意教的話,
4 \7 {, e0 u- w& B/ L0 ]) t* C你可以學到不少。
" X3 }* V+ X9 n+ Z3 F! F( p) ~! Q* N% d( ^: Z1 y( }
[ 本帖最后由 krizal 于 2009-7-20 20:06 编辑 ] |
|