|
发表于 2009-7-20 18:50:20
|
显示全部楼层
你可以先了解下DMA。+ N3 H; f" r: E& A% b s
3 c* |$ {. q; s
簡單的說要找base addr,7 M/ Z, L, b" x( C5 q
我們只需關注pointer。+ v1 g% ]; q2 T: @; j# Z4 h
以下是原理:( o1 j8 m+ v! p% G6 ^ r/ x* S
: q% A+ z6 i0 ^' l8 q0 f# O
£ex in x86 asm M# G; b5 s& d$ M+ X
1.mov dword ptr ds:[edx+4],edi
4 n( Z9 z$ S# y! ] X' F
+ F8 j) }) p4 M1 H2 I' Qif the edx+4 is the dma addr which you want to find.
8 F* m3 o$ E9 N! z" \! u; ~edx is the base addr.& A+ T3 X; x& G+ l/ N' l+ u
9 @1 Q' v; q& f# D2.lea eax, [8*ecx+ecx]
, M& Y2 I1 j/ M9 E" c! I; \if the eax is the dma addr which you want to find." ?( D' p: s. O) b
ecx is the base addr.
7 w# P3 H% Q6 p. G" Q7 U
7 ~0 w+ P7 X; O- [* Q
( f" S) F p/ e£ex in C++:
* X( p6 r9 K; { H$ fDWORD *BaseAddr,val=0xea937f26;
5 k0 {# x: X5 [) `, y+ C9 V MBaseAddr = new DWORD;
# F. k& I' _) b X$ r0 f, L*(BaseAddr+4)=val;* D, C* S1 t# c# Z8 p. J
cout<<"OffsetAddr:"<<*(BaseAddr+4)<<endl;
3 O' z( r. M: l9 K. Z# o9 F©2009 VD7 Hacker Team Master- Krizal Chen
; B* A! C) {3 v6 z" H$ i% T
! S- j4 S+ @2 j' k
" [1 n8 t% O5 u3 w+ U
) z# Q" N( t5 z, M& x! K. M以上已經涵蓋找出baseaddr需要的原理,& z* z0 N1 Q* \, w3 Z0 Q
接著用debugger分析和追蹤程式碼就要靠自己的努力了,
1 t7 i& r+ u( E% ^ }0 f想學更多的話,個人最近沒什麼時間。1 j4 z& @0 k- C# q/ ~
L6 c4 y; v4 X& E9 M4 ]找龍兒吧,如果他願意教的話,! n$ b7 J2 }- \! F
你可以學到不少。
) Z" n" B3 ]- p# H+ \& \$ ^
; J) q& N& Z3 w( x# O! }9 _[ 本帖最后由 krizal 于 2009-7-20 20:06 编辑 ] |
|