|
|
发表于 2009-7-20 18:50:20
|
显示全部楼层
你可以先了解下DMA。6 Y8 R6 C( @6 f U5 F( U1 o- @9 z/ M
# A" o4 G; k7 P- E2 Q; q簡單的說要找base addr,( Q% }# b3 ?0 x+ |
我們只需關注pointer。% ?' K( h$ ^# F
以下是原理:
1 U) S/ O3 z* n5 @ O% }
+ x( ?9 n# l4 O- U£ex in x86 asm& [' z5 |, u% G1 U- g0 k) {+ u
1.mov dword ptr ds:[edx+4],edi# z6 B- W% v4 K$ F" l( z
5 A8 G; G/ @0 Xif the edx+4 is the dma addr which you want to find.
0 b! d$ S3 k0 B2 fedx is the base addr.! v' R. a: ^, ]7 k5 z3 m7 Q4 z; U; r( |
; c$ c$ m- i' R9 _, w9 G1 ^2 N P' \
2.lea eax, [8*ecx+ecx]& q, v% O0 F8 y: d$ C! T/ u
if the eax is the dma addr which you want to find.
9 f' O; V0 M5 z6 N4 \: Hecx is the base addr.
5 Z( f) b$ B$ V1 w( \: O ^; S& |( t5 J$ d& A
: w) {6 M. W: D# P- q- G( b s2 f2 w* h6 o0 p0 ~9 Y
£ex in C++:$ X. P& v1 ?+ f7 E* D9 F
DWORD *BaseAddr,val=0xea937f26;/ U9 I7 o4 c* ]; b* F, B
BaseAddr = new DWORD;
9 Z; f0 p: N. b: E8 {" ^+ d8 W: Y*(BaseAddr+4)=val;6 H# ^$ F& j! Q6 L4 Q, j
cout<<"OffsetAddr:"<<*(BaseAddr+4)<<endl;; z9 Z; z# i5 l) S* W0 B$ G
©2009 VD7 Hacker Team Master- Krizal Chen
0 X1 x+ x$ n1 L/ H/ o) l' a
; M; O7 ?6 [: z1 A; T3 G9 u. T" H
* w1 ^3 s% Y4 e4 ~3 Y' Z1 w. V8 H ?$ l
以上已經涵蓋找出baseaddr需要的原理,
7 C0 `1 ^( X5 ^; D8 @接著用debugger分析和追蹤程式碼就要靠自己的努力了,
! s" ~, q/ f* o( e8 ?+ w8 f3 o+ @想學更多的話,個人最近沒什麼時間。
! T7 Z- L8 V2 s4 a/ c. x4 T. G' U. m* r2 y" j) w
找龍兒吧,如果他願意教的話,# u1 _6 H9 v& U, i, u* w6 H3 N+ L3 f6 G
你可以學到不少。
* b/ J v( Q" [7 x& z9 M: Q5 t; H# Y* R: ?
[ 本帖最后由 krizal 于 2009-7-20 20:06 编辑 ] |
|