QQ登录

只需要一步,快速开始

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

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

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

1 i* j% m* O9 ?/ b- Z+ p 拜读了ILSY 的大作《再谈进程与端口的映射》后,觉得很不错,用vc在电脑上调试,发现有些地方能取得信息 有些地方不能 9 B/ w1 Q. O7 ^4 R+ |9 I8 w% b2 ~9 ?更加怪的是,我的win2k上本来可以取得的,后来居然不行了。 ( |2 }4 h+ d7 g% @' i* M而active ports却是那样稳定,有鬼不成 靠 ,偶不信9 r; W# i! I. E% F 搬出OllyDdg经过调试对照发现,程序不能正常显示就是函数的OpenPhysicalMemory导致不能取得信息8 ]) x9 N0 n r. G 下面是active ports的OpenPhysicalMemory反汇编部分 . b) f* t' T) E0040FCF2 8B1D CC124000 MOV EBX,DWORD PTR DS:[<&KERNEL32.MapViewOfFile>] ; KERNEL32.MapViewOfFile , X+ D A# q S6 C9 Q( S0040FCF8 C745 F8 00000A0>MOV DWORD PTR SS:[EBP-8],0A0000+ ~$ h* L: V8 y. A& R- ] 0040FCFF BE 00100000 MOV ESI,1000 7 v5 M1 m! Q7 C5 u* d. H0040FD04 FF75 F8 PUSH DWORD PTR SS:[EBP-8]/ k0 q* E0 C+ X 0040FD07 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8] 4 M- H7 O& q8 L* y0040FD0A 57 PUSH EDI 5 A! W. \ w, y* L% _2 E0040FD0B 57 PUSH EDI! c" S+ s W" X; {3 |- E 0040FD0C 6A 04 PUSH 4 7 r9 `! g* B! h# M' a0040FD0E FF30 PUSH DWORD PTR DS:[EAX] 0 D* K% ~( X6 c! q& P0040FD10 FFD3 CALL NEAR EBX //// MapViewOfFile(*,4,0,0,0x0a0000); 1) map0 J: k3 K( R2 l0 Y* A9 N: | ......... ///如果没map 成功 再改参数 map 因为我看到的都是一次map就ok 就不看了 Q6 B |# R3 L* x1 E3 K0040FD2E 837D FC 00 CMP DWORD PTR SS:[EBP-4],0" Q7 H7 X+ Q# I( y" } 0040FD32 76 17 JBE SHORT aports.0040FD4B 2 c4 D+ @. c+ @ P8 S0040FD34 6A 67 PUSH 672 i" H* I6 J( a* l! q! ` 0040FD36 8D88 000C0000 LEA ECX,DWORD PTR DS:[EAX+C00] / [# m. N9 j& R! Z7 ]* L0040FD3C 5A POP EDX , z7 W7 P- l1 y$ t; y0 q///下面这段是关键部分了,也就是取得应该映射的起始位置处# ~0 W r; i2 g* A5 a 0040FD3D 3911 CMP DWORD PTR DS:[ECX],EDX; o" s. T" ~% @& M 0040FD3F 74 0A JE SHORT aports.0040FD4B3 h, _9 ^/ V f* s7 o$ i7 J) ] 0040FD41 47 INC EDI 6 ]( _7 K) {* n0040FD42 03CE ADD ECX,ESI( \5 A% b0 a" Q" D4 R 0040FD44 03D6 ADD EDX,ESI& N# x ` k; p 0040FD46 3B7D FC CMP EDI,DWORD PTR SS:[EBP-4] . a: j+ `! G/ W/ P. s0 s4 Z- L0040FD49 72 F2 JB SHORT aports.0040FD3D

+ Q' W6 r# z5 \" h

0040FD4B 50 PUSH EAX 6 W8 J8 w6 ^3 e/ g: Y. l h' a2 E0040FD4C FF15 D0124000 CALL NEAR DWORD PTR DS:[<&KERNEL32.UnmapViewOfFile>] ; KERNEL32.UnmapViewOfFile ) ?! H; ^6 h; d7 @0040FD52 3B7D FC CMP EDI,DWORD PTR SS:[EBP-4] 7 m, p9 z% T" X+ [0 f$ W0040FD55 75 03 JNZ SHORT aports.0040FD5A 6 g1 k- ]/ _. M/ Z0040FD57 6A 39 PUSH 39 & f2 P, ]5 J7 k- P# i0040FD59 5F POP EDI 5 X8 C) M" e2 Y$ f0040FD5A 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]' s( D4 x4 a# Z( E4 ?% E) T$ f9 P 0040FD5D 56 PUSH ESI 8 k8 f: q9 E4 O0040FD5E C1E7 0C SHL EDI,0C# i9 D O$ [9 ] 0040FD61 57 PUSH EDI + A( t; ]1 x9 F$ _: Z' n: M0040FD62 6A 00 PUSH 09 c$ Q' Y6 e7 F7 s" j t- f 0040FD64 6A 04 PUSH 4 ' j+ `* @& F( H" q5 s0040FD66 FF30 PUSH DWORD PTR DS:[EAX] ) ~, u9 R, R2 B0040FD68 FFD3 CALL NEAR EBX //MapViewOfFile(*,4,0,edi,0x1000); 2 Q4 q1 g, @& {0040FD6A 5F POP EDI2 ?* g4 r3 W% i" a: I; A% ]7 k 0040FD6B 5E POP ESI# W/ p: i& c3 M5 I 0040FD6C 5B POP EBX x! i# |, |6 q3 ?/ e 0040FD6D C9 LEAVE, m6 M; P& ^( @) |8 F5 n9 G$ z9 y 0040FD6E C3 RETN

* B& P, y. m! J% I

看完了反汇编,接下来就是写代码了 呵呵 就在OpenPhysicalMemory加上下面这点就可以了 3 @" l! w! H4 J" E: JpMapPhysicalMemory=MapViewOfFile(pHandle,4,0,0,0x0a0000); ///第一次映射的,后面那个参数如果映射没成功的话,就需要变化。在我电脑上这个就可以了,就用这个算了 要写完善的话 自己改改4 w9 h( Z/ q! R4 T DWORD d_begin=0;9 u) J$ {; _( `- ^* p DWORD d_edx=0x67;8 J& b/ D! E( H* v DWORD d_p=pMapPhysicalMemory+0xc00; # M: x* O, F8 X+ N% F# N6 j5 }while(d_edx!=d_p) 5 P* Y' @7 p& S7 F% _( R$ M W$ A{ + }8 ~! P0 r' Q Zd_begin++; 2 C O# j* o: l' a& Cd_p+=0x1000; # V* {3 v1 @+ w0 ?1 ^; @d_edx+=0x67; //// 这个0x67不知道是什么含义,请谁给个答案最好 :) 8 y, n- ~2 K) ^; qif(d_begin>=0xa0)break; ; u9 Q* T8 ?/ w, X- t% e}) J p- Q6 ?2 v) q+ @ Unmapviewoffile(pHandle);7 |# ?& u8 `2 j7 T7 N if(d_begin==0xa0)% O5 Y( M6 ~3 R$ J- f4 T- R d_begin=0x39;( d6 p9 @9 J, a1 X* ~2 a0 o d_begin=d_edx<<0xc; . p& A1 h* h9 k6 m/ {MapViewOfFile(pHandle,4,0,d_edx,0x1000);

+ `: s+ j8 f4 |0 `' f

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

9 z& V8 }/ @) N9 x

后话:现在xp和win2003都出来那么长时间了,也许win2k下的这个意义不是很大 :),这个偶也说不清楚了8 z4 W9 \2 [: M5 K1 S! }! W 如果你在做这个部分的时候遇到我同样的问题,加上上面的代码应该能解决,但如果你做的程序的稳定性要和active ports一样,建议你再仔细分析下它的反汇编。由于时间关系,我就不多写了( D4 M& [& R& Z4 j$ { 在做这个的时候,偶有不少地方不明白的,比如为什么那个隐射地址要变化,是什么原因使得这个要变化呢?如果您能解释,还请告诉偶hhkkk@126.com ,偶在此先谢啦 ]( m g6 j8 ^ T z2 q& R1 Z3 C 那个0x67也是个古怪的数据,不知道是为什么用那个数据,因为偶只是从破解的角度来分析的,对内核不熟悉 :( + P6 q7 j7 N: }! T, j' w7 P& u' M另外:第一次写点东西,比较乱,将就着看吧,也算作是个人的笔记吧。

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-10 23:36 , Processed in 0.451330 second(s), 52 queries .

回顶部