QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2627|回复: 0
打印 上一主题 下一主题

《再谈进程与端口的映射》之续篇

[复制链接]
字体大小: 正常 放大
韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2004-10-6 12:18 |只看该作者 |正序浏览
|招呼Ta 关注Ta

4 J+ J* G7 D# B4 [拜读了ILSY 的大作《再谈进程与端口的映射》后,觉得很不错,用vc在电脑上调试,发现有些地方能取得信息 有些地方不能 & Y* ~4 i& v" y/ \- E更加怪的是,我的win2k上本来可以取得的,后来居然不行了。2 N' p% m5 L6 f 而active ports却是那样稳定,有鬼不成 靠 ,偶不信 : _9 D( f5 C- r( s9 l: H) Q搬出OllyDdg经过调试对照发现,程序不能正常显示就是函数的OpenPhysicalMemory导致不能取得信息, P. w+ T* I8 o* y5 D 下面是active ports的OpenPhysicalMemory反汇编部分7 t+ }% T+ V6 j- g( M 0040FCF2 8B1D CC124000 MOV EBX,DWORD PTR DS:[<&KERNEL32.MapViewOfFile>] ; KERNEL32.MapViewOfFile # F9 j: ~1 z" J% a# S5 U0040FCF8 C745 F8 00000A0>MOV DWORD PTR SS:[EBP-8],0A00001 v) K4 H8 X0 X% y i 0040FCFF BE 00100000 MOV ESI,1000: N c$ Y3 T& ~' ]6 Z! F 0040FD04 FF75 F8 PUSH DWORD PTR SS:[EBP-8] + e+ y p- F; @& m( Z0040FD07 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8] ( n4 ]; v) o1 C7 K0040FD0A 57 PUSH EDI1 V" ~, k O. R( k5 k8 Q M# [ 0040FD0B 57 PUSH EDI& o+ S9 x; f4 \ 0040FD0C 6A 04 PUSH 40 t* m0 P n- V" o 0040FD0E FF30 PUSH DWORD PTR DS:[EAX]4 ^. f1 ?2 D# i( v/ ~ 0040FD10 FFD3 CALL NEAR EBX //// MapViewOfFile(*,4,0,0,0x0a0000); 1) map' v: ^- I2 z1 |# t# v" D8 h ......... ///如果没map 成功 再改参数 map 因为我看到的都是一次map就ok 就不看了 ; `# `$ F" f s9 O) o0040FD2E 837D FC 00 CMP DWORD PTR SS:[EBP-4],0 ) l6 q3 L; y+ c8 T6 b* r) w0040FD32 76 17 JBE SHORT aports.0040FD4B7 k. _% ^/ k* y ^- v: h! t$ @ y 0040FD34 6A 67 PUSH 67 , B- B/ @& C6 v0040FD36 8D88 000C0000 LEA ECX,DWORD PTR DS:[EAX+C00] ! d' r$ R9 z& |% F6 c' n; T0040FD3C 5A POP EDX2 U% g% ^; Z/ B ///下面这段是关键部分了,也就是取得应该映射的起始位置处: B/ G0 X0 J [2 u# g 0040FD3D 3911 CMP DWORD PTR DS:[ECX],EDX ! v1 J3 j& d. s" g' T0040FD3F 74 0A JE SHORT aports.0040FD4B7 s6 A9 I; N( m4 Z% s$ l+ b5 N 0040FD41 47 INC EDI 8 g) D% Q; R+ ^: y2 a0040FD42 03CE ADD ECX,ESI3 v$ H' x1 T$ h- O' G. x 0040FD44 03D6 ADD EDX,ESI " |3 }5 P) Q0 K, b7 ^0040FD46 3B7D FC CMP EDI,DWORD PTR SS:[EBP-4] ! J- y; X5 u3 q s' C0040FD49 72 F2 JB SHORT aports.0040FD3D

$ ^: @+ k: ]1 c- X- Z2 G

0040FD4B 50 PUSH EAX; N" s. [% {4 u) f3 v7 w 0040FD4C FF15 D0124000 CALL NEAR DWORD PTR DS:[<&KERNEL32.UnmapViewOfFile>] ; KERNEL32.UnmapViewOfFile5 Q8 n3 W* q1 z4 | ^- `6 @: h 0040FD52 3B7D FC CMP EDI,DWORD PTR SS:[EBP-4]+ j1 V& M, T6 h- \- w# q/ H/ E 0040FD55 75 03 JNZ SHORT aports.0040FD5A; B; K8 H# Z4 N7 c 0040FD57 6A 39 PUSH 39 : D6 L" t. ~$ K0 \# F! e; P0040FD59 5F POP EDI3 x2 s6 S5 s g W 0040FD5A 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8] 4 b" T8 M2 A7 `6 v0040FD5D 56 PUSH ESI ; ]& P5 S. u1 u0 `$ z0040FD5E C1E7 0C SHL EDI,0C " i: L$ Y8 r$ F6 G# M5 S0040FD61 57 PUSH EDI. w0 E s" [- Q4 p: k! M9 } 0040FD62 6A 00 PUSH 00 ^ G3 g4 ]# m: l8 P7 k$ D+ G 0040FD64 6A 04 PUSH 4 0 A8 L7 i4 e) ]) ^9 d0040FD66 FF30 PUSH DWORD PTR DS:[EAX] - ]$ [9 R a. P+ ` C7 e5 X3 w0040FD68 FFD3 CALL NEAR EBX //MapViewOfFile(*,4,0,edi,0x1000); 7 e. S! V' a* T0 H( S* T8 f0040FD6A 5F POP EDI & l" i3 I. v8 f0 V0040FD6B 5E POP ESI7 [! M! E8 L5 r 0040FD6C 5B POP EBX! v! |9 Q7 B, b% {3 f8 ] 0040FD6D C9 LEAVE- B6 |+ Y# t3 [# w" M7 i2 e 0040FD6E C3 RETN

9 L7 ]8 Y7 K3 `! T+ T

看完了反汇编,接下来就是写代码了 呵呵 就在OpenPhysicalMemory加上下面这点就可以了 : A: ?# }) q5 w( S/ T( N! WpMapPhysicalMemory=MapViewOfFile(pHandle,4,0,0,0x0a0000); ///第一次映射的,后面那个参数如果映射没成功的话,就需要变化。在我电脑上这个就可以了,就用这个算了 要写完善的话 自己改改& E6 d: ]# Y& `0 W5 X% U DWORD d_begin=0;) M* o6 i9 ?$ Y+ F: | DWORD d_edx=0x67;& H, a+ M, R. `+ q0 d0 F DWORD d_p=pMapPhysicalMemory+0xc00;' v: m9 g/ I. Z# P while(d_edx!=d_p): Z. y3 P% ~3 b: i# _3 S {3 U; W8 m5 n# ?: U0 t/ X, k2 T d_begin++;, e" h: I5 q5 Z/ V, N3 F9 m* k d_p+=0x1000; , J' C, K7 Q& i* ^d_edx+=0x67; //// 这个0x67不知道是什么含义,请谁给个答案最好 :)2 I5 J( @* D" F8 o x0 R if(d_begin>=0xa0)break; . o4 c* x; K) B7 s& {}$ E0 j) \+ o, I. K" n7 S Unmapviewoffile(pHandle);. Q4 w8 g) D$ R+ J: o3 E if(d_begin==0xa0)2 B' k* ?5 ^" ~/ G, g* } d_begin=0x39; ) `4 J1 u6 r5 j( h9 `1 Y5 g6 n Sd_begin=d_edx<<0xc;8 D+ j! ]. ]6 `- i/ V+ w. ` MapViewOfFile(pHandle,4,0,d_edx,0x1000);

% A$ h" A8 [# g& `# C& }

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

/ V# a k- y I# c* g

后话:现在xp和win2003都出来那么长时间了,也许win2k下的这个意义不是很大 :),这个偶也说不清楚了 # E Q2 h8 Q; m C# o 如果你在做这个部分的时候遇到我同样的问题,加上上面的代码应该能解决,但如果你做的程序的稳定性要和active ports一样,建议你再仔细分析下它的反汇编。由于时间关系,我就不多写了6 j; U4 a. Y2 b 在做这个的时候,偶有不少地方不明白的,比如为什么那个隐射地址要变化,是什么原因使得这个要变化呢?如果您能解释,还请告诉偶hhkkk@126.com ,偶在此先谢啦# |& u) F; _. B# w0 |; p% _6 J 那个0x67也是个古怪的数据,不知道是为什么用那个数据,因为偶只是从破解的角度来分析的,对内核不熟悉 :( / Z; O' ?/ A) X- v8 o `& P另外:第一次写点东西,比较乱,将就着看吧,也算作是个人的笔记吧。

zan
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
您需要登录后才可以回帖 登录 | 注册地址

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

手机版|Archiver| |繁體中文 手机客户端  

蒙公网安备 15010502000194号

Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

GMT+8, 2026-6-14 08:36 , Processed in 0.431414 second(s), 53 queries .

回顶部