QQ登录

只需要一步,快速开始

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

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

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

% I- M' s$ O5 p* d拜读了ILSY 的大作《再谈进程与端口的映射》后,觉得很不错,用vc在电脑上调试,发现有些地方能取得信息 有些地方不能 : `6 C) B9 V) ~( H) l更加怪的是,我的win2k上本来可以取得的,后来居然不行了。 4 B. D+ h7 i7 @* W3 T# U U/ x; I- f而active ports却是那样稳定,有鬼不成 靠 ,偶不信 , Y5 w5 a0 Q: {3 E( W* s! X% U搬出OllyDdg经过调试对照发现,程序不能正常显示就是函数的OpenPhysicalMemory导致不能取得信息 & Y7 A: A1 _3 X1 R. d9 O5 U: e下面是active ports的OpenPhysicalMemory反汇编部分; @- }+ c3 S8 I. T T9 ] 0040FCF2 8B1D CC124000 MOV EBX,DWORD PTR DS:[<&KERNEL32.MapViewOfFile>] ; KERNEL32.MapViewOfFile* z$ j4 N# y6 B! W. b 0040FCF8 C745 F8 00000A0>MOV DWORD PTR SS:[EBP-8],0A0000 ! r: g, @/ [( ], N/ Y! s! X0040FCFF BE 00100000 MOV ESI,1000# |0 Z% `# D2 J* d+ g* J2 r 0040FD04 FF75 F8 PUSH DWORD PTR SS:[EBP-8] ; X) b$ t" U6 w Q0 T2 n0040FD07 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8] ; \, Z4 u7 X* z" l% q" U0040FD0A 57 PUSH EDI' ` s! [% \+ l( T 0040FD0B 57 PUSH EDI 1 R. f9 @0 A2 U" J0040FD0C 6A 04 PUSH 42 r' G& c5 U3 g: I 0040FD0E FF30 PUSH DWORD PTR DS:[EAX] : X& I0 R1 g6 b( N9 K$ o9 [0040FD10 FFD3 CALL NEAR EBX //// MapViewOfFile(*,4,0,0,0x0a0000); 1) map& q: `2 \# f, l! Z* c3 R9 w9 o$ z* v ......... ///如果没map 成功 再改参数 map 因为我看到的都是一次map就ok 就不看了 / d- h9 ~( Y2 N0040FD2E 837D FC 00 CMP DWORD PTR SS:[EBP-4],0+ h! ?" ?5 @6 S# L+ R 0040FD32 76 17 JBE SHORT aports.0040FD4B ; e. f7 T. L. J# z2 ]0040FD34 6A 67 PUSH 67 ; _& a$ Q8 |$ W6 F; T0 p% L9 M0040FD36 8D88 000C0000 LEA ECX,DWORD PTR DS:[EAX+C00]7 w+ P0 t' v' T# y 0040FD3C 5A POP EDX$ p: a+ q! g D3 l; X0 L ///下面这段是关键部分了,也就是取得应该映射的起始位置处 6 D3 L$ A' n) v! I# {# [4 C0040FD3D 3911 CMP DWORD PTR DS:[ECX],EDX , d2 f2 d3 w1 f# m/ z U% E0040FD3F 74 0A JE SHORT aports.0040FD4B 3 p3 x7 } }8 G$ d0 {0040FD41 47 INC EDI 2 F& i ]' g+ L1 \. j4 w3 L @0040FD42 03CE ADD ECX,ESI/ A/ a; ]6 M. U- x1 l1 w! q- H 0040FD44 03D6 ADD EDX,ESI . c2 d$ r" A# v- z0040FD46 3B7D FC CMP EDI,DWORD PTR SS:[EBP-4] + V( b) P* l$ e1 i0 {8 o* p' U0040FD49 72 F2 JB SHORT aports.0040FD3D

- w/ f5 Y/ i8 ]. L

0040FD4B 50 PUSH EAX, q/ A7 c6 u# _2 s# B; J 0040FD4C FF15 D0124000 CALL NEAR DWORD PTR DS:[<&KERNEL32.UnmapViewOfFile>] ; KERNEL32.UnmapViewOfFile0 Y B- G# T h 0040FD52 3B7D FC CMP EDI,DWORD PTR SS:[EBP-4]" H1 B& t; u! ^* Y' D 0040FD55 75 03 JNZ SHORT aports.0040FD5A % I" G: _& R) _+ B7 _8 m9 o0040FD57 6A 39 PUSH 39' _) } z7 Q1 X N( K; f8 Q 0040FD59 5F POP EDI1 {+ @- Y4 \2 a0 V! c 0040FD5A 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]# b8 Z" y& m' B6 {( D* d4 J0 z, h 0040FD5D 56 PUSH ESI 1 C" g) l/ Q2 P, K7 E- G) q0040FD5E C1E7 0C SHL EDI,0C ; m: M4 q7 g9 P# H0040FD61 57 PUSH EDI : y3 Z3 m! k; G) {4 ]& x' h8 c7 _( o x0040FD62 6A 00 PUSH 0 # B# Q( E1 s0 c& P5 B0040FD64 6A 04 PUSH 4 7 ` E b3 l8 @0040FD66 FF30 PUSH DWORD PTR DS:[EAX] . A3 M% @5 D- r$ L! |$ j0040FD68 FFD3 CALL NEAR EBX //MapViewOfFile(*,4,0,edi,0x1000);5 |9 k% ~# F, x% r9 M 0040FD6A 5F POP EDI7 O, F5 Q2 p) B' r) @. k& j 0040FD6B 5E POP ESI - p. Q5 d* H% P3 r: F8 [0040FD6C 5B POP EBX/ p$ K$ ^; ]' G" E) C 0040FD6D C9 LEAVE& f/ N0 ]1 t6 ]9 O/ @7 C1 R- k 0040FD6E C3 RETN

- ~/ ~) y" N7 B

看完了反汇编,接下来就是写代码了 呵呵 就在OpenPhysicalMemory加上下面这点就可以了 ; l5 u: q; n2 T' B$ ?6 I, rpMapPhysicalMemory=MapViewOfFile(pHandle,4,0,0,0x0a0000); ///第一次映射的,后面那个参数如果映射没成功的话,就需要变化。在我电脑上这个就可以了,就用这个算了 要写完善的话 自己改改 % k) f' L2 e8 w7 eDWORD d_begin=0;& V3 p) _. t/ i) p DWORD d_edx=0x67; ( N! O: [. g- W0 l$ i2 GDWORD d_p=pMapPhysicalMemory+0xc00; $ S' O F/ f! M$ O- xwhile(d_edx!=d_p)# {. v% {& [5 s- C/ Q { 9 k# \: ~7 M2 X1 N4 d# zd_begin++; / }9 A/ J8 g& R9 ^3 \+ [* t) Z" t, m# Yd_p+=0x1000; 8 u& p; Q0 n5 d& T) k4 b8 i7 M0 Yd_edx+=0x67; //// 这个0x67不知道是什么含义,请谁给个答案最好 :)2 M. M& ?; }9 j) K2 r9 } if(d_begin>=0xa0)break; 5 J5 K+ x* o0 Z} 8 y: n3 S) U$ i- _0 fUnmapviewoffile(pHandle);8 P1 [! a `3 z: Z2 I if(d_begin==0xa0) " b5 c5 f( j! _) |% m4 Id_begin=0x39; + I' x: U9 S* v( x3 B$ G" R' W& bd_begin=d_edx<<0xc; - J# o- J4 u) ]2 u2 P+ @, N" aMapViewOfFile(pHandle,4,0,d_edx,0x1000);

/ U6 ]/ _. y5 {- [4 H. ]

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

1 M/ y$ t J1 u; x m7 Y

后话:现在xp和win2003都出来那么长时间了,也许win2k下的这个意义不是很大 :),这个偶也说不清楚了8 c- w# k i/ v' V2 o 如果你在做这个部分的时候遇到我同样的问题,加上上面的代码应该能解决,但如果你做的程序的稳定性要和active ports一样,建议你再仔细分析下它的反汇编。由于时间关系,我就不多写了+ M% @; L6 M j6 o! D 在做这个的时候,偶有不少地方不明白的,比如为什么那个隐射地址要变化,是什么原因使得这个要变化呢?如果您能解释,还请告诉偶hhkkk@126.com ,偶在此先谢啦 ' ^6 P/ f7 g" y; S 那个0x67也是个古怪的数据,不知道是为什么用那个数据,因为偶只是从破解的角度来分析的,对内核不熟悉 :( x' c$ ~ \1 {5 r1 C3 r另外:第一次写点东西,比较乱,将就着看吧,也算作是个人的笔记吧。

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

回顶部