|
发表于 2009-7-20 18:50:20
|
显示全部楼层
你可以先了解下DMA。! W0 J3 a" g" k( a. x8 X
$ P3 Z1 g+ v n& q5 G+ q- U
簡單的說要找base addr,
) c! m8 V9 H' I' [4 ^我們只需關注pointer。
) M- O7 c; t- i5 w以下是原理:
6 F( v8 m; b9 s1 g& z3 k1 A# H2 [+ S$ r, Z
£ex in x86 asm, o6 J9 d) R+ b: e5 M
1.mov dword ptr ds:[edx+4],edi
8 W! J6 F9 p- [" D2 q2 D$ k! ?
if the edx+4 is the dma addr which you want to find.
8 W9 j$ V; J, D8 Vedx is the base addr.
8 z; u6 T/ ]0 Y# X& ^8 x6 N2 g9 `/ k
6 z0 t# W, {3 s1 R$ P2.lea eax, [8*ecx+ecx]/ K* c; ~$ S$ P; v5 r' x) C
if the eax is the dma addr which you want to find.
# D, C# r3 e! }6 C. x1 M8 c& s# ^ecx is the base addr.# q# v% d r- h: v! v; E: A
6 C, d. |) q7 p6 j) {; C! u% `
- u7 r' I+ _$ y/ p1 L0 E( l£ex in C++:. A& o6 f4 d, V, C- M
DWORD *BaseAddr,val=0xea937f26;
# d3 Q' p6 Q: _2 d$ T: dBaseAddr = new DWORD;% z6 i/ {. \! C \; |$ S
*(BaseAddr+4)=val;0 ?% w6 ]0 T* N2 _
cout<<"OffsetAddr:"<<*(BaseAddr+4)<<endl;) c* u( I/ ]) F; [; g0 G
©2009 VD7 Hacker Team Master- Krizal Chen# L, N, O* @( l
! D5 T+ H G2 B. M
8 ?# ]7 A, u$ i9 X4 t2 o- J
( B8 |1 P9 v0 t2 x& ~' J
以上已經涵蓋找出baseaddr需要的原理,1 @; e" r3 L' ]
接著用debugger分析和追蹤程式碼就要靠自己的努力了,* `. L, e% f9 H6 i% C
想學更多的話,個人最近沒什麼時間。
# N+ R) t2 N p7 F2 c" b# [$ @4 x* `4 l$ g1 ^
找龍兒吧,如果他願意教的話,9 f4 I; t+ F w" p" y* s K* ]
你可以學到不少。
( T8 M9 G) L/ D! {- ]2 {$ _& t: x( E9 m" c. a( h/ ^ j
[ 本帖最后由 krizal 于 2009-7-20 20:06 编辑 ] |
|