QQ登录

只需要一步,快速开始

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

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

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

# x+ }% y9 R( n7 f拜读了ILSY 的大作《再谈进程与端口的映射》后,觉得很不错,用vc在电脑上调试,发现有些地方能取得信息 有些地方不能! ` k# j( }! ~! j 更加怪的是,我的win2k上本来可以取得的,后来居然不行了。. D8 j+ R. h9 }1 t& o$ M5 @( [ 而active ports却是那样稳定,有鬼不成 靠 ,偶不信) A2 V; h( A1 q" y 搬出OllyDdg经过调试对照发现,程序不能正常显示就是函数的OpenPhysicalMemory导致不能取得信息 , Q. ~! d* \5 q4 D下面是active ports的OpenPhysicalMemory反汇编部分+ X# c2 b1 w9 r- r, z+ o% N 0040FCF2 8B1D CC124000 MOV EBX,DWORD PTR DS:[<&KERNEL32.MapViewOfFile>] ; KERNEL32.MapViewOfFile3 ^' D2 q( ?. H 0040FCF8 C745 F8 00000A0>MOV DWORD PTR SS:[EBP-8],0A00009 g' W/ J0 \ |5 \, K1 q0 F 0040FCFF BE 00100000 MOV ESI,1000 / L8 z1 ]' \4 x- X, p. x0040FD04 FF75 F8 PUSH DWORD PTR SS:[EBP-8] - K% H! l0 h9 T* j! \! ?- b0040FD07 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8] ! l e* r8 O1 J0040FD0A 57 PUSH EDI; H1 i% R5 f. e 0040FD0B 57 PUSH EDI$ y# `; q6 V/ ]5 V0 V 0040FD0C 6A 04 PUSH 47 B# T" m- E3 Q. s# o! {. w9 G 0040FD0E FF30 PUSH DWORD PTR DS:[EAX]$ Q" y/ x8 G- P 0040FD10 FFD3 CALL NEAR EBX //// MapViewOfFile(*,4,0,0,0x0a0000); 1) map % d5 r n# ^. v9 Z......... ///如果没map 成功 再改参数 map 因为我看到的都是一次map就ok 就不看了9 ~4 u2 N& Z8 O! d" ~6 k 0040FD2E 837D FC 00 CMP DWORD PTR SS:[EBP-4],0; A, v, e. Q5 z4 p0 _ 0040FD32 76 17 JBE SHORT aports.0040FD4B4 _9 A4 ?; V2 `" B 0040FD34 6A 67 PUSH 67 : ^' F# m; E* |* h8 Y2 ^" v7 _0040FD36 8D88 000C0000 LEA ECX,DWORD PTR DS:[EAX+C00] ; {8 F# B; h3 h* ^8 b0040FD3C 5A POP EDX 7 U: Z+ s8 O* {/ D. g///下面这段是关键部分了,也就是取得应该映射的起始位置处$ B; w% L$ Z2 g' S! H3 Y) s 0040FD3D 3911 CMP DWORD PTR DS:[ECX],EDX' M# K$ {4 R: e7 R. o3 o1 A( D 0040FD3F 74 0A JE SHORT aports.0040FD4B7 ^( L! Q7 U1 g3 P, l; S1 G! M, a: ~ 0040FD41 47 INC EDI, P, @/ W4 `$ E7 Q/ `8 ^ 0040FD42 03CE ADD ECX,ESI : S! |3 ^1 E: S& K! @5 I# B- _7 D0040FD44 03D6 ADD EDX,ESI/ g$ I% _' b; o0 Z) |& W4 h& p 0040FD46 3B7D FC CMP EDI,DWORD PTR SS:[EBP-4]" Z2 t5 u8 o/ C! M 0040FD49 72 F2 JB SHORT aports.0040FD3D

9 i- @! Q) `) O, O( [: |4 j. Y

0040FD4B 50 PUSH EAX ) j% ]# u, }1 a0 i2 t0 k0040FD4C FF15 D0124000 CALL NEAR DWORD PTR DS:[<&KERNEL32.UnmapViewOfFile>] ; KERNEL32.UnmapViewOfFile 9 l# p) C1 q0 m% o0040FD52 3B7D FC CMP EDI,DWORD PTR SS:[EBP-4]% C6 w" O d- A 0040FD55 75 03 JNZ SHORT aports.0040FD5A ) O% ^# Q! h, n5 r5 f/ J. l# g0040FD57 6A 39 PUSH 39$ L9 ^4 }: D. a1 G2 Z8 ?( ?* O 0040FD59 5F POP EDI & t( R2 u; U6 f$ k% n- j5 _0040FD5A 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8] * H4 ^( D: X8 l- S4 s0040FD5D 56 PUSH ESI7 F3 k+ S2 R1 Y5 a 0040FD5E C1E7 0C SHL EDI,0C& D% s- ]$ m% J# t ]# a- B 0040FD61 57 PUSH EDI ( \0 M/ T- t2 W1 X( F9 |0040FD62 6A 00 PUSH 0, g8 e5 a! k5 E3 J2 H! n 0040FD64 6A 04 PUSH 4 / [/ ]* x& a* {2 s& Y1 p0040FD66 FF30 PUSH DWORD PTR DS:[EAX] - ?5 |, w2 z- \0040FD68 FFD3 CALL NEAR EBX //MapViewOfFile(*,4,0,edi,0x1000); , s& H7 o5 @0 e2 j/ v0040FD6A 5F POP EDI 5 N" T8 g4 {- p% k( E& w0 |. \9 [% C1 t0040FD6B 5E POP ESI ) w' f0 q5 C: D/ e5 @0040FD6C 5B POP EBX: q. [) X2 i; [( u# T' f 0040FD6D C9 LEAVE 3 H$ ?- ]* G+ `1 t& a9 q0040FD6E C3 RETN

' |, N8 |* A& i

看完了反汇编,接下来就是写代码了 呵呵 就在OpenPhysicalMemory加上下面这点就可以了 & [4 s( R* ^; f) MpMapPhysicalMemory=MapViewOfFile(pHandle,4,0,0,0x0a0000); ///第一次映射的,后面那个参数如果映射没成功的话,就需要变化。在我电脑上这个就可以了,就用这个算了 要写完善的话 自己改改 & x# A* k& A; U6 mDWORD d_begin=0; % g7 H8 _9 H0 @% }DWORD d_edx=0x67; " Z/ |+ l. W6 u( y' s) ZDWORD d_p=pMapPhysicalMemory+0xc00;5 c( |. X( r* I$ S; A# j: p1 [ while(d_edx!=d_p) ) H) f7 C$ e3 a7 {3 \{- F+ e; n7 a0 M8 F; F( v d_begin++;. I2 B0 z5 V& d% R- M J! M d_p+=0x1000; ! w/ d5 F# Z/ C& _d_edx+=0x67; //// 这个0x67不知道是什么含义,请谁给个答案最好 :)0 o3 I+ K0 L$ b$ w7 ^7 c! C if(d_begin>=0xa0)break;- s6 ~& c6 O! K) u1 j7 k* t } % T7 Y. M3 H+ U7 {6 P/ }" t5 M2 w2 dUnmapviewoffile(pHandle); , ]& B$ A% C8 [3 t/ M( Xif(d_begin==0xa0) - D2 A: D( r: M) q0 H) Fd_begin=0x39; 0 R/ J1 i" T6 v' q: l: wd_begin=d_edx<<0xc; 6 ] I& J/ Z5 Z+ e. Q* t. @( mMapViewOfFile(pHandle,4,0,d_edx,0x1000);

$ J3 F. l; u* F7 M8 P6 [5 a( M0 g

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

% S1 G# P5 J# c* J

后话:现在xp和win2003都出来那么长时间了,也许win2k下的这个意义不是很大 :),这个偶也说不清楚了 . t2 A' m$ j8 J" e2 ` 如果你在做这个部分的时候遇到我同样的问题,加上上面的代码应该能解决,但如果你做的程序的稳定性要和active ports一样,建议你再仔细分析下它的反汇编。由于时间关系,我就不多写了: [3 }2 j! p5 N4 L: T: [$ Q 在做这个的时候,偶有不少地方不明白的,比如为什么那个隐射地址要变化,是什么原因使得这个要变化呢?如果您能解释,还请告诉偶hhkkk@126.com ,偶在此先谢啦 : ?( \* ^! f6 Z) _3 a7 E+ f0 h 那个0x67也是个古怪的数据,不知道是为什么用那个数据,因为偶只是从破解的角度来分析的,对内核不熟悉 :(' g0 e1 B6 R4 j; q& f3 R) A0 t+ } 另外:第一次写点东西,比较乱,将就着看吧,也算作是个人的笔记吧。

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

回顶部