QQ登录

只需要一步,快速开始

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

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

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

8 W3 W+ P; z ]6 L8 L( v% D 拜读了ILSY 的大作《再谈进程与端口的映射》后,觉得很不错,用vc在电脑上调试,发现有些地方能取得信息 有些地方不能3 o9 a, g, P6 l' ~ 更加怪的是,我的win2k上本来可以取得的,后来居然不行了。) i5 W$ `, ^9 F' t1 ^1 _ 而active ports却是那样稳定,有鬼不成 靠 ,偶不信 ) a0 A9 G4 Z( x$ |; w搬出OllyDdg经过调试对照发现,程序不能正常显示就是函数的OpenPhysicalMemory导致不能取得信息$ W% [6 w0 h9 w- r+ Z1 W 下面是active ports的OpenPhysicalMemory反汇编部分+ \1 P0 p( e$ f" f8 }8 L9 W* M 0040FCF2 8B1D CC124000 MOV EBX,DWORD PTR DS:[<&KERNEL32.MapViewOfFile>] ; KERNEL32.MapViewOfFile ) l1 X$ n% I& D4 i. V" ~0040FCF8 C745 F8 00000A0>MOV DWORD PTR SS:[EBP-8],0A0000 `! n$ c+ r0 V& C, s! Q0040FCFF BE 00100000 MOV ESI,1000 # O+ |+ k0 a, r) h& _9 T0040FD04 FF75 F8 PUSH DWORD PTR SS:[EBP-8] & i6 i9 v! E$ W$ b0040FD07 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]1 g- `6 ~) E* e0 Z+ x, o9 _# k6 _ 0040FD0A 57 PUSH EDI $ i( A y- {8 L# V% v0040FD0B 57 PUSH EDI 3 z2 v- L9 G% N) U8 f$ |0040FD0C 6A 04 PUSH 4" j* z W! q2 e, E e, p 0040FD0E FF30 PUSH DWORD PTR DS:[EAX]4 t6 e5 ]& D6 o: b- v, p4 {, I 0040FD10 FFD3 CALL NEAR EBX //// MapViewOfFile(*,4,0,0,0x0a0000); 1) map 0 a, \4 S+ a/ |......... ///如果没map 成功 再改参数 map 因为我看到的都是一次map就ok 就不看了- G0 i* m9 I+ e+ ? 0040FD2E 837D FC 00 CMP DWORD PTR SS:[EBP-4],0 % r" I( E* }9 k7 r- t. L" n0040FD32 76 17 JBE SHORT aports.0040FD4B. ^( a0 T- b7 T, e) }5 k1 i 0040FD34 6A 67 PUSH 67 4 z h, [. ? G I5 X9 ]- N0 k0040FD36 8D88 000C0000 LEA ECX,DWORD PTR DS:[EAX+C00] ( ^5 Y; \- _0 z) k" A0040FD3C 5A POP EDX & s- R/ z) a2 O* ]7 `1 B///下面这段是关键部分了,也就是取得应该映射的起始位置处 ; l7 c) K1 e5 E0 ` u+ `0 @0040FD3D 3911 CMP DWORD PTR DS:[ECX],EDX ) R; A/ O C, `, D; i0040FD3F 74 0A JE SHORT aports.0040FD4B 5 D/ B/ j0 C+ E$ S. t0040FD41 47 INC EDI5 F1 V$ B! f6 J 0040FD42 03CE ADD ECX,ESI + b& G: d0 t3 \: p4 W. ?0040FD44 03D6 ADD EDX,ESI / C- v1 K$ Z7 h( ~, L6 q4 o) ?: }0040FD46 3B7D FC CMP EDI,DWORD PTR SS:[EBP-4] 0 L+ Q8 n# H" M1 g* q0040FD49 72 F2 JB SHORT aports.0040FD3D

& z7 h. e0 f& F) e: T1 M

0040FD4B 50 PUSH EAX4 F$ j/ y1 n" [/ ]; {# | 0040FD4C FF15 D0124000 CALL NEAR DWORD PTR DS:[<&KERNEL32.UnmapViewOfFile>] ; KERNEL32.UnmapViewOfFile" n, P% ]/ \4 ? 0040FD52 3B7D FC CMP EDI,DWORD PTR SS:[EBP-4] 8 D3 o+ n/ J2 \+ e; Q1 Q0040FD55 75 03 JNZ SHORT aports.0040FD5A4 R4 Q4 w, ?. S3 b% W 0040FD57 6A 39 PUSH 39! K$ o$ ~$ `$ L+ N& i& a0 M4 _ 0040FD59 5F POP EDI. r& V( [, N1 N4 s 0040FD5A 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8] * u( Z$ C& I6 g" e' h9 l$ l0040FD5D 56 PUSH ESI3 [- M% B U: k. S 0040FD5E C1E7 0C SHL EDI,0C4 \# k5 {5 N6 s 0040FD61 57 PUSH EDI& X( i- H% i$ U3 W 0040FD62 6A 00 PUSH 0' ?" G/ y# F8 s, r! A) n: j 0040FD64 6A 04 PUSH 4: w8 I% _2 A. ?6 w7 u" f 0040FD66 FF30 PUSH DWORD PTR DS:[EAX]$ p$ M4 p( t1 u: l8 k/ { 0040FD68 FFD3 CALL NEAR EBX //MapViewOfFile(*,4,0,edi,0x1000);8 E" {% Y+ @- }. ?! x 0040FD6A 5F POP EDI 8 u" q( V7 [" Y! n0040FD6B 5E POP ESI , Y' r" f# y' H9 v: ]: f1 b0040FD6C 5B POP EBX " S/ D. u* m3 @) u( S0 g3 ]* `' |0040FD6D C9 LEAVE 7 m/ F2 ^. v. p- K0040FD6E C3 RETN

N& `+ p! h* ?$ b, s. X; ~

看完了反汇编,接下来就是写代码了 呵呵 就在OpenPhysicalMemory加上下面这点就可以了 3 w4 r" {3 u6 p9 ]; RpMapPhysicalMemory=MapViewOfFile(pHandle,4,0,0,0x0a0000); ///第一次映射的,后面那个参数如果映射没成功的话,就需要变化。在我电脑上这个就可以了,就用这个算了 要写完善的话 自己改改 # R' ~8 E) A' @8 W/ N8 cDWORD d_begin=0; 8 o8 Y) U2 h" R7 _DWORD d_edx=0x67; / R% G4 e6 G2 C3 `5 ?DWORD d_p=pMapPhysicalMemory+0xc00; - h' O' _' H) v0 z/ Rwhile(d_edx!=d_p): x3 u/ ? s+ d& L' T { . I! z# ^: n7 a' K1 j& S0 |d_begin++;; T4 {0 l/ j2 u8 O" B; t d_p+=0x1000;. w$ s; h3 J. c9 N1 x! |0 g d_edx+=0x67; //// 这个0x67不知道是什么含义,请谁给个答案最好 :)3 c a. X7 u6 N- T! i/ z4 o6 s ` if(d_begin>=0xa0)break;1 l: `% g& I6 q7 C) ]6 i- } } . c& c4 p0 l, }" ? s: DUnmapviewoffile(pHandle); u% q+ Q% U( T* T if(d_begin==0xa0): A' e% p) T2 U0 F! Z. [& _3 n- O; X d_begin=0x39;+ v4 g' Q4 N# e# Y1 W) Y d_begin=d_edx<<0xc; , b4 b3 Y; g, R/ f& v" I* `0 JMapViewOfFile(pHandle,4,0,d_edx,0x1000);

0 j( |6 s+ K5 f# z6 Q

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

' h+ Q; s2 }* E& G8 H I/ b

后话:现在xp和win2003都出来那么长时间了,也许win2k下的这个意义不是很大 :),这个偶也说不清楚了2 a& v5 [7 H# x0 t8 {% W8 e 如果你在做这个部分的时候遇到我同样的问题,加上上面的代码应该能解决,但如果你做的程序的稳定性要和active ports一样,建议你再仔细分析下它的反汇编。由于时间关系,我就不多写了; w; J2 B' e6 C( l$ _ 在做这个的时候,偶有不少地方不明白的,比如为什么那个隐射地址要变化,是什么原因使得这个要变化呢?如果您能解释,还请告诉偶hhkkk@126.com ,偶在此先谢啦 ! p; c! w! T2 f) P- ?0 A# n- s; S4 l 那个0x67也是个古怪的数据,不知道是为什么用那个数据,因为偶只是从破解的角度来分析的,对内核不熟悉 :( 7 Y4 `: f0 b/ Q: h5 W另外:第一次写点东西,比较乱,将就着看吧,也算作是个人的笔记吧。

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 09:53 , Processed in 0.410741 second(s), 52 queries .

回顶部