QQ登录

只需要一步,快速开始

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

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

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

4 T& H c" i' V. u拜读了ILSY 的大作《再谈进程与端口的映射》后,觉得很不错,用vc在电脑上调试,发现有些地方能取得信息 有些地方不能# x p3 \2 Y0 {+ Z 更加怪的是,我的win2k上本来可以取得的,后来居然不行了。 + l2 H6 i) ~% a9 d1 P. J而active ports却是那样稳定,有鬼不成 靠 ,偶不信- |$ R8 _4 w T4 c* F9 \/ t 搬出OllyDdg经过调试对照发现,程序不能正常显示就是函数的OpenPhysicalMemory导致不能取得信息 " @ n; Q9 U* E- ^2 j下面是active ports的OpenPhysicalMemory反汇编部分* }: v6 ?4 ?3 D$ E# y 0040FCF2 8B1D CC124000 MOV EBX,DWORD PTR DS:[<&KERNEL32.MapViewOfFile>] ; KERNEL32.MapViewOfFile _/ @, ]/ Y4 D( U+ p$ j 0040FCF8 C745 F8 00000A0>MOV DWORD PTR SS:[EBP-8],0A0000 ) _8 U8 j% L' U# c8 y$ N; ?0040FCFF BE 00100000 MOV ESI,1000 0 {# a0 k, x- w4 ~0040FD04 FF75 F8 PUSH DWORD PTR SS:[EBP-8]' h2 h1 `" p, R \8 Y! D: B 0040FD07 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]9 g* k; G' i( {; C 0040FD0A 57 PUSH EDI# Z' G7 L& R; _ 0040FD0B 57 PUSH EDI " e: U% e+ V. S% T+ C/ z% u% w0040FD0C 6A 04 PUSH 4 * U6 ] C }5 k! [0 T) |0040FD0E FF30 PUSH DWORD PTR DS:[EAX] ( [7 X8 F) R+ E& {0040FD10 FFD3 CALL NEAR EBX //// MapViewOfFile(*,4,0,0,0x0a0000); 1) map 6 ? N0 B: u# W$ P& Z......... ///如果没map 成功 再改参数 map 因为我看到的都是一次map就ok 就不看了 . b, S, |% P7 h; m. h+ p$ }; b( ? j0040FD2E 837D FC 00 CMP DWORD PTR SS:[EBP-4],0 & |+ K0 v3 J# M. U0 i0040FD32 76 17 JBE SHORT aports.0040FD4B9 k2 ]5 w8 y W/ ~! ~8 x 0040FD34 6A 67 PUSH 67 # M( d( I% {* M' c8 N% e- Y0040FD36 8D88 000C0000 LEA ECX,DWORD PTR DS:[EAX+C00]6 Z$ C$ x0 o0 Q; t4 z$ {0 q 0040FD3C 5A POP EDX4 ]* _" d% M/ \: v ///下面这段是关键部分了,也就是取得应该映射的起始位置处9 ?# L! m" L6 {$ o 0040FD3D 3911 CMP DWORD PTR DS:[ECX],EDX. j2 J* v1 J8 n5 F. B0 d 0040FD3F 74 0A JE SHORT aports.0040FD4B 8 F8 J6 F0 R* m+ j0040FD41 47 INC EDI6 V9 U; d+ s' k" ?$ C O. j 0040FD42 03CE ADD ECX,ESI 7 k+ j+ \% _) J! M/ \' B0 M) d0040FD44 03D6 ADD EDX,ESI" k/ u J7 C1 ]) n5 o; |4 ~ 0040FD46 3B7D FC CMP EDI,DWORD PTR SS:[EBP-4]) m! ]* ?/ M) _' r 0040FD49 72 F2 JB SHORT aports.0040FD3D

. j: h0 Y0 F# S

0040FD4B 50 PUSH EAX } Q$ y$ d, A4 a7 ~4 ?$ } 0040FD4C FF15 D0124000 CALL NEAR DWORD PTR DS:[<&KERNEL32.UnmapViewOfFile>] ; KERNEL32.UnmapViewOfFile 6 z4 ~1 A$ v) |( u) d0040FD52 3B7D FC CMP EDI,DWORD PTR SS:[EBP-4]; H) U2 t& _0 X) B8 Q5 K 0040FD55 75 03 JNZ SHORT aports.0040FD5A I e* O) _) x" R- e0040FD57 6A 39 PUSH 39+ `: ] E) l! G3 G: V/ h/ E 0040FD59 5F POP EDI2 r( \- T: E; P, @" g 0040FD5A 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8] 8 {- `* m$ _: x! |" |9 }! b0040FD5D 56 PUSH ESI + {. E. A1 S( {* Q! M T( i0040FD5E C1E7 0C SHL EDI,0C5 N! M$ O! c" a# W6 F( X: H 0040FD61 57 PUSH EDI 9 H8 G$ Y( x# O- q9 X1 n; u4 @- d0040FD62 6A 00 PUSH 0" D- I4 C6 u- I4 q) \/ }9 e 0040FD64 6A 04 PUSH 4 % }: s! e) P( B0040FD66 FF30 PUSH DWORD PTR DS:[EAX] }4 _( W% m# t3 z9 M3 ? 0040FD68 FFD3 CALL NEAR EBX //MapViewOfFile(*,4,0,edi,0x1000); ) O& B1 `3 n( R0040FD6A 5F POP EDI# ` G# S c% T* }( z: D 0040FD6B 5E POP ESI * |3 p1 h" p3 A% R, z4 U) D0040FD6C 5B POP EBX7 d4 z f1 b; i& N8 {/ z 0040FD6D C9 LEAVE' h. d1 T" O7 I: r 0040FD6E C3 RETN

! }7 ~/ R9 j) c! H

看完了反汇编,接下来就是写代码了 呵呵 就在OpenPhysicalMemory加上下面这点就可以了6 `0 i; } o0 Q. n pMapPhysicalMemory=MapViewOfFile(pHandle,4,0,0,0x0a0000); ///第一次映射的,后面那个参数如果映射没成功的话,就需要变化。在我电脑上这个就可以了,就用这个算了 要写完善的话 自己改改/ @' s/ h8 } E) G, Z8 S DWORD d_begin=0;. T. B0 e3 X0 o7 k$ q1 M( k DWORD d_edx=0x67; $ `& E: k0 [1 u, @2 f$ L0 g8 ~DWORD d_p=pMapPhysicalMemory+0xc00; 5 `, t/ [9 A+ R$ N- M" Iwhile(d_edx!=d_p) 0 a/ a* o3 y4 {2 t- ^1 T3 k{ " d" b3 K' D9 f E( [5 F$ td_begin++; 9 t, g* T- k9 u$ \- O6 Bd_p+=0x1000; ) L0 H$ T8 J% V3 T6 f% xd_edx+=0x67; //// 这个0x67不知道是什么含义,请谁给个答案最好 :)! D: D- V D- j1 Z if(d_begin>=0xa0)break;. K$ v( b/ |% t2 ^ }! B8 y4 x4 A- Z: g! V& M2 b* s1 w# p Unmapviewoffile(pHandle); 2 \# Z( L; `8 o% i# r& I8 Vif(d_begin==0xa0). O. C# v0 U! D/ ^4 Y d_begin=0x39; 5 j3 [; u- d, f5 Fd_begin=d_edx<<0xc; 7 U4 _: P# L# N0 xMapViewOfFile(pHandle,4,0,d_edx,0x1000);

2 T( w# u5 ^( j

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

& r: w* T4 B# [6 h3 K

后话:现在xp和win2003都出来那么长时间了,也许win2k下的这个意义不是很大 :),这个偶也说不清楚了0 ^4 l8 k( C; c& W Z 如果你在做这个部分的时候遇到我同样的问题,加上上面的代码应该能解决,但如果你做的程序的稳定性要和active ports一样,建议你再仔细分析下它的反汇编。由于时间关系,我就不多写了% \: ?( T6 p5 E6 H- j 在做这个的时候,偶有不少地方不明白的,比如为什么那个隐射地址要变化,是什么原因使得这个要变化呢?如果您能解释,还请告诉偶hhkkk@126.com ,偶在此先谢啦8 c. m+ ^) ?. S& r3 C, K) H% S 那个0x67也是个古怪的数据,不知道是为什么用那个数据,因为偶只是从破解的角度来分析的,对内核不熟悉 :() V7 A9 T# b- R1 W 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-9-1 07:05 , Processed in 0.449727 second(s), 51 queries .

回顶部