数学建模社区-数学中国

标题: 《再谈进程与端口的映射》之续篇 [打印本页]

作者: 韩冰    时间: 2004-10-6 12:18
标题: 《再谈进程与端口的映射》之续篇

3 w M4 F0 L0 U" [3 f' K 拜读了ILSY 的大作《再谈进程与端口的映射》后,觉得很不错,用vc在电脑上调试,发现有些地方能取得信息 有些地方不能 N" D, m9 B, ? ` 更加怪的是,我的win2k上本来可以取得的,后来居然不行了。 5 F3 o: x0 f% F: `" ?而active ports却是那样稳定,有鬼不成 靠 ,偶不信% ?) |4 k2 V' T 搬出OllyDdg经过调试对照发现,程序不能正常显示就是函数的OpenPhysicalMemory导致不能取得信息 3 {* j8 N8 j6 X( ^. X8 o! `下面是active ports的OpenPhysicalMemory反汇编部分$ Q# e* Z X- I% A. @ 0040FCF2 8B1D CC124000 MOV EBX,DWORD PTR DS:[<&KERNEL32.MapViewOfFile>] ; KERNEL32.MapViewOfFile+ {8 G8 }3 R- G 0040FCF8 C745 F8 00000A0>MOV DWORD PTR SS:[EBP-8],0A0000, O5 @1 I' U v, `* k 0040FCFF BE 00100000 MOV ESI,1000 ( M9 O4 Y B: J1 Y0040FD04 FF75 F8 PUSH DWORD PTR SS:[EBP-8] , s6 n) j# R7 M; [9 u- A8 |0 ~0040FD07 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]( o p0 ?# V! ]& p1 z8 S7 { 0040FD0A 57 PUSH EDI& \ ~2 V6 r# I/ a v5 `% `8 M: } 0040FD0B 57 PUSH EDI5 c/ @; m' ]# \& o5 f" c 0040FD0C 6A 04 PUSH 4 ' U2 _7 O9 a4 M7 E# {0040FD0E FF30 PUSH DWORD PTR DS:[EAX]" w( v8 T" l7 H1 }+ N$ r5 f1 ^ 0040FD10 FFD3 CALL NEAR EBX //// MapViewOfFile(*,4,0,0,0x0a0000); 1) map 5 D" P/ C: T- z" H......... ///如果没map 成功 再改参数 map 因为我看到的都是一次map就ok 就不看了 . m$ e2 d! C% q1 g+ |0040FD2E 837D FC 00 CMP DWORD PTR SS:[EBP-4],0 . M3 H' b" A [, u# \* M0040FD32 76 17 JBE SHORT aports.0040FD4B8 q4 a P0 G4 l 0040FD34 6A 67 PUSH 67 $ _% p* U+ A: ^: R+ i0040FD36 8D88 000C0000 LEA ECX,DWORD PTR DS:[EAX+C00] / g" E+ x" P, u' |+ Z5 b0040FD3C 5A POP EDX ; r1 D* m3 A- D! V& l9 v, w! M3 H$ N: F///下面这段是关键部分了,也就是取得应该映射的起始位置处 0 T& Y- m4 e- G' X; ?1 q) J* U9 z6 D0040FD3D 3911 CMP DWORD PTR DS:[ECX],EDX2 ^/ }3 s n# H" m M) o 0040FD3F 74 0A JE SHORT aports.0040FD4B! P8 G l+ @6 V2 [. g 0040FD41 47 INC EDI) W* [: H0 ~6 E! n# Y' ^6 C 0040FD42 03CE ADD ECX,ESI , u% z4 O0 b4 D) L5 w( D0040FD44 03D6 ADD EDX,ESI 8 H. F6 s1 y5 n q% Y0 | b3 S; d$ X0 i0040FD46 3B7D FC CMP EDI,DWORD PTR SS:[EBP-4]4 \' [% E" W3 W! T( G# F: N6 L 0040FD49 72 F2 JB SHORT aports.0040FD3D

/ O6 D" H3 B( t/ n- c) \

0040FD4B 50 PUSH EAX, A" n. }1 e: J' e 0040FD4C FF15 D0124000 CALL NEAR DWORD PTR DS:[<&KERNEL32.UnmapViewOfFile>] ; KERNEL32.UnmapViewOfFile 4 G! ~& I6 p( }$ b% f/ O6 `6 K0040FD52 3B7D FC CMP EDI,DWORD PTR SS:[EBP-4] 9 y. n' u$ O9 u4 \2 P0040FD55 75 03 JNZ SHORT aports.0040FD5A ; t2 m" V7 x* ^/ }; P% x* a0040FD57 6A 39 PUSH 39: Y' |1 T( t. k) f2 Q, r4 O 0040FD59 5F POP EDI # t1 b8 `" L2 n/ u- s0040FD5A 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]$ P" K5 E. K8 \2 P5 b 0040FD5D 56 PUSH ESI. E: i9 F; r% T. W7 [ 0040FD5E C1E7 0C SHL EDI,0C ! X2 |* [+ \) X9 S0040FD61 57 PUSH EDI # O" d$ o$ ?$ \8 c9 H; `4 A0040FD62 6A 00 PUSH 0 3 V8 R8 I0 i$ h0040FD64 6A 04 PUSH 4 / s% z& x |3 x$ c; |- g7 t4 F: S0040FD66 FF30 PUSH DWORD PTR DS:[EAX] 9 ^" h. R6 `7 T# G1 k6 ^3 n0040FD68 FFD3 CALL NEAR EBX //MapViewOfFile(*,4,0,edi,0x1000);. z( |8 V6 C8 `9 [7 ~3 E 0040FD6A 5F POP EDI7 `2 `5 `. E, m2 a8 S! |5 e2 } 0040FD6B 5E POP ESI $ A) ]! }/ I1 v. a7 I0040FD6C 5B POP EBX / q' S. ~2 m q, s3 x0040FD6D C9 LEAVE" u6 i5 S8 ~! _( E( Q 0040FD6E C3 RETN

' L: m/ k$ @2 D

看完了反汇编,接下来就是写代码了 呵呵 就在OpenPhysicalMemory加上下面这点就可以了 2 P- N. Y3 p8 j+ ^7 opMapPhysicalMemory=MapViewOfFile(pHandle,4,0,0,0x0a0000); ///第一次映射的,后面那个参数如果映射没成功的话,就需要变化。在我电脑上这个就可以了,就用这个算了 要写完善的话 自己改改 : [8 v2 I, O. X' O2 c3 O( C8 W0 g' yDWORD d_begin=0;2 w' ?3 U8 Y1 S& O8 P# B DWORD d_edx=0x67; . \+ e3 s! i0 w' h4 IDWORD d_p=pMapPhysicalMemory+0xc00;. o4 }5 v4 @; D y$ k3 _3 O while(d_edx!=d_p) $ \& u% Y0 G3 m{ : N1 y5 y0 H* Y- yd_begin++; p7 \6 x0 B) C$ Md_p+=0x1000;: b5 v4 b& `. Y d_edx+=0x67; //// 这个0x67不知道是什么含义,请谁给个答案最好 :)) G8 v5 g( R" ]+ L9 e if(d_begin>=0xa0)break;: T/ }$ B4 D* a% U" M$ | }5 c9 N2 Q6 T- g Unmapviewoffile(pHandle); $ n( x* S& J! |1 I/ V4 @6 Tif(d_begin==0xa0) 0 h6 d6 E5 k# s, od_begin=0x39; ' _ P5 k* N; r# z5 Wd_begin=d_edx<<0xc; ) T/ z8 c/ y& [; F/ lMapViewOfFile(pHandle,4,0,d_edx,0x1000);

; \* Q- e( P: _

应该加上后就可以马上看到效果了,不会出现映射失败的情况。

8 z& `" U0 i6 z+ |# C+ k

后话:现在xp和win2003都出来那么长时间了,也许win2k下的这个意义不是很大 :),这个偶也说不清楚了, {# b% k5 N4 J* | 如果你在做这个部分的时候遇到我同样的问题,加上上面的代码应该能解决,但如果你做的程序的稳定性要和active ports一样,建议你再仔细分析下它的反汇编。由于时间关系,我就不多写了2 v* {* l% l" W$ } 在做这个的时候,偶有不少地方不明白的,比如为什么那个隐射地址要变化,是什么原因使得这个要变化呢?如果您能解释,还请告诉偶hhkkk@126.com ,偶在此先谢啦 $ e% W1 H4 z6 b7 z% u* Z2 n" c 那个0x67也是个古怪的数据,不知道是为什么用那个数据,因为偶只是从破解的角度来分析的,对内核不熟悉 :(. m5 f. K% E7 V T+ L2 |* K) b 另外:第一次写点东西,比较乱,将就着看吧,也算作是个人的笔记吧。






欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5