QQ登录

只需要一步,快速开始

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

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

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

# K7 F( t5 }6 i- b( O拜读了ILSY 的大作《再谈进程与端口的映射》后,觉得很不错,用vc在电脑上调试,发现有些地方能取得信息 有些地方不能& W. W5 G/ R+ n& P 更加怪的是,我的win2k上本来可以取得的,后来居然不行了。 d5 |" f+ T1 z2 F7 S0 j* W而active ports却是那样稳定,有鬼不成 靠 ,偶不信. U* u2 X. g* T% O# `/ F* O 搬出OllyDdg经过调试对照发现,程序不能正常显示就是函数的OpenPhysicalMemory导致不能取得信息/ J0 n% f5 c. r/ P4 U 下面是active ports的OpenPhysicalMemory反汇编部分 / t: c. Q, j( F* ^0040FCF2 8B1D CC124000 MOV EBX,DWORD PTR DS:[<&KERNEL32.MapViewOfFile>] ; KERNEL32.MapViewOfFile 5 f; d& N& ~ p2 D; Y; ?0040FCF8 C745 F8 00000A0>MOV DWORD PTR SS:[EBP-8],0A0000* z2 E# S0 c) s) w1 |5 |8 b 0040FCFF BE 00100000 MOV ESI,10002 x2 z: w2 Z" p# M( _ 0040FD04 FF75 F8 PUSH DWORD PTR SS:[EBP-8] 1 v: u3 F; c( w, B0040FD07 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8] 8 I. I' r: s5 l. i0040FD0A 57 PUSH EDI 7 o- i5 O. b" @% r- B0 ~0040FD0B 57 PUSH EDI' S2 [ }" e& x# A# H, c2 N3 i 0040FD0C 6A 04 PUSH 4 # c) B+ p& T; U, }/ n- v0040FD0E FF30 PUSH DWORD PTR DS:[EAX]. V4 q* T- i6 G, B8 Q9 u* X 0040FD10 FFD3 CALL NEAR EBX //// MapViewOfFile(*,4,0,0,0x0a0000); 1) map . L1 y, F( G* U/ H7 _......... ///如果没map 成功 再改参数 map 因为我看到的都是一次map就ok 就不看了 3 I6 I/ ^& ?' \9 O$ F G" `! e0040FD2E 837D FC 00 CMP DWORD PTR SS:[EBP-4],0 ! }9 O- t/ M$ B) D9 s0040FD32 76 17 JBE SHORT aports.0040FD4B 1 `2 G$ u5 `4 i! d0 R3 w0040FD34 6A 67 PUSH 678 F' z. ~9 `7 U- j 0040FD36 8D88 000C0000 LEA ECX,DWORD PTR DS:[EAX+C00]5 T; w1 B3 l4 X4 u 0040FD3C 5A POP EDX9 |- |1 \6 l: X3 X ///下面这段是关键部分了,也就是取得应该映射的起始位置处/ [) [3 Q+ u w 0040FD3D 3911 CMP DWORD PTR DS:[ECX],EDX6 r# x3 b2 ~9 R/ E/ ~ 0040FD3F 74 0A JE SHORT aports.0040FD4B4 W: n `" s C; t p* W- D 0040FD41 47 INC EDI `' u! o" T% E B, w/ L0040FD42 03CE ADD ECX,ESI( H1 E9 y' b1 L3 H7 r6 a 0040FD44 03D6 ADD EDX,ESI# p5 `5 ?9 ~& J 0040FD46 3B7D FC CMP EDI,DWORD PTR SS:[EBP-4] 5 x1 V. k+ g( l3 a a5 f0 r L0040FD49 72 F2 JB SHORT aports.0040FD3D

) t" t; k5 ~# o( c; g: O

0040FD4B 50 PUSH EAX0 _* ]- |) ]8 h9 S 0040FD4C FF15 D0124000 CALL NEAR DWORD PTR DS:[<&KERNEL32.UnmapViewOfFile>] ; KERNEL32.UnmapViewOfFile' Z) Z" L* @2 E5 C2 U/ S" l+ @ 0040FD52 3B7D FC CMP EDI,DWORD PTR SS:[EBP-4] a3 d# c9 q, ?- t4 x) p 0040FD55 75 03 JNZ SHORT aports.0040FD5A+ P% \/ R9 N: K' b 0040FD57 6A 39 PUSH 39, u) I$ B1 d. ~ 0040FD59 5F POP EDI$ h& ~7 x# V" r$ R+ a8 w( x 0040FD5A 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]: g! H5 { |& C' }2 N5 C. t 0040FD5D 56 PUSH ESI0 k2 P6 |5 o/ K* @# G* m 0040FD5E C1E7 0C SHL EDI,0C 8 j1 ]% b0 T% K9 o' i4 M: P0040FD61 57 PUSH EDI8 \& ?) Q& S6 F5 V$ ?4 G' c 0040FD62 6A 00 PUSH 04 h* v/ N) Z& g2 ?- P 0040FD64 6A 04 PUSH 4 & S- p) q; L/ f; D! C/ \0040FD66 FF30 PUSH DWORD PTR DS:[EAX]6 E6 j% j+ M* h7 ]+ B6 `7 C 0040FD68 FFD3 CALL NEAR EBX //MapViewOfFile(*,4,0,edi,0x1000);7 s% S9 D% o+ v( P 0040FD6A 5F POP EDI & U+ D6 }6 G2 C! B0040FD6B 5E POP ESI , _2 D" y+ G0 G0 @" {0040FD6C 5B POP EBX - W/ R# m# M: u3 w0040FD6D C9 LEAVE3 m8 u' A' s M8 f9 R9 [ 0040FD6E C3 RETN

8 x4 y# E' x7 T

看完了反汇编,接下来就是写代码了 呵呵 就在OpenPhysicalMemory加上下面这点就可以了 + q" {1 w" M$ z- U- z. npMapPhysicalMemory=MapViewOfFile(pHandle,4,0,0,0x0a0000); ///第一次映射的,后面那个参数如果映射没成功的话,就需要变化。在我电脑上这个就可以了,就用这个算了 要写完善的话 自己改改, D; J* T6 P! H A- N' o DWORD d_begin=0; & y+ h3 ]$ |8 p3 p5 E& S( xDWORD d_edx=0x67; ( `- X4 b3 p+ D" t' [% b1 @DWORD d_p=pMapPhysicalMemory+0xc00; 7 u' d/ `- n/ O8 r* D" Xwhile(d_edx!=d_p)* c* f& z9 v# ? { ( I8 x/ u' s. O; _9 Ld_begin++;# p5 k# X2 A2 q0 I# `/ ], s- M9 m d_p+=0x1000; % r- ]1 R: c' e) E$ B/ c- md_edx+=0x67; //// 这个0x67不知道是什么含义,请谁给个答案最好 :)2 n, X. k8 @- V# z if(d_begin>=0xa0)break; 3 `# t6 G$ T8 p' x. G}$ t' `" ~, D% ^+ t) u; H) A Unmapviewoffile(pHandle);5 _% [& D' w/ v) h- c) @1 V: X if(d_begin==0xa0) - K1 h4 R" Q- k4 Z. Z; _7 v: Id_begin=0x39; & k- t2 p* X' V# o5 A7 z3 M$ N( Gd_begin=d_edx<<0xc; 1 f" T& L' U8 e0 h. q5 \! w6 ~; ?MapViewOfFile(pHandle,4,0,d_edx,0x1000);

d% b/ Q, M" H1 s0 ? ]2 b( B- |0 W

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

* b- d7 U! L( q3 d9 s

后话:现在xp和win2003都出来那么长时间了,也许win2k下的这个意义不是很大 :),这个偶也说不清楚了( [! g, \: {* e 如果你在做这个部分的时候遇到我同样的问题,加上上面的代码应该能解决,但如果你做的程序的稳定性要和active ports一样,建议你再仔细分析下它的反汇编。由于时间关系,我就不多写了6 e1 N1 ` J7 r1 B 在做这个的时候,偶有不少地方不明白的,比如为什么那个隐射地址要变化,是什么原因使得这个要变化呢?如果您能解释,还请告诉偶hhkkk@126.com ,偶在此先谢啦1 d0 h8 c; G0 A% H 那个0x67也是个古怪的数据,不知道是为什么用那个数据,因为偶只是从破解的角度来分析的,对内核不熟悉 :(% Z; i( A4 F: |; P6 G- { 另外:第一次写点东西,比较乱,将就着看吧,也算作是个人的笔记吧。

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-18 19:13 , Processed in 0.346740 second(s), 52 queries .

回顶部