数学建模社区-数学中国

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

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

% Q' B, U- x: i- s4 P# y: O! b拜读了ILSY 的大作《再谈进程与端口的映射》后,觉得很不错,用vc在电脑上调试,发现有些地方能取得信息 有些地方不能 . r( F5 N/ N4 p4 h5 ^更加怪的是,我的win2k上本来可以取得的,后来居然不行了。8 P" z' I/ _# q 而active ports却是那样稳定,有鬼不成 靠 ,偶不信) |; y0 u5 E9 b 搬出OllyDdg经过调试对照发现,程序不能正常显示就是函数的OpenPhysicalMemory导致不能取得信息8 l2 w9 ^& G1 X 下面是active ports的OpenPhysicalMemory反汇编部分, \! M L7 A+ T2 E8 E 0040FCF2 8B1D CC124000 MOV EBX,DWORD PTR DS:[<&KERNEL32.MapViewOfFile>] ; KERNEL32.MapViewOfFile q6 ^2 g8 G$ K6 j0040FCF8 C745 F8 00000A0>MOV DWORD PTR SS:[EBP-8],0A0000# ~) y r. L5 l. e$ S 0040FCFF BE 00100000 MOV ESI,1000 : R1 M) w f' I9 z6 W" f0040FD04 FF75 F8 PUSH DWORD PTR SS:[EBP-8] & a% X2 H/ M7 N" g6 v( B0040FD07 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]( N" d' D8 e- }6 @- I& U 0040FD0A 57 PUSH EDI 7 ~9 c1 Z4 O3 ]( j4 G+ k# x, e0040FD0B 57 PUSH EDI5 y, L8 ^( q/ j+ S. ^ 0040FD0C 6A 04 PUSH 4 0 n0 Z/ @' V+ A; c3 ~0040FD0E FF30 PUSH DWORD PTR DS:[EAX] 6 @8 j- `" p2 w7 p0040FD10 FFD3 CALL NEAR EBX //// MapViewOfFile(*,4,0,0,0x0a0000); 1) map ( k7 l; N$ u3 e1 ^; N......... ///如果没map 成功 再改参数 map 因为我看到的都是一次map就ok 就不看了 " y6 C4 E' C" M0040FD2E 837D FC 00 CMP DWORD PTR SS:[EBP-4],0( o0 O) C8 C g' | 0040FD32 76 17 JBE SHORT aports.0040FD4B5 t5 T( R8 C8 ^( C5 y 0040FD34 6A 67 PUSH 67; r( E# F Q: s7 V 0040FD36 8D88 000C0000 LEA ECX,DWORD PTR DS:[EAX+C00]0 z- v' `& x2 R 0040FD3C 5A POP EDX4 k4 S }* \% x2 L6 P1 \ ///下面这段是关键部分了,也就是取得应该映射的起始位置处 7 F% o, y, @5 E% V& z0040FD3D 3911 CMP DWORD PTR DS:[ECX],EDX : z1 O: {6 H( S$ a% q6 G0040FD3F 74 0A JE SHORT aports.0040FD4B/ v: S( Z! h& s( J* F/ O 0040FD41 47 INC EDI1 M6 s" q/ B Q; [- P7 @ 0040FD42 03CE ADD ECX,ESI 4 q( `* Z6 W& d- U0040FD44 03D6 ADD EDX,ESI ' L+ F+ E8 e+ }0 u! D0040FD46 3B7D FC CMP EDI,DWORD PTR SS:[EBP-4]3 L- r7 A& S2 [# R 0040FD49 72 F2 JB SHORT aports.0040FD3D

" _8 D* Z: P7 F

0040FD4B 50 PUSH EAX) V W5 i" i+ g7 {" J% p0 p 0040FD4C FF15 D0124000 CALL NEAR DWORD PTR DS:[<&KERNEL32.UnmapViewOfFile>] ; KERNEL32.UnmapViewOfFile 2 t* P; g; ]: e5 C0040FD52 3B7D FC CMP EDI,DWORD PTR SS:[EBP-4]& { `" n+ v9 J4 m; g8 q 0040FD55 75 03 JNZ SHORT aports.0040FD5A 9 v" ]( U5 m$ h# T: R" e5 s0040FD57 6A 39 PUSH 39 7 l- }0 e3 x( h3 b8 A! `; y; P6 y0040FD59 5F POP EDI1 K, Y9 R2 ?- ? }5 ^2 h, W/ B 0040FD5A 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]- y% h+ F4 U- ?) L9 _, e0 c 0040FD5D 56 PUSH ESI 2 Y4 N/ z$ u& W# P' m: M# x0040FD5E C1E7 0C SHL EDI,0C 4 x: k h! V! X: F# _; n5 H0040FD61 57 PUSH EDI ) _# q3 y4 ?! H( z9 n7 O0040FD62 6A 00 PUSH 0) ~% \) p1 D8 g8 x0 d 0040FD64 6A 04 PUSH 4 # h; |$ @8 K& y0040FD66 FF30 PUSH DWORD PTR DS:[EAX] . a( }8 |, l T. f) X# f7 J, Q0040FD68 FFD3 CALL NEAR EBX //MapViewOfFile(*,4,0,edi,0x1000); + W( g- n0 N! I# K% w# ? X0040FD6A 5F POP EDI* T( @8 V/ R! T2 e9 e( t [ 0040FD6B 5E POP ESI 7 z2 f/ {9 k& P* W2 f2 S- F0040FD6C 5B POP EBX2 p0 n B1 h I' _ 0040FD6D C9 LEAVE h% A& u- `& E. k3 U 0040FD6E C3 RETN

2 d8 R2 a% u c' T, Y0 N

看完了反汇编,接下来就是写代码了 呵呵 就在OpenPhysicalMemory加上下面这点就可以了 * }0 O# z. X( p2 ApMapPhysicalMemory=MapViewOfFile(pHandle,4,0,0,0x0a0000); ///第一次映射的,后面那个参数如果映射没成功的话,就需要变化。在我电脑上这个就可以了,就用这个算了 要写完善的话 自己改改# e" b2 \' b+ f DWORD d_begin=0; / o! E' O7 e" p# i, |DWORD d_edx=0x67; 7 U/ y+ f( ~) U5 _' K cDWORD d_p=pMapPhysicalMemory+0xc00;) V h) m3 ?1 O U( c: K! P while(d_edx!=d_p) ( A y* g4 v. p+ P" f5 {) k4 L{( s4 _( N( R; H* ~ d_begin++;6 V6 W7 O$ d+ c0 ^) `* j9 n d_p+=0x1000; , G. ^: _" o3 O- Qd_edx+=0x67; //// 这个0x67不知道是什么含义,请谁给个答案最好 :)7 G: q8 E9 E; q! y if(d_begin>=0xa0)break;* m9 e. c$ i+ j h& t } $ v- H; E' N, V9 m6 zUnmapviewoffile(pHandle);, Y& g* a4 i$ E9 j' D3 ] if(d_begin==0xa0)/ ]) K& Q; z3 ]/ M d_begin=0x39;% y. Q+ p4 V$ o. ?9 N d_begin=d_edx<<0xc; ?0 ~5 Y, n- w- U# S8 N9 iMapViewOfFile(pHandle,4,0,d_edx,0x1000);

" Y% }2 U5 r/ M" S/ p

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

! f! X+ @. f* \3 N x1 T% g6 W

后话:现在xp和win2003都出来那么长时间了,也许win2k下的这个意义不是很大 :),这个偶也说不清楚了6 p7 y+ p" ~- \* J. y( f5 [. F. Y; M 如果你在做这个部分的时候遇到我同样的问题,加上上面的代码应该能解决,但如果你做的程序的稳定性要和active ports一样,建议你再仔细分析下它的反汇编。由于时间关系,我就不多写了 " ^, ~8 Z. U. [3 F# O& G5 s 在做这个的时候,偶有不少地方不明白的,比如为什么那个隐射地址要变化,是什么原因使得这个要变化呢?如果您能解释,还请告诉偶hhkkk@126.com ,偶在此先谢啦. v1 `, ]6 c4 D; `& m8 u 那个0x67也是个古怪的数据,不知道是为什么用那个数据,因为偶只是从破解的角度来分析的,对内核不熟悉 :(% c# ?: k, t+ ^+ H: c7 D' ` 另外:第一次写点东西,比较乱,将就着看吧,也算作是个人的笔记吧。






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