QQ登录

只需要一步,快速开始

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

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

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

! [( Q# ~& D% H. p8 W( _ 拜读了ILSY 的大作《再谈进程与端口的映射》后,觉得很不错,用vc在电脑上调试,发现有些地方能取得信息 有些地方不能& j2 Q K2 z) w( P* n7 [4 P& a6 V 更加怪的是,我的win2k上本来可以取得的,后来居然不行了。 ) Z7 U0 ]# s" i( K- Y0 j. g而active ports却是那样稳定,有鬼不成 靠 ,偶不信 a. f$ f0 L Y: J) g$ |% E p搬出OllyDdg经过调试对照发现,程序不能正常显示就是函数的OpenPhysicalMemory导致不能取得信息 5 l2 W, `+ N, d2 p' G+ _下面是active ports的OpenPhysicalMemory反汇编部分% `& y* g5 W9 F$ V7 R% E 0040FCF2 8B1D CC124000 MOV EBX,DWORD PTR DS:[<&KERNEL32.MapViewOfFile>] ; KERNEL32.MapViewOfFile8 g O) q7 j+ d( E' w- W 0040FCF8 C745 F8 00000A0>MOV DWORD PTR SS:[EBP-8],0A0000 , O% A. ~! F9 h/ Q0 V) _* Y: ^+ d2 ^0040FCFF BE 00100000 MOV ESI,1000- v! i; f. w; ]+ E7 C- J, I 0040FD04 FF75 F8 PUSH DWORD PTR SS:[EBP-8]" W: R& X0 t* S' q3 g 0040FD07 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]$ s% ^' W0 ?" V) `. H. x 0040FD0A 57 PUSH EDI. d* y$ z5 ~4 `0 ?7 A 0040FD0B 57 PUSH EDI3 [8 S+ Q7 A" L, ]) D 0040FD0C 6A 04 PUSH 4 1 r6 e; j2 @7 q( b6 l! m W: a% v0040FD0E FF30 PUSH DWORD PTR DS:[EAX]6 c' `& `. b+ _6 C" L6 B 0040FD10 FFD3 CALL NEAR EBX //// MapViewOfFile(*,4,0,0,0x0a0000); 1) map ) |! u) b N1 a3 P& v......... ///如果没map 成功 再改参数 map 因为我看到的都是一次map就ok 就不看了9 V3 U. k$ S! b: P. H; P; W' h 0040FD2E 837D FC 00 CMP DWORD PTR SS:[EBP-4],0- m5 m. E( |0 w 0040FD32 76 17 JBE SHORT aports.0040FD4B" ]3 e$ N& F: w( b2 _6 j4 a: V 0040FD34 6A 67 PUSH 67 7 B1 `% j$ w& }4 G: K6 Q$ I- m6 [0040FD36 8D88 000C0000 LEA ECX,DWORD PTR DS:[EAX+C00]1 W7 s& t) t- H; [ 0040FD3C 5A POP EDX2 b. ~& a% Q0 C: \ ///下面这段是关键部分了,也就是取得应该映射的起始位置处1 o( t d: x( w$ z$ H( ]6 h$ b 0040FD3D 3911 CMP DWORD PTR DS:[ECX],EDX ( E/ e/ F; B8 g6 a# ~/ h9 g0040FD3F 74 0A JE SHORT aports.0040FD4B / |4 q% Z* x- F3 d0040FD41 47 INC EDI% F5 E# r) {, X& G5 l 0040FD42 03CE ADD ECX,ESI! \( j: K% m" p% L2 n, B/ s" P4 ` 0040FD44 03D6 ADD EDX,ESI ( X; s& y( Y3 s$ D/ V; ], _, S0040FD46 3B7D FC CMP EDI,DWORD PTR SS:[EBP-4] 1 U8 K9 V$ w$ J0040FD49 72 F2 JB SHORT aports.0040FD3D

% ]1 P( f0 ?" b, U0 l' g' e

0040FD4B 50 PUSH EAX : [2 s# y" u7 y7 k; l' ^3 a: E0040FD4C FF15 D0124000 CALL NEAR DWORD PTR DS:[<&KERNEL32.UnmapViewOfFile>] ; KERNEL32.UnmapViewOfFile! A1 s% @5 c* q2 H7 n4 h 0040FD52 3B7D FC CMP EDI,DWORD PTR SS:[EBP-4]; Y1 C0 h: D" S* e 0040FD55 75 03 JNZ SHORT aports.0040FD5A * r+ p* _2 }4 _0040FD57 6A 39 PUSH 39 7 y1 d* A/ y/ i$ h* v& E0040FD59 5F POP EDI ) H- Y/ v2 ^# I% ~2 H0040FD5A 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]/ W# t- }8 @8 F X' W 0040FD5D 56 PUSH ESI - F/ R" P* O: d1 n; X5 ^0040FD5E C1E7 0C SHL EDI,0C3 Q) x. s N" b, [8 x7 Z 0040FD61 57 PUSH EDI ! X& m$ ?* q! G0040FD62 6A 00 PUSH 0 ! A2 C" G" g$ w0040FD64 6A 04 PUSH 4! d" @9 |" @4 n& \6 x8 `- |: I% W9 J 0040FD66 FF30 PUSH DWORD PTR DS:[EAX] _, ?$ N/ Q; @% @/ @' X0040FD68 FFD3 CALL NEAR EBX //MapViewOfFile(*,4,0,edi,0x1000); ; j6 a+ J* ~8 u5 }: E) u0040FD6A 5F POP EDI 2 @$ D. `+ W8 W7 N0040FD6B 5E POP ESI , }: f, p5 n. p- e! }; t0040FD6C 5B POP EBX6 w$ A& g9 x6 g$ r. d, n" ^7 e 0040FD6D C9 LEAVE3 |: F( t3 y8 O% l" T 0040FD6E C3 RETN

+ M1 D" l7 h2 F2 R

看完了反汇编,接下来就是写代码了 呵呵 就在OpenPhysicalMemory加上下面这点就可以了 % M4 z3 v K. {/ T/ JpMapPhysicalMemory=MapViewOfFile(pHandle,4,0,0,0x0a0000); ///第一次映射的,后面那个参数如果映射没成功的话,就需要变化。在我电脑上这个就可以了,就用这个算了 要写完善的话 自己改改 : u9 D% P* \& R$ |; vDWORD d_begin=0; 0 [, q3 x; v+ Y6 w' O5 Y+ x/ c. [DWORD d_edx=0x67; ( c& q( o* T' P8 K+ A; [DWORD d_p=pMapPhysicalMemory+0xc00; $ ^0 N" i$ _- Mwhile(d_edx!=d_p)* l! o1 \+ {" K' @ {+ J+ Q7 _+ K! b d_begin++;5 }3 }. `, _, K* t6 R d_p+=0x1000; " w; q! t+ ~! }d_edx+=0x67; //// 这个0x67不知道是什么含义,请谁给个答案最好 :)0 R* M$ z8 b9 w7 F9 k b1 x if(d_begin>=0xa0)break; 5 ?4 Y/ f) c, i& K, h% B} 3 o8 \' F* J/ K! FUnmapviewoffile(pHandle); ( T/ E- u1 x; C5 Jif(d_begin==0xa0) - o3 k5 ?- A. z. u1 g2 [; hd_begin=0x39; $ } B# H0 L8 h3 @) A! Q/ k8 Rd_begin=d_edx<<0xc; 9 H; G! m L$ J/ C1 e XMapViewOfFile(pHandle,4,0,d_edx,0x1000);

' D w7 w4 B* {: o5 _3 K% n

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

. M" Q5 r9 X$ [% G! @

后话:现在xp和win2003都出来那么长时间了,也许win2k下的这个意义不是很大 :),这个偶也说不清楚了 7 O0 u$ h2 H3 c7 Y, G, G9 O5 I 如果你在做这个部分的时候遇到我同样的问题,加上上面的代码应该能解决,但如果你做的程序的稳定性要和active ports一样,建议你再仔细分析下它的反汇编。由于时间关系,我就不多写了0 T& M/ e4 [5 u 在做这个的时候,偶有不少地方不明白的,比如为什么那个隐射地址要变化,是什么原因使得这个要变化呢?如果您能解释,还请告诉偶hhkkk@126.com ,偶在此先谢啦! M: I. O* l9 X8 B 那个0x67也是个古怪的数据,不知道是为什么用那个数据,因为偶只是从破解的角度来分析的,对内核不熟悉 :(6 y* D; X" ~3 j+ s6 Q 另外:第一次写点东西,比较乱,将就着看吧,也算作是个人的笔记吧。

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 07:48 , Processed in 0.975468 second(s), 52 queries .

回顶部