QQ登录

只需要一步,快速开始

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

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

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

9 a# Z8 r0 o3 I) k/ d# x: R7 Z 拜读了ILSY 的大作《再谈进程与端口的映射》后,觉得很不错,用vc在电脑上调试,发现有些地方能取得信息 有些地方不能 & Q& X1 S; ~, I5 Z8 X更加怪的是,我的win2k上本来可以取得的,后来居然不行了。# L7 h2 c/ L7 V l 而active ports却是那样稳定,有鬼不成 靠 ,偶不信8 o$ O0 _, r# @: |. ? 搬出OllyDdg经过调试对照发现,程序不能正常显示就是函数的OpenPhysicalMemory导致不能取得信息 6 a3 K/ I( g$ p下面是active ports的OpenPhysicalMemory反汇编部分 0 \0 C( S" ~9 } Y; a0040FCF2 8B1D CC124000 MOV EBX,DWORD PTR DS:[<&KERNEL32.MapViewOfFile>] ; KERNEL32.MapViewOfFile7 f( J5 l% B4 ~8 _9 f 0040FCF8 C745 F8 00000A0>MOV DWORD PTR SS:[EBP-8],0A0000" W% V2 F' ]( Z1 k% n2 p7 U P. P1 V/ p% j 0040FCFF BE 00100000 MOV ESI,1000! v5 B+ [9 W" p# }( s9 |9 g 0040FD04 FF75 F8 PUSH DWORD PTR SS:[EBP-8]( D2 }3 V% m$ l1 ` 0040FD07 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]- _8 Z; a: x5 d 0040FD0A 57 PUSH EDI . a4 |' \( D: t. e; J0040FD0B 57 PUSH EDI" ]# {+ q5 f" i# v9 N: b1 s4 D; y9 c 0040FD0C 6A 04 PUSH 41 w0 {9 g/ D, q. m' S7 V5 q 0040FD0E FF30 PUSH DWORD PTR DS:[EAX]$ T/ t; x1 n- g7 ] X, s e& _2 p q" i 0040FD10 FFD3 CALL NEAR EBX //// MapViewOfFile(*,4,0,0,0x0a0000); 1) map& {4 p+ E2 Z- J2 ?3 e ......... ///如果没map 成功 再改参数 map 因为我看到的都是一次map就ok 就不看了 * `& i; n$ O6 |" d ?0040FD2E 837D FC 00 CMP DWORD PTR SS:[EBP-4],08 Z: |5 U3 k: I6 a. F, H/ m 0040FD32 76 17 JBE SHORT aports.0040FD4B# [" v6 U3 r0 Z7 E 0040FD34 6A 67 PUSH 67$ e7 i/ @$ S2 p2 M% ] 0040FD36 8D88 000C0000 LEA ECX,DWORD PTR DS:[EAX+C00]8 h: P" j- O- ~" S+ ]) B1 x 0040FD3C 5A POP EDX, H# X8 K- m2 }8 x4 u' O7 k" ^. I ///下面这段是关键部分了,也就是取得应该映射的起始位置处1 L! X% U9 f, x; f% K 0040FD3D 3911 CMP DWORD PTR DS:[ECX],EDX. P E \5 _0 [. ^' L5 ^8 q) c 0040FD3F 74 0A JE SHORT aports.0040FD4B( S. ^3 K0 `5 w/ K 0040FD41 47 INC EDI * W7 E8 q" J$ F1 k7 _' I0040FD42 03CE ADD ECX,ESI k, H6 M7 S' y 0040FD44 03D6 ADD EDX,ESI5 e5 b" f1 c( d1 M( R 0040FD46 3B7D FC CMP EDI,DWORD PTR SS:[EBP-4] 6 s2 P" q) g/ p0040FD49 72 F2 JB SHORT aports.0040FD3D

! D1 o3 J1 N# K. V# d

0040FD4B 50 PUSH EAX& P* C; k( S3 n4 R 0040FD4C FF15 D0124000 CALL NEAR DWORD PTR DS:[<&KERNEL32.UnmapViewOfFile>] ; KERNEL32.UnmapViewOfFile% o4 D5 ^6 g- b& @- L- l 0040FD52 3B7D FC CMP EDI,DWORD PTR SS:[EBP-4] [( e. Z# i+ i$ C 0040FD55 75 03 JNZ SHORT aports.0040FD5A $ z w: c: w+ g- f6 k+ a, j0040FD57 6A 39 PUSH 39 - w* f1 [1 w2 l, K x3 X- V& n) Y0040FD59 5F POP EDI: C7 ~; P, D0 }+ d 0040FD5A 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8] - ]! ^4 l# R& a# i1 g" ]0040FD5D 56 PUSH ESI. X/ H' z/ R7 Z/ H) X 0040FD5E C1E7 0C SHL EDI,0C ' y! w9 K! ^. I4 b9 r% a, g0040FD61 57 PUSH EDI 9 _+ L4 ~1 D1 b" I8 C5 N# h0040FD62 6A 00 PUSH 0. g- ]9 v% S: d$ J [$ n1 [9 x 0040FD64 6A 04 PUSH 4& {7 J. R `6 P* t1 l, C 0040FD66 FF30 PUSH DWORD PTR DS:[EAX] . B0 T4 e4 Q. j2 b7 M5 y0040FD68 FFD3 CALL NEAR EBX //MapViewOfFile(*,4,0,edi,0x1000); # V- X# r" P% X. n& y4 a0040FD6A 5F POP EDI$ L( O4 E' ]7 I) U 0040FD6B 5E POP ESI% Y( @8 [% f/ { 0040FD6C 5B POP EBX ! r, ]! C2 ?5 q: g# f4 m0040FD6D C9 LEAVE + y' U: ?3 ~, E8 ]2 F+ X; [0040FD6E C3 RETN

7 P5 J6 Z2 T2 C! P4 ~

看完了反汇编,接下来就是写代码了 呵呵 就在OpenPhysicalMemory加上下面这点就可以了4 S/ s9 W7 Q9 O6 C- A pMapPhysicalMemory=MapViewOfFile(pHandle,4,0,0,0x0a0000); ///第一次映射的,后面那个参数如果映射没成功的话,就需要变化。在我电脑上这个就可以了,就用这个算了 要写完善的话 自己改改9 i Q. _- W, L& o1 m1 v* g) V/ X DWORD d_begin=0; , N. l% G7 T3 V3 v, |) PDWORD d_edx=0x67;# p! o' M. O- s `& g. H DWORD d_p=pMapPhysicalMemory+0xc00;. d$ A- C8 b: R) E# O while(d_edx!=d_p)1 N7 j# O- n% \3 R {1 O0 h+ d. P/ ]- ` d_begin++; ' C; }$ Y; X) x0 T$ L' td_p+=0x1000; 5 e3 X; W E9 t# }( ^d_edx+=0x67; //// 这个0x67不知道是什么含义,请谁给个答案最好 :) - U& ^0 ~( g6 Y2 e& }if(d_begin>=0xa0)break; " y# p3 ?) n3 ]/ ~+ P}9 h. i. q: E+ P N Unmapviewoffile(pHandle); & P/ i5 z2 L" L3 Yif(d_begin==0xa0) / ?- b8 b3 }' W+ K' Vd_begin=0x39; ) X. E% N' ^ f# cd_begin=d_edx<<0xc;' f2 j1 l& N' |* d; t+ Z* D$ o MapViewOfFile(pHandle,4,0,d_edx,0x1000);

( h; R) W, M# ?5 |6 A9 O$ [

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

5 r4 O) S9 \1 S" W( Q! u

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

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-14 10:20 , Processed in 0.370434 second(s), 51 queries .

回顶部