|
7 R: a( \9 B T( }5 V拜读了ILSY 的大作《再谈进程与端口的映射》后,觉得很不错,用vc在电脑上调试,发现有些地方能取得信息 有些地方不能
* f- {& e6 o+ Z+ d( c2 m w更加怪的是,我的win2k上本来可以取得的,后来居然不行了。
. L' ~- o5 n* o4 S+ c而active ports却是那样稳定,有鬼不成 靠 ,偶不信6 ~' I# Z; Q' w1 Z
搬出OllyDdg经过调试对照发现,程序不能正常显示就是函数的OpenPhysicalMemory导致不能取得信息
; Y6 N0 k! _) b9 c下面是active ports的OpenPhysicalMemory反汇编部分8 e$ o9 `7 l. y H, f5 z- v6 X
0040FCF2 8B1D CC124000 MOV EBX,DWORD PTR DS:[<&KERNEL32.MapViewOfFile>] ; KERNEL32.MapViewOfFile
2 P& l1 [( p, K& A) @0040FCF8 C745 F8 00000A0>MOV DWORD PTR SS:[EBP-8],0A0000
( E. l2 N' I8 V0 E5 h) W0040FCFF BE 00100000 MOV ESI,10004 |& O) `: Q+ U/ {. Z5 h9 g, ^5 x
0040FD04 FF75 F8 PUSH DWORD PTR SS:[EBP-8]
- s! T& Z8 x0 z9 {) A5 [0040FD07 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]
$ ~& f5 R5 ~6 S# V0040FD0A 57 PUSH EDI0 g+ S @6 Q7 ~/ `- P
0040FD0B 57 PUSH EDI
2 S4 e- ~& n$ d+ U0040FD0C 6A 04 PUSH 4
' W4 P& Y& Z8 _9 F4 Z+ h) ~& `0040FD0E FF30 PUSH DWORD PTR DS:[EAX] h7 e5 \7 \) G( _" F8 y. C! L
0040FD10 FFD3 CALL NEAR EBX //// MapViewOfFile(*,4,0,0,0x0a0000); 1) map' q* q/ z. x6 L
......... ///如果没map 成功 再改参数 map 因为我看到的都是一次map就ok 就不看了
% F" e/ U5 g$ d9 w6 R0040FD2E 837D FC 00 CMP DWORD PTR SS:[EBP-4],0
+ R3 k& K- t1 _8 k! q0040FD32 76 17 JBE SHORT aports.0040FD4B
1 i3 f6 V C& \& O% }* D9 Y0040FD34 6A 67 PUSH 67) l. K' R9 }1 }- u
0040FD36 8D88 000C0000 LEA ECX,DWORD PTR DS:[EAX+C00]
3 z; t4 w3 i6 b& h4 n6 f7 L; N7 l. [0040FD3C 5A POP EDX
0 W" L* q2 m; H; D( }0 \ v2 k3 l///下面这段是关键部分了,也就是取得应该映射的起始位置处
6 B. j$ P# H, J& e0040FD3D 3911 CMP DWORD PTR DS:[ECX],EDX
4 j& V! _6 N8 W5 C0040FD3F 74 0A JE SHORT aports.0040FD4B' D: R- ]: y0 V! L% T
0040FD41 47 INC EDI
$ N# L& u& {9 r1 k/ E# W7 K0 U0040FD42 03CE ADD ECX,ESI
1 N+ P% ^0 H d! [5 M' v0040FD44 03D6 ADD EDX,ESI8 g' w/ w. z" _
0040FD46 3B7D FC CMP EDI,DWORD PTR SS:[EBP-4]3 b% A+ z6 Y/ ?1 s) G& P
0040FD49 72 F2 JB SHORT aports.0040FD3D 9 ?" F) p. T; f( T+ c
0040FD4B 50 PUSH EAX
: }. N' U% v$ d6 Q6 Z) a8 _0040FD4C FF15 D0124000 CALL NEAR DWORD PTR DS:[<&KERNEL32.UnmapViewOfFile>] ; KERNEL32.UnmapViewOfFile5 V0 z) E! S1 O G, ^
0040FD52 3B7D FC CMP EDI,DWORD PTR SS:[EBP-4]* u" K0 c' t5 v* Q% w
0040FD55 75 03 JNZ SHORT aports.0040FD5A+ |- B' E6 Y# s
0040FD57 6A 39 PUSH 39
7 E0 n; A# ?( T ?$ Q7 F0040FD59 5F POP EDI" r- F* {# V7 @ g% m* p4 ^ O
0040FD5A 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]
* J# v. M+ S3 @0 }8 w& a0040FD5D 56 PUSH ESI
& K6 |5 W+ Y: z& Y6 N0040FD5E C1E7 0C SHL EDI,0C
5 t# G3 J. x. _0040FD61 57 PUSH EDI2 C* f+ h1 a" I6 ?( @$ I
0040FD62 6A 00 PUSH 0
! F1 S4 n8 Z& K0040FD64 6A 04 PUSH 4+ G, O' F4 E0 \4 M% {" n d7 u
0040FD66 FF30 PUSH DWORD PTR DS:[EAX]2 ?9 n# Q* q' v$ H. o
0040FD68 FFD3 CALL NEAR EBX //MapViewOfFile(*,4,0,edi,0x1000);
" \# X* E, B, r( x+ N/ |0040FD6A 5F POP EDI' c5 c P+ h! G6 Z: |' [% K
0040FD6B 5E POP ESI
9 Q8 d% R, d' D0 x; Q( A0040FD6C 5B POP EBX) f) I) {6 e% y+ f
0040FD6D C9 LEAVE
6 e0 j2 u% j1 N, M" Y' B) p0040FD6E C3 RETN & W0 R- l# T0 ]2 t1 M8 j
看完了反汇编,接下来就是写代码了 呵呵 就在OpenPhysicalMemory加上下面这点就可以了
# x5 S1 f1 j& Q& k4 J% MpMapPhysicalMemory=MapViewOfFile(pHandle,4,0,0,0x0a0000); ///第一次映射的,后面那个参数如果映射没成功的话,就需要变化。在我电脑上这个就可以了,就用这个算了 要写完善的话 自己改改$ u. A% I( Y2 Y: R r
DWORD d_begin=0; d! W6 E1 L9 W7 g1 u& h
DWORD d_edx=0x67;
3 [- h4 J- l% F0 @DWORD d_p=pMapPhysicalMemory+0xc00;6 z# m6 g2 |1 r/ \4 `9 c
while(d_edx!=d_p). B4 ` r/ g& o, \7 I6 q
{7 ]1 r; Y: y/ f' r
d_begin++;' Q0 E4 s- x, A
d_p+=0x1000;# z1 O6 \! c; h8 L2 { a& Q
d_edx+=0x67; //// 这个0x67不知道是什么含义,请谁给个答案最好 :)$ @- X6 w7 w# M' Y' Y, A! S
if(d_begin>=0xa0)break;; Z: _1 E+ q' J0 x, h6 i _& v0 S
}
- U( h& b: O( ^Unmapviewoffile(pHandle);8 v. a; x7 y- k) z3 p' o! j
if(d_begin==0xa0)
3 B& }3 v6 u8 w2 N4 z2 sd_begin=0x39;
0 H8 |2 W% x" U5 H# x' d+ Z; Id_begin=d_edx<<0xc;
0 V \) @ u* T" h+ T5 K5 AMapViewOfFile(pHandle,4,0,d_edx,0x1000);
: B4 T$ t8 h! o/ {$ B7 l! I0 S应该加上后就可以马上看到效果了,不会出现映射失败的情况。 ' I# g M+ `2 b: S' m
后话:现在xp和win2003都出来那么长时间了,也许win2k下的这个意义不是很大 :),这个偶也说不清楚了7 t3 x& y# [" h' u1 v( T
如果你在做这个部分的时候遇到我同样的问题,加上上面的代码应该能解决,但如果你做的程序的稳定性要和active ports一样,建议你再仔细分析下它的反汇编。由于时间关系,我就不多写了
: z. s/ G' \3 { 在做这个的时候,偶有不少地方不明白的,比如为什么那个隐射地址要变化,是什么原因使得这个要变化呢?如果您能解释,还请告诉偶hhkkk@126.com ,偶在此先谢啦
0 Y9 h3 \$ d* Z# G 那个0x67也是个古怪的数据,不知道是为什么用那个数据,因为偶只是从破解的角度来分析的,对内核不熟悉 :(
! x8 u+ U2 N2 R, N1 Z另外:第一次写点东西,比较乱,将就着看吧,也算作是个人的笔记吧。 |