QQ登录

只需要一步,快速开始

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

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

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

8 I7 b$ n9 O( t; ^拜读了ILSY 的大作《再谈进程与端口的映射》后,觉得很不错,用vc在电脑上调试,发现有些地方能取得信息 有些地方不能" R# J! \& ?+ A r( Z$ ~, W6 e1 `2 J 更加怪的是,我的win2k上本来可以取得的,后来居然不行了。 2 e$ ?6 K8 v2 |8 Q, R. l! C而active ports却是那样稳定,有鬼不成 靠 ,偶不信, u5 }. P" [( k8 ~% n7 E g( e 搬出OllyDdg经过调试对照发现,程序不能正常显示就是函数的OpenPhysicalMemory导致不能取得信息+ ]0 s: k7 z! j7 }1 G 下面是active ports的OpenPhysicalMemory反汇编部分 8 u9 o! z3 I: ` b- v0040FCF2 8B1D CC124000 MOV EBX,DWORD PTR DS:[<&KERNEL32.MapViewOfFile>] ; KERNEL32.MapViewOfFile ) M# `4 a y5 ^5 e0040FCF8 C745 F8 00000A0>MOV DWORD PTR SS:[EBP-8],0A0000 6 R ?: x S, ]1 m0040FCFF BE 00100000 MOV ESI,10008 A: ~# B" D: |3 U4 n/ a+ z: g 0040FD04 FF75 F8 PUSH DWORD PTR SS:[EBP-8]6 r1 W3 e: S) G1 j' j" N! N 0040FD07 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8], v, S0 F9 S! g2 ]. e2 N6 q; Q# m 0040FD0A 57 PUSH EDI % V! q2 T2 }. {/ R5 n: G6 f) p0040FD0B 57 PUSH EDI 0 i$ ~; u4 J5 i% v9 s) T, Q0040FD0C 6A 04 PUSH 4 % W3 E( g3 q7 U+ n- i" w2 m9 Y0040FD0E FF30 PUSH DWORD PTR DS:[EAX] t/ V. |/ M j 0040FD10 FFD3 CALL NEAR EBX //// MapViewOfFile(*,4,0,0,0x0a0000); 1) map' ]7 y8 M8 z9 {. }: X: y ......... ///如果没map 成功 再改参数 map 因为我看到的都是一次map就ok 就不看了( h. U$ j m% `" ^/ y; x. X6 ^ 0040FD2E 837D FC 00 CMP DWORD PTR SS:[EBP-4],0: J/ K1 I% C+ M 0040FD32 76 17 JBE SHORT aports.0040FD4B ; ~5 S J, d/ y: S4 ~( x0040FD34 6A 67 PUSH 67 3 f' c' q% T% w/ b" ^+ K: ^0040FD36 8D88 000C0000 LEA ECX,DWORD PTR DS:[EAX+C00]) j# N: D" X7 ]" b 0040FD3C 5A POP EDX 1 O% n! Y0 P6 Z///下面这段是关键部分了,也就是取得应该映射的起始位置处 |2 K+ s; Z) ^0040FD3D 3911 CMP DWORD PTR DS:[ECX],EDX 1 j: d$ h. I2 m1 L; y5 Z* x! x% U0040FD3F 74 0A JE SHORT aports.0040FD4B d; B1 B# m# ?2 u3 J2 |7 u 0040FD41 47 INC EDI 4 B2 o0 C4 H4 _/ T, I! q0040FD42 03CE ADD ECX,ESI ]% y& @5 X" N0 C0 k6 V 0040FD44 03D6 ADD EDX,ESI : O# S7 E1 B2 X% ~# I0040FD46 3B7D FC CMP EDI,DWORD PTR SS:[EBP-4]+ B7 z; j2 G0 R% g1 u( @0 a 0040FD49 72 F2 JB SHORT aports.0040FD3D

! q6 ]8 V4 M3 ?1 y- ?

0040FD4B 50 PUSH EAX4 H1 p! s& j* l$ L4 v) J 0040FD4C FF15 D0124000 CALL NEAR DWORD PTR DS:[<&KERNEL32.UnmapViewOfFile>] ; KERNEL32.UnmapViewOfFile" m% U' w$ C/ ?: T+ l5 y, S 0040FD52 3B7D FC CMP EDI,DWORD PTR SS:[EBP-4] 6 e/ g( s) H: P1 z0040FD55 75 03 JNZ SHORT aports.0040FD5A . e7 v) M5 i, @9 y0 P3 q, x0040FD57 6A 39 PUSH 39 4 A" m+ n* ` b& H; I0040FD59 5F POP EDI8 e+ {0 [: U4 J- `9 d 0040FD5A 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]. g* M) k" y T I 0040FD5D 56 PUSH ESI, H0 o- S7 o$ y 0040FD5E C1E7 0C SHL EDI,0C8 t1 l8 E x" F$ z2 c8 S5 g- t' P 0040FD61 57 PUSH EDI- c$ n1 B9 l. X 0040FD62 6A 00 PUSH 0% E, K/ l6 p0 N7 O+ }) I% z& z' N2 I 0040FD64 6A 04 PUSH 4 * Y3 Z. J! \9 V. y- B- ?, c. t# g0040FD66 FF30 PUSH DWORD PTR DS:[EAX]9 h9 e! U, c( [2 j 0040FD68 FFD3 CALL NEAR EBX //MapViewOfFile(*,4,0,edi,0x1000); 1 S* S) J5 `7 d9 Q+ e; @0040FD6A 5F POP EDI 2 |( G7 y# i [/ q0040FD6B 5E POP ESI+ F% G! e8 j3 A, Z3 S# U3 \& w 0040FD6C 5B POP EBX * q3 T% Q, F/ C ]) U4 O0040FD6D C9 LEAVE 3 y9 m; w$ h7 Q5 B; n9 Y0040FD6E C3 RETN

: v& q- t4 T+ l* |3 ~7 N5 `

看完了反汇编,接下来就是写代码了 呵呵 就在OpenPhysicalMemory加上下面这点就可以了 ' Z* t1 J- P L) a: F* A7 XpMapPhysicalMemory=MapViewOfFile(pHandle,4,0,0,0x0a0000); ///第一次映射的,后面那个参数如果映射没成功的话,就需要变化。在我电脑上这个就可以了,就用这个算了 要写完善的话 自己改改& Q3 ]( o# j- ~! I9 t" r2 a3 Y DWORD d_begin=0;* B3 @4 f: c1 o+ U8 B- P DWORD d_edx=0x67;& V& \( M) x: Q& }+ [ DWORD d_p=pMapPhysicalMemory+0xc00; 0 Q% [0 Z8 e/ j0 F- d& {while(d_edx!=d_p)) q1 W- p" q- e2 ~* m {# x, y! F Z! R7 T' U d_begin++;0 V# r( D' J/ O d_p+=0x1000;% S( Y: F# C+ z/ o# [% t7 X3 o, }2 M d_edx+=0x67; //// 这个0x67不知道是什么含义,请谁给个答案最好 :)6 X7 I" s: l* Y) Y) _) I$ b if(d_begin>=0xa0)break;( I1 C- c% D$ d/ I7 o$ w4 Z& m4 K4 p } 0 ^( v0 F+ @# q; E3 z+ LUnmapviewoffile(pHandle);! q. [' ?6 u$ x( v. z; O" y& }: Y if(d_begin==0xa0); w! O u' N9 l. B- P; m d_begin=0x39; 5 q$ h, u8 x) X5 y. D7 ^d_begin=d_edx<<0xc; 3 X0 Z S) Y5 ?- x* PMapViewOfFile(pHandle,4,0,d_edx,0x1000);

! _; o+ X" ?% r1 t+ K( X

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

( O5 ^! ^1 z8 a

后话:现在xp和win2003都出来那么长时间了,也许win2k下的这个意义不是很大 :),这个偶也说不清楚了 ( ^% ~1 ~; E9 M- y 如果你在做这个部分的时候遇到我同样的问题,加上上面的代码应该能解决,但如果你做的程序的稳定性要和active ports一样,建议你再仔细分析下它的反汇编。由于时间关系,我就不多写了, V$ ~* W2 D" n5 q* a4 {# K* _! [ 在做这个的时候,偶有不少地方不明白的,比如为什么那个隐射地址要变化,是什么原因使得这个要变化呢?如果您能解释,还请告诉偶hhkkk@126.com ,偶在此先谢啦 u0 W; d9 Z# [! p) j, J: e8 |" f 那个0x67也是个古怪的数据,不知道是为什么用那个数据,因为偶只是从破解的角度来分析的,对内核不熟悉 :(# L' J" c+ p: \& l 另外:第一次写点东西,比较乱,将就着看吧,也算作是个人的笔记吧。

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

回顶部