|
发表于 2009-7-20 18:50:20
|
显示全部楼层
你可以先了解下DMA。
$ N5 ~9 U4 b5 M D3 x5 e' u. @2 C6 q; `$ r+ F
簡單的說要找base addr,. p. Z# i5 c p! ~7 Z% @# F$ [: x
我們只需關注pointer。8 l' {" L" j" D# c$ {0 e3 _9 R
以下是原理:. s9 ? b( Y( g0 o; r
6 Y# [0 s7 O1 G7 g" j3 ]( U5 r£ex in x86 asm
+ J$ ~% }# y# }7 u: f2 S1.mov dword ptr ds:[edx+4],edi1 ]2 y% o3 s5 e% c- w# d
N# f# p9 g. x0 m9 Q
if the edx+4 is the dma addr which you want to find. m' z h& O* F
edx is the base addr.7 h8 v. Z: v. J' ~5 q
( u: I6 F9 ^/ S! b
2.lea eax, [8*ecx+ecx]
4 |8 Z/ b" r' N# d. [if the eax is the dma addr which you want to find. Y* n( E' Y7 ~! f
ecx is the base addr.
_8 k& |' N& u- A4 o
5 u9 @, L: c: Y, a" S0 p& q3 V, G- g9 A5 \& A! x* H" @
£ex in C++:
4 ~* x7 u1 ?. Q N" m( b$ ~' kDWORD *BaseAddr,val=0xea937f26;
; H% v; c/ m+ ~* p3 N- h1 U8 c' BBaseAddr = new DWORD;
4 Y2 j" M; x# d b5 Q4 ?*(BaseAddr+4)=val;
* ~8 T: R. Y) G2 U6 O( g0 `2 p3 Tcout<<"OffsetAddr:"<<*(BaseAddr+4)<<endl;# I* g+ G, e! q, I* E" }' ]: g: ~
©2009 VD7 Hacker Team Master- Krizal Chen
( E$ H" O6 G7 C& K* [- Y* v" `. ~% i$ m4 i0 D/ c
$ R9 l/ [" Z0 p; c; X) L) k& I+ k/ w8 D$ s( r
以上已經涵蓋找出baseaddr需要的原理,
% e) `- i+ U) `7 r# p( j9 f' S接著用debugger分析和追蹤程式碼就要靠自己的努力了,
/ L, Z/ l- c/ H* v! z+ {想學更多的話,個人最近沒什麼時間。; ]9 z- r- N, x6 G* j M+ v; U$ w( L
# u) j. @+ [/ s/ P; ^ i找龍兒吧,如果他願意教的話,
) D, k3 X- ^$ [$ W' }( A你可以學到不少。) J4 N& }* A `: ]* \
- b) @: _8 U3 I, r7 a+ i" x8 T[ 本帖最后由 krizal 于 2009-7-20 20:06 编辑 ] |
|