QQ登录

只需要一步,快速开始

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

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

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

7 R: a( \9 B T( }5 V拜读了ILSY 的大作《再谈进程与端口的映射》后,觉得很不错,用vc在电脑上调试,发现有些地方能取得信息 有些地方不能 * f- {& e6 o+ Z+ d( c2 m w更加怪的是,我的win2k上本来可以取得的,后来居然不行了。 . L' ~- o5 n* o4 S+ c而active ports却是那样稳定,有鬼不成 靠 ,偶不信6 ~' I# Z; Q' w1 Z 搬出OllyDdg经过调试对照发现,程序不能正常显示就是函数的OpenPhysicalMemory导致不能取得信息 ; Y6 N0 k! _) b9 c下面是active ports的OpenPhysicalMemory反汇编部分8 e$ o9 `7 l. y H, f5 z- v6 X 0040FCF2 8B1D CC124000 MOV EBX,DWORD PTR DS:[<&KERNEL32.MapViewOfFile>] ; KERNEL32.MapViewOfFile 2 P& l1 [( p, K& A) @0040FCF8 C745 F8 00000A0>MOV DWORD PTR SS:[EBP-8],0A0000 ( E. l2 N' I8 V0 E5 h) W0040FCFF BE 00100000 MOV ESI,10004 |& O) `: Q+ U/ {. Z5 h9 g, ^5 x 0040FD04 FF75 F8 PUSH DWORD PTR SS:[EBP-8] - s! T& Z8 x0 z9 {) A5 [0040FD07 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8] $ ~& f5 R5 ~6 S# V0040FD0A 57 PUSH EDI0 g+ S @6 Q7 ~/ `- P 0040FD0B 57 PUSH EDI 2 S4 e- ~& n$ d+ U0040FD0C 6A 04 PUSH 4 ' W4 P& Y& Z8 _9 F4 Z+ h) ~& `0040FD0E FF30 PUSH DWORD PTR DS:[EAX] h7 e5 \7 \) G( _" F8 y. C! L 0040FD10 FFD3 CALL NEAR EBX //// MapViewOfFile(*,4,0,0,0x0a0000); 1) map' q* q/ z. x6 L ......... ///如果没map 成功 再改参数 map 因为我看到的都是一次map就ok 就不看了 % F" e/ U5 g$ d9 w6 R0040FD2E 837D FC 00 CMP DWORD PTR SS:[EBP-4],0 + R3 k& K- t1 _8 k! q0040FD32 76 17 JBE SHORT aports.0040FD4B 1 i3 f6 V C& \& O% }* D9 Y0040FD34 6A 67 PUSH 67) l. K' R9 }1 }- u 0040FD36 8D88 000C0000 LEA ECX,DWORD PTR DS:[EAX+C00] 3 z; t4 w3 i6 b& h4 n6 f7 L; N7 l. [0040FD3C 5A POP EDX 0 W" L* q2 m; H; D( }0 \ v2 k3 l///下面这段是关键部分了,也就是取得应该映射的起始位置处 6 B. j$ P# H, J& e0040FD3D 3911 CMP DWORD PTR DS:[ECX],EDX 4 j& V! _6 N8 W5 C0040FD3F 74 0A JE SHORT aports.0040FD4B' D: R- ]: y0 V! L% T 0040FD41 47 INC EDI $ N# L& u& {9 r1 k/ E# W7 K0 U0040FD42 03CE ADD ECX,ESI 1 N+ P% ^0 H d! [5 M' v0040FD44 03D6 ADD EDX,ESI8 g' w/ w. z" _ 0040FD46 3B7D FC CMP EDI,DWORD PTR SS:[EBP-4]3 b% A+ z6 Y/ ?1 s) G& P 0040FD49 72 F2 JB SHORT aports.0040FD3D

9 ?" F) p. T; f( T+ c

0040FD4B 50 PUSH EAX : }. N' U% v$ d6 Q6 Z) a8 _0040FD4C FF15 D0124000 CALL NEAR DWORD PTR DS:[<&KERNEL32.UnmapViewOfFile>] ; KERNEL32.UnmapViewOfFile5 V0 z) E! S1 O G, ^ 0040FD52 3B7D FC CMP EDI,DWORD PTR SS:[EBP-4]* u" K0 c' t5 v* Q% w 0040FD55 75 03 JNZ SHORT aports.0040FD5A+ |- B' E6 Y# s 0040FD57 6A 39 PUSH 39 7 E0 n; A# ?( T ?$ Q7 F0040FD59 5F POP EDI" r- F* {# V7 @ g% m* p4 ^ O 0040FD5A 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8] * J# v. M+ S3 @0 }8 w& a0040FD5D 56 PUSH ESI & K6 |5 W+ Y: z& Y6 N0040FD5E C1E7 0C SHL EDI,0C 5 t# G3 J. x. _0040FD61 57 PUSH EDI2 C* f+ h1 a" I6 ?( @$ I 0040FD62 6A 00 PUSH 0 ! F1 S4 n8 Z& K0040FD64 6A 04 PUSH 4+ G, O' F4 E0 \4 M% {" n d7 u 0040FD66 FF30 PUSH DWORD PTR DS:[EAX]2 ?9 n# Q* q' v$ H. o 0040FD68 FFD3 CALL NEAR EBX //MapViewOfFile(*,4,0,edi,0x1000); " \# X* E, B, r( x+ N/ |0040FD6A 5F POP EDI' c5 c P+ h! G6 Z: |' [% K 0040FD6B 5E POP ESI 9 Q8 d% R, d' D0 x; Q( A0040FD6C 5B POP EBX) f) I) {6 e% y+ f 0040FD6D C9 LEAVE 6 e0 j2 u% j1 N, M" Y' B) p0040FD6E C3 RETN

& W0 R- l# T0 ]2 t1 M8 j

看完了反汇编,接下来就是写代码了 呵呵 就在OpenPhysicalMemory加上下面这点就可以了 # x5 S1 f1 j& Q& k4 J% MpMapPhysicalMemory=MapViewOfFile(pHandle,4,0,0,0x0a0000); ///第一次映射的,后面那个参数如果映射没成功的话,就需要变化。在我电脑上这个就可以了,就用这个算了 要写完善的话 自己改改$ u. A% I( Y2 Y: R r DWORD d_begin=0; d! W6 E1 L9 W7 g1 u& h DWORD d_edx=0x67; 3 [- h4 J- l% F0 @DWORD d_p=pMapPhysicalMemory+0xc00;6 z# m6 g2 |1 r/ \4 `9 c while(d_edx!=d_p). B4 ` r/ g& o, \7 I6 q {7 ]1 r; Y: y/ f' r d_begin++;' Q0 E4 s- x, A d_p+=0x1000;# z1 O6 \! c; h8 L2 { a& Q d_edx+=0x67; //// 这个0x67不知道是什么含义,请谁给个答案最好 :)$ @- X6 w7 w# M' Y' Y, A! S if(d_begin>=0xa0)break;; Z: _1 E+ q' J0 x, h6 i _& v0 S } - U( h& b: O( ^Unmapviewoffile(pHandle);8 v. a; x7 y- k) z3 p' o! j if(d_begin==0xa0) 3 B& }3 v6 u8 w2 N4 z2 sd_begin=0x39; 0 H8 |2 W% x" U5 H# x' d+ Z; Id_begin=d_edx<<0xc; 0 V \) @ u* T" h+ T5 K5 AMapViewOfFile(pHandle,4,0,d_edx,0x1000);

: B4 T$ t8 h! o/ {$ B7 l! I0 S

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

' I# g M+ `2 b: S' m

后话:现在xp和win2003都出来那么长时间了,也许win2k下的这个意义不是很大 :),这个偶也说不清楚了7 t3 x& y# [" h' u1 v( T 如果你在做这个部分的时候遇到我同样的问题,加上上面的代码应该能解决,但如果你做的程序的稳定性要和active ports一样,建议你再仔细分析下它的反汇编。由于时间关系,我就不多写了 : z. s/ G' \3 { 在做这个的时候,偶有不少地方不明白的,比如为什么那个隐射地址要变化,是什么原因使得这个要变化呢?如果您能解释,还请告诉偶hhkkk@126.com ,偶在此先谢啦 0 Y9 h3 \$ d* Z# G 那个0x67也是个古怪的数据,不知道是为什么用那个数据,因为偶只是从破解的角度来分析的,对内核不熟悉 :( ! x8 u+ U2 N2 R, N1 Z另外:第一次写点东西,比较乱,将就着看吧,也算作是个人的笔记吧。

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

回顶部