|
|
发表于 2009-7-20 18:50:20
|
显示全部楼层
你可以先了解下DMA。' Z) ~2 m) ^& a" q* ^9 ^
: h2 E% S+ k- H) j! m- Q* j, k( g
簡單的說要找base addr,
: O1 S+ h; m. t3 L我們只需關注pointer。5 n& h. Q( q0 |
以下是原理:
2 t2 E$ a5 B8 s
1 ^1 n9 c: |$ d( D, _, {£ex in x86 asm
; \ n6 b/ k. Q4 v0 g3 b1.mov dword ptr ds:[edx+4],edi
: X1 R$ E' m; |0 T0 S( y2 Y
7 c+ j0 m3 F+ `0 g# v+ l- o% [if the edx+4 is the dma addr which you want to find.
6 L. p/ {" \+ s, r7 t( K5 D9 medx is the base addr.; w" k- ~( ?* J5 |" z
& d7 {2 g! S) F4 p ]/ R: y7 b
2.lea eax, [8*ecx+ecx], A7 t6 J! A' R& t3 E$ J
if the eax is the dma addr which you want to find.
" R! c* S: m; d2 z [/ I" lecx is the base addr.
- Q: i% a3 @- J, U; Y5 g0 u
( Y) [9 P6 h, j1 g, E4 Y d* J9 w- K
& m5 s2 b4 X9 L- _( z4 v. U£ex in C++:
7 R1 ?( y4 D) e1 lDWORD *BaseAddr,val=0xea937f26;% h( U- H8 t; M! P$ L
BaseAddr = new DWORD;) S; W- {$ j E
*(BaseAddr+4)=val;
F4 O+ Q- t) F- P' [& [cout<<"OffsetAddr:"<<*(BaseAddr+4)<<endl;
5 W! z9 l. j/ ~# Y8 b6 O/ C3 V©2009 VD7 Hacker Team Master- Krizal Chen; f7 w( r! [ a
' _7 I/ R# w- R5 ?) U B1 T. G O
- B' G9 G% n, L
1 \; M% l9 G5 O以上已經涵蓋找出baseaddr需要的原理,0 o) q$ R2 {/ ^3 x, {
接著用debugger分析和追蹤程式碼就要靠自己的努力了,
8 X3 J0 }: O5 d5 R$ J想學更多的話,個人最近沒什麼時間。
! k6 M# D/ ]7 G
& `* b+ V9 N# e找龍兒吧,如果他願意教的話," p# ?6 ]8 o& W4 G! ?, U1 T* O
你可以學到不少。
6 `* Z- W# Q \: D' ~) Z. u( X: j& a9 z8 ^) q9 A- u1 {' L
[ 本帖最后由 krizal 于 2009-7-20 20:06 编辑 ] |
|