QQ登录

只需要一步,快速开始

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

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

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

7 n2 ~# J9 k4 B2 f# d4 w7 T 拜读了ILSY 的大作《再谈进程与端口的映射》后,觉得很不错,用vc在电脑上调试,发现有些地方能取得信息 有些地方不能: P: }$ I0 d8 k9 R5 K 更加怪的是,我的win2k上本来可以取得的,后来居然不行了。 3 N" r3 y+ h) b7 i8 N2 F2 E+ W2 M1 {而active ports却是那样稳定,有鬼不成 靠 ,偶不信7 g. t0 T2 ]6 N8 O0 U% p; P 搬出OllyDdg经过调试对照发现,程序不能正常显示就是函数的OpenPhysicalMemory导致不能取得信息6 @9 M) p1 i/ V6 n7 V- o# l' c2 u 下面是active ports的OpenPhysicalMemory反汇编部分% b7 s9 a0 w+ t8 e5 V8 R 0040FCF2 8B1D CC124000 MOV EBX,DWORD PTR DS:[<&KERNEL32.MapViewOfFile>] ; KERNEL32.MapViewOfFile 4 S, o9 I: x7 `6 `0040FCF8 C745 F8 00000A0>MOV DWORD PTR SS:[EBP-8],0A00005 I% r! X# }1 C7 r1 Y6 r) l 0040FCFF BE 00100000 MOV ESI,1000; a- C5 f1 F4 H: {7 K/ y 0040FD04 FF75 F8 PUSH DWORD PTR SS:[EBP-8] ' U5 v2 j0 [) a9 G" e. p, _0040FD07 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8] 5 D: w9 |" q( I, N0040FD0A 57 PUSH EDI3 d0 g: | {- U' J" E: x" a 0040FD0B 57 PUSH EDI2 d: i' ^/ u7 R& V* l% @ 0040FD0C 6A 04 PUSH 4 . l1 T8 J5 s# W# r+ ]0040FD0E FF30 PUSH DWORD PTR DS:[EAX] % D! ~, v! X3 U# W0040FD10 FFD3 CALL NEAR EBX //// MapViewOfFile(*,4,0,0,0x0a0000); 1) map" @6 \5 F- |( ]$ F- V$ x$ R k ......... ///如果没map 成功 再改参数 map 因为我看到的都是一次map就ok 就不看了 : J* c/ Z2 A' r8 X+ i0040FD2E 837D FC 00 CMP DWORD PTR SS:[EBP-4],0 \+ M$ Y; d, C6 C 0040FD32 76 17 JBE SHORT aports.0040FD4B. Q: D# F, X1 ?- B& p 0040FD34 6A 67 PUSH 67) {, M( A8 R- ~6 Q! @0 Y 0040FD36 8D88 000C0000 LEA ECX,DWORD PTR DS:[EAX+C00]6 X+ Z, \1 j+ }; L4 i# w. v4 j! G 0040FD3C 5A POP EDX 3 l% o! K7 f% q& Q///下面这段是关键部分了,也就是取得应该映射的起始位置处 & w$ J2 T# t0 b) s1 {0040FD3D 3911 CMP DWORD PTR DS:[ECX],EDX1 [' d1 z6 \9 A# x( ^* A, t2 p' n 0040FD3F 74 0A JE SHORT aports.0040FD4B& z$ L+ [( e/ I/ f( _' B8 B 0040FD41 47 INC EDI $ e- w% w& }% J- @! }: I0040FD42 03CE ADD ECX,ESI5 N' e% j) x/ [" E' B4 K5 d 0040FD44 03D6 ADD EDX,ESI & V& k3 a5 d. ^8 N. n% z0040FD46 3B7D FC CMP EDI,DWORD PTR SS:[EBP-4] " X; E+ @: m# J4 K6 \, k9 G0040FD49 72 F2 JB SHORT aports.0040FD3D

# h$ u. X7 g7 i

0040FD4B 50 PUSH EAX 6 X8 P) ^9 ~8 T0040FD4C FF15 D0124000 CALL NEAR DWORD PTR DS:[<&KERNEL32.UnmapViewOfFile>] ; KERNEL32.UnmapViewOfFile' @" r/ i2 H% \9 z9 ` 0040FD52 3B7D FC CMP EDI,DWORD PTR SS:[EBP-4]+ y1 O+ U+ g, y- z- _ 0040FD55 75 03 JNZ SHORT aports.0040FD5A6 `( m& s8 F# d5 [ 0040FD57 6A 39 PUSH 395 p% O4 ^! W$ s( [3 L3 U 0040FD59 5F POP EDI8 Q" u% r4 B9 p/ M/ p( T: V$ R 0040FD5A 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]2 r+ l" [( R7 M' E 0040FD5D 56 PUSH ESI , Z1 P5 m" q0 T2 s2 N; U9 o0040FD5E C1E7 0C SHL EDI,0C4 Y! h! ^! R, K' L 0040FD61 57 PUSH EDI 4 @" h3 I' [5 k- f+ P. V" O& v0040FD62 6A 00 PUSH 0 $ r) |/ \" F: P0040FD64 6A 04 PUSH 45 F1 ~- r) c, Y/ L. G# b 0040FD66 FF30 PUSH DWORD PTR DS:[EAX]7 o* a# U, ~. Y0 v 0040FD68 FFD3 CALL NEAR EBX //MapViewOfFile(*,4,0,edi,0x1000); 2 C+ x: ~/ T7 N8 S0 Y1 q0040FD6A 5F POP EDI - q% D' L8 L! o: W- Q8 ~& W0040FD6B 5E POP ESI' y' b3 J, s) n* M- M 0040FD6C 5B POP EBX % H2 T. i6 }' T9 G) b9 F) M0040FD6D C9 LEAVE # y$ [5 u# Y$ l% P2 g0040FD6E C3 RETN

. T/ C$ B3 f# e8 k8 u7 @* c+ B9 ]: z

看完了反汇编,接下来就是写代码了 呵呵 就在OpenPhysicalMemory加上下面这点就可以了" b0 [7 ]5 U: } q/ }9 L0 j" X pMapPhysicalMemory=MapViewOfFile(pHandle,4,0,0,0x0a0000); ///第一次映射的,后面那个参数如果映射没成功的话,就需要变化。在我电脑上这个就可以了,就用这个算了 要写完善的话 自己改改 , b! W5 Z, r6 C5 ?5 xDWORD d_begin=0; 5 a: k+ W4 a# I" V1 {% rDWORD d_edx=0x67;% i# g t0 V9 s2 c# a DWORD d_p=pMapPhysicalMemory+0xc00; 1 F( e0 n1 ]3 W2 ywhile(d_edx!=d_p)* A' |. w- ]7 J3 ]% U8 S {2 ?# T5 [( ^7 J* R d_begin++;& V+ x! Z* M, b$ r I$ U d_p+=0x1000; R1 e, O# c' j2 h' ~2 zd_edx+=0x67; //// 这个0x67不知道是什么含义,请谁给个答案最好 :) ( ^! z5 f, C' P+ [- i0 W% }- ]+ Mif(d_begin>=0xa0)break;4 f7 ? _' d( |8 Q6 W$ i" e( e- y4 x } ' d& `6 i1 }( M2 nUnmapviewoffile(pHandle); 9 b. h# R5 M' Z* ]& Mif(d_begin==0xa0) % R5 X- d) g% ]( G3 dd_begin=0x39;( E2 s# j( |8 I' r4 U! p" x d_begin=d_edx<<0xc; % ?$ w$ ^* T7 c( `+ [MapViewOfFile(pHandle,4,0,d_edx,0x1000);

, B7 ]- e3 u' s; l* j: {* p. L

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

$ E% P5 y, c* Z1 v) R

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

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-4-21 00:56 , Processed in 0.415393 second(s), 52 queries .

回顶部