QQ登录

只需要一步,快速开始

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

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

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

: T3 m/ {0 h) Q. m& E; b 拜读了ILSY 的大作《再谈进程与端口的映射》后,觉得很不错,用vc在电脑上调试,发现有些地方能取得信息 有些地方不能 - P! V4 l4 r& ^- g- y- E5 s" E更加怪的是,我的win2k上本来可以取得的,后来居然不行了。) z' D, X* @1 j' ? 而active ports却是那样稳定,有鬼不成 靠 ,偶不信: h3 M( m& N* u$ i2 ~2 ~ 搬出OllyDdg经过调试对照发现,程序不能正常显示就是函数的OpenPhysicalMemory导致不能取得信息! m) k: v- {8 U: r8 ?, j; H# T 下面是active ports的OpenPhysicalMemory反汇编部分* d* L9 P* u; Z4 s( S 0040FCF2 8B1D CC124000 MOV EBX,DWORD PTR DS:[<&KERNEL32.MapViewOfFile>] ; KERNEL32.MapViewOfFile 9 H3 s+ K$ W5 n7 U5 H: k0040FCF8 C745 F8 00000A0>MOV DWORD PTR SS:[EBP-8],0A0000 % P1 R" M/ k H, O: D7 ?& t0040FCFF BE 00100000 MOV ESI,1000 ; K$ o0 ^) \: A9 B8 G0040FD04 FF75 F8 PUSH DWORD PTR SS:[EBP-8] . f- \/ c. |! o1 [' c9 P0040FD07 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8] ! R) [) S" H& O# t4 [5 M& R0040FD0A 57 PUSH EDI! x1 z5 `* V% J# e v; Y5 U 0040FD0B 57 PUSH EDI : u: ?. k- @1 E: a) x0040FD0C 6A 04 PUSH 4 7 Q/ ~* R' ~" V/ {* ~) Y$ @6 c5 ~0040FD0E FF30 PUSH DWORD PTR DS:[EAX] + m7 l h9 l+ J0 p1 J9 l0040FD10 FFD3 CALL NEAR EBX //// MapViewOfFile(*,4,0,0,0x0a0000); 1) map0 Q/ X- D( N) m/ f X9 M( f1 o ......... ///如果没map 成功 再改参数 map 因为我看到的都是一次map就ok 就不看了 + R" m; _: O3 L1 J; l0040FD2E 837D FC 00 CMP DWORD PTR SS:[EBP-4],02 y, {% K" [; B1 Y v# J+ |! P" Y" ~ 0040FD32 76 17 JBE SHORT aports.0040FD4B {" G* R+ S3 S2 V- i" s0040FD34 6A 67 PUSH 67$ e# H% ?8 q0 @" u 0040FD36 8D88 000C0000 LEA ECX,DWORD PTR DS:[EAX+C00] 4 K s. D, X. F1 ?+ Y0040FD3C 5A POP EDX- Z" Q0 b9 o* R' w ///下面这段是关键部分了,也就是取得应该映射的起始位置处5 H% e e6 T7 q" C 0040FD3D 3911 CMP DWORD PTR DS:[ECX],EDX- l& J2 t9 x% X2 w 0040FD3F 74 0A JE SHORT aports.0040FD4B b. C2 W2 K, \0 y6 d! f2 m% O+ W% O 0040FD41 47 INC EDI 2 E3 S9 p( q% x/ k- L9 J0040FD42 03CE ADD ECX,ESI - M# e+ g# y4 Y2 h5 T+ [0040FD44 03D6 ADD EDX,ESI/ ]7 _4 N& R3 n' U 0040FD46 3B7D FC CMP EDI,DWORD PTR SS:[EBP-4] 2 w" A8 R% r8 a W) B+ T) v3 z0040FD49 72 F2 JB SHORT aports.0040FD3D

4 c/ C7 C# ]5 f

0040FD4B 50 PUSH EAX v2 N8 O! ^" |' z1 D4 B 0040FD4C FF15 D0124000 CALL NEAR DWORD PTR DS:[<&KERNEL32.UnmapViewOfFile>] ; KERNEL32.UnmapViewOfFile 8 y7 G% n) d# B% X' N0040FD52 3B7D FC CMP EDI,DWORD PTR SS:[EBP-4] # i }& Z! j$ U: {% j" D0040FD55 75 03 JNZ SHORT aports.0040FD5A5 M) B9 y# `# X 0040FD57 6A 39 PUSH 399 _$ e1 H$ m9 t! ^4 R 0040FD59 5F POP EDI 5 Z7 n W" I" X0 a0040FD5A 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]& [- E! e$ ~/ U- @) C 0040FD5D 56 PUSH ESI 4 b. D- H/ y1 n3 g F* @0040FD5E C1E7 0C SHL EDI,0C 1 |* A' w1 e. v: T5 Z; m$ `0040FD61 57 PUSH EDI, |7 h |3 w5 \# R5 O* T+ M 0040FD62 6A 00 PUSH 0 5 g5 p- k- y- j- q8 C$ l0040FD64 6A 04 PUSH 41 p; ]. Y _5 y( L0 ~ 0040FD66 FF30 PUSH DWORD PTR DS:[EAX] * D' B7 \5 Z! L* {7 Z8 s0040FD68 FFD3 CALL NEAR EBX //MapViewOfFile(*,4,0,edi,0x1000); 0 j- J8 g- B3 C; p: G4 G# H0040FD6A 5F POP EDI " Y+ v) ^3 G1 F3 @: r0040FD6B 5E POP ESI; ~% c/ P% Z: [( X 0040FD6C 5B POP EBX * F J" i; L4 u/ k% g3 \& R0040FD6D C9 LEAVE ! J1 l0 V& f; {/ B0040FD6E C3 RETN

4 y( [+ h8 C4 w8 _% j }! n m7 |* u

看完了反汇编,接下来就是写代码了 呵呵 就在OpenPhysicalMemory加上下面这点就可以了 , G* }5 \* a/ i: }. P4 N3 p, [pMapPhysicalMemory=MapViewOfFile(pHandle,4,0,0,0x0a0000); ///第一次映射的,后面那个参数如果映射没成功的话,就需要变化。在我电脑上这个就可以了,就用这个算了 要写完善的话 自己改改6 H4 b! Z4 ?% P6 z, _. f- j. L! ^ DWORD d_begin=0;% Q# R* S1 v; F DWORD d_edx=0x67;3 h% O# s4 Q$ u" C' C' X2 N DWORD d_p=pMapPhysicalMemory+0xc00;' ^" S7 t# ?1 N3 u9 Q while(d_edx!=d_p)% ~& J+ x$ W( m& e, D {. t" c) y5 L1 j; D7 O d_begin++; 3 S0 P2 E4 c- ?5 kd_p+=0x1000; % W' m9 b7 v- z! _+ ~1 kd_edx+=0x67; //// 这个0x67不知道是什么含义,请谁给个答案最好 :)& g# M+ p3 t/ G# P if(d_begin>=0xa0)break; * e l5 J. [. l. v} , J& u: Z; R2 [8 V" d, G. HUnmapviewoffile(pHandle);8 |9 E* A8 c$ { if(d_begin==0xa0)" f6 _8 S5 u- w7 g d_begin=0x39;- ^* B; i3 O/ y- `: n6 i d_begin=d_edx<<0xc;+ K1 P9 D/ f" i* }" _1 {& C% N6 W8 c MapViewOfFile(pHandle,4,0,d_edx,0x1000);

% R+ O1 H4 c% z; \9 w4 j

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

H2 f* a8 ~. }% o9 c: r& {+ X) g

后话:现在xp和win2003都出来那么长时间了,也许win2k下的这个意义不是很大 :),这个偶也说不清楚了 + l3 h+ p4 s# q* E( v. T9 D/ N+ ? 如果你在做这个部分的时候遇到我同样的问题,加上上面的代码应该能解决,但如果你做的程序的稳定性要和active ports一样,建议你再仔细分析下它的反汇编。由于时间关系,我就不多写了' A: }* j& U0 D/ y7 v6 W! O: P 在做这个的时候,偶有不少地方不明白的,比如为什么那个隐射地址要变化,是什么原因使得这个要变化呢?如果您能解释,还请告诉偶hhkkk@126.com ,偶在此先谢啦 9 w% v0 u& ~7 k/ l6 b8 ]' b 那个0x67也是个古怪的数据,不知道是为什么用那个数据,因为偶只是从破解的角度来分析的,对内核不熟悉 :(& Y6 x4 ~+ H) P# N! z" J 另外:第一次写点东西,比较乱,将就着看吧,也算作是个人的笔记吧。

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 20:03 , Processed in 0.437815 second(s), 53 queries .

回顶部