QQ登录

只需要一步,快速开始

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

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

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

: m/ @ v9 h; D% x8 N7 m& ]* i 拜读了ILSY 的大作《再谈进程与端口的映射》后,觉得很不错,用vc在电脑上调试,发现有些地方能取得信息 有些地方不能5 S6 F6 E* W U" }4 Z- T 更加怪的是,我的win2k上本来可以取得的,后来居然不行了。 ; b8 n& ^" O# ]9 ]而active ports却是那样稳定,有鬼不成 靠 ,偶不信 ( d9 H- x! R8 J; @, L2 m* b搬出OllyDdg经过调试对照发现,程序不能正常显示就是函数的OpenPhysicalMemory导致不能取得信息; g3 O' L& c; I 下面是active ports的OpenPhysicalMemory反汇编部分! `+ F7 L1 y) e1 N 0040FCF2 8B1D CC124000 MOV EBX,DWORD PTR DS:[<&KERNEL32.MapViewOfFile>] ; KERNEL32.MapViewOfFile - u, P* I. ] P, B C6 Y0040FCF8 C745 F8 00000A0>MOV DWORD PTR SS:[EBP-8],0A0000& r; E' V, N3 M 0040FCFF BE 00100000 MOV ESI,10009 \6 |6 r, D v- }; f: C; q 0040FD04 FF75 F8 PUSH DWORD PTR SS:[EBP-8] # g# x5 {. i: k( U0040FD07 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8] 5 ?" t ^: M- G2 q- [; _0040FD0A 57 PUSH EDI" B/ C7 M# a& ] c5 v: _! y) a 0040FD0B 57 PUSH EDI % U* w+ X: s. G' s8 T) c! G! R- }0040FD0C 6A 04 PUSH 4, T: |& [7 @& n- u 0040FD0E FF30 PUSH DWORD PTR DS:[EAX] W; @) x) F" Y, q' o5 W0040FD10 FFD3 CALL NEAR EBX //// MapViewOfFile(*,4,0,0,0x0a0000); 1) map 2 S4 `; q: J. |+ f* [+ m......... ///如果没map 成功 再改参数 map 因为我看到的都是一次map就ok 就不看了 7 H" l- Q! E5 I3 Q+ Z0040FD2E 837D FC 00 CMP DWORD PTR SS:[EBP-4],06 t$ Z! g' \9 V' \ 0040FD32 76 17 JBE SHORT aports.0040FD4B+ b m; |4 ]" l. c- H 0040FD34 6A 67 PUSH 67 5 X: t7 s& z; b# B1 i# \ ~0040FD36 8D88 000C0000 LEA ECX,DWORD PTR DS:[EAX+C00] 9 Q' I9 m! q* K/ W* r8 K3 Z0040FD3C 5A POP EDX b( b1 J7 W6 K, S1 P3 u) V P: ^ ///下面这段是关键部分了,也就是取得应该映射的起始位置处8 B9 a. x; s. X; k; Z 0040FD3D 3911 CMP DWORD PTR DS:[ECX],EDX 0 B }4 a. S. d, U0040FD3F 74 0A JE SHORT aports.0040FD4B8 h$ h3 p9 n/ l: ^( I" Q 0040FD41 47 INC EDI % f: \3 H# ^0 M0040FD42 03CE ADD ECX,ESI) Y2 j1 k4 ^) v; c9 d H 0040FD44 03D6 ADD EDX,ESI 6 f* m& C0 z& d+ ]+ D" v% P6 |; ?0040FD46 3B7D FC CMP EDI,DWORD PTR SS:[EBP-4] 3 f0 C" w+ l( }) s; C" C8 A0040FD49 72 F2 JB SHORT aports.0040FD3D

# Q2 f* |1 u# q1 r) f

0040FD4B 50 PUSH EAX Z) ^8 y; v0 u4 H: h9 Q0040FD4C FF15 D0124000 CALL NEAR DWORD PTR DS:[<&KERNEL32.UnmapViewOfFile>] ; KERNEL32.UnmapViewOfFile; c4 F2 M6 R4 V' e 0040FD52 3B7D FC CMP EDI,DWORD PTR SS:[EBP-4]5 F, r A' j6 V! x' P% y 0040FD55 75 03 JNZ SHORT aports.0040FD5A6 M5 i! s7 c: T/ l6 v: X, f$ t 0040FD57 6A 39 PUSH 39 + f4 f2 f8 l! X0040FD59 5F POP EDI0 t2 g+ @ N, u; L0 z: Z 0040FD5A 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]# T8 z8 D- E6 K, [3 K" x8 X 0040FD5D 56 PUSH ESI 0 T- X1 S; @! a0040FD5E C1E7 0C SHL EDI,0C ( m. W2 t4 o* b0040FD61 57 PUSH EDI" }/ `% ]- _4 Y; O6 T. u" c 0040FD62 6A 00 PUSH 0 / w: }8 s/ Z4 V0040FD64 6A 04 PUSH 4 # L2 {( D6 l% X: Z1 k+ {0040FD66 FF30 PUSH DWORD PTR DS:[EAX] 7 U9 E8 i: H4 p, p2 Y6 D% Y4 C0040FD68 FFD3 CALL NEAR EBX //MapViewOfFile(*,4,0,edi,0x1000); - d9 G# e9 E% E7 \( H8 V+ u0040FD6A 5F POP EDI ' p( \' y W# ~& p+ r# U0040FD6B 5E POP ESI& p5 V' h2 ]! s& F 0040FD6C 5B POP EBX5 V' q. W E2 x/ e 0040FD6D C9 LEAVE5 _ `2 i: ?! Z 0040FD6E C3 RETN

# |3 S$ D: z3 C9 J' i2 x

看完了反汇编,接下来就是写代码了 呵呵 就在OpenPhysicalMemory加上下面这点就可以了 + Q1 `: V) g! K2 H! t" L3 c2 |0 VpMapPhysicalMemory=MapViewOfFile(pHandle,4,0,0,0x0a0000); ///第一次映射的,后面那个参数如果映射没成功的话,就需要变化。在我电脑上这个就可以了,就用这个算了 要写完善的话 自己改改 ( x' y X, q& H( v jDWORD d_begin=0; . ^" F1 h) M5 FDWORD d_edx=0x67;9 w4 {; i, u0 X9 D DWORD d_p=pMapPhysicalMemory+0xc00;; l x' W8 P8 m# X0 `1 e while(d_edx!=d_p) # T9 y$ N. a1 g* P3 _) z( B" h( O" d{ 1 G* L1 k. Q: l- [, Q! \d_begin++;/ `' m+ k! z+ e9 L( ] d_p+=0x1000;& x+ U; Q6 c# S+ k' U. w0 u d_edx+=0x67; //// 这个0x67不知道是什么含义,请谁给个答案最好 :)) R9 T8 O/ Y# |* W0 r if(d_begin>=0xa0)break;1 Y, N( ^8 D/ G K U7 v3 M6 e2 Y+ Z }0 Z! m5 c8 V, x ?7 h6 o Unmapviewoffile(pHandle);% F7 d& h% a7 P if(d_begin==0xa0), D* K* P* [! a9 [% ~ K1 S; { d_begin=0x39; 1 G1 x% `! ^0 ?: A; ? Ad_begin=d_edx<<0xc; * g# s, T, y- O) w; N& bMapViewOfFile(pHandle,4,0,d_edx,0x1000);

% v* _9 e1 m, k( _$ e

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

, D$ V; B5 C( P( ~( Y* g! Z# @/ N

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

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-9-1 16:33 , Processed in 0.268922 second(s), 52 queries .

回顶部