QQ登录

只需要一步,快速开始

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

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

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

' R8 g3 n+ o4 o! ?1 N6 v1 g, n拜读了ILSY 的大作《再谈进程与端口的映射》后,觉得很不错,用vc在电脑上调试,发现有些地方能取得信息 有些地方不能3 e, f4 o W* p- q% j# ~5 ]% Y 更加怪的是,我的win2k上本来可以取得的,后来居然不行了。 3 d, i$ |. G; r) d! p" X+ g( M而active ports却是那样稳定,有鬼不成 靠 ,偶不信 + s9 W( L. `" \0 ]6 ?1 m1 T3 \$ u- B搬出OllyDdg经过调试对照发现,程序不能正常显示就是函数的OpenPhysicalMemory导致不能取得信息' g8 f" v3 P+ s) ^" Q7 W. K 下面是active ports的OpenPhysicalMemory反汇编部分 : N' t, v7 l: k& t6 {0040FCF2 8B1D CC124000 MOV EBX,DWORD PTR DS:[<&KERNEL32.MapViewOfFile>] ; KERNEL32.MapViewOfFile0 H _5 Z8 l' W% ?) Y6 q6 M 0040FCF8 C745 F8 00000A0>MOV DWORD PTR SS:[EBP-8],0A0000 - R( J! n y- K0 T0040FCFF BE 00100000 MOV ESI,10007 e5 x! Q- s) B) d- w# r* O5 I 0040FD04 FF75 F8 PUSH DWORD PTR SS:[EBP-8] - ?, g; w' _" \$ i$ p' l5 @2 g0040FD07 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]9 k. D W3 h/ C3 z/ C( p 0040FD0A 57 PUSH EDI ( g0 i& q; h" @) w* {- i0040FD0B 57 PUSH EDI$ _' r6 X( R2 `' ~: Q, T9 V6 ` 0040FD0C 6A 04 PUSH 4 % a. q( Q& ?# {6 Z6 W0040FD0E FF30 PUSH DWORD PTR DS:[EAX] J* m0 b$ g+ Z4 o+ V1 f 0040FD10 FFD3 CALL NEAR EBX //// MapViewOfFile(*,4,0,0,0x0a0000); 1) map6 u: b" p9 y& s) g+ y ......... ///如果没map 成功 再改参数 map 因为我看到的都是一次map就ok 就不看了1 _+ w, F. `/ `8 n" J 0040FD2E 837D FC 00 CMP DWORD PTR SS:[EBP-4],0 7 N2 Z1 ~0 H2 v2 {" B6 G6 C! z3 a0040FD32 76 17 JBE SHORT aports.0040FD4B) }% ~3 u' h. F$ ]9 \ 0040FD34 6A 67 PUSH 67 & ^- S- ^2 y( e9 U0040FD36 8D88 000C0000 LEA ECX,DWORD PTR DS:[EAX+C00] 9 ? C& r) L5 o. \0040FD3C 5A POP EDX9 s+ l& T" A& k3 A: T0 h$ p ///下面这段是关键部分了,也就是取得应该映射的起始位置处 . M! R% c- q4 d7 l) `0040FD3D 3911 CMP DWORD PTR DS:[ECX],EDX 2 r2 \ h% K+ b6 P% b$ ~/ F! v4 b1 g0040FD3F 74 0A JE SHORT aports.0040FD4B 1 I/ f5 T1 s7 z4 }0040FD41 47 INC EDI 0 z3 \& L& p8 Z% z0040FD42 03CE ADD ECX,ESI + x+ z* J) k5 H, k0040FD44 03D6 ADD EDX,ESI 9 m- X' c. k3 r9 d- j+ O2 _0040FD46 3B7D FC CMP EDI,DWORD PTR SS:[EBP-4] 5 k# O0 m/ d) ]# n% F0040FD49 72 F2 JB SHORT aports.0040FD3D

$ l8 |- m) A8 R: a& a

0040FD4B 50 PUSH EAX2 K' \$ ?' x2 ?2 @7 P 0040FD4C FF15 D0124000 CALL NEAR DWORD PTR DS:[<&KERNEL32.UnmapViewOfFile>] ; KERNEL32.UnmapViewOfFile ; r: I/ m% o- s+ D& i0040FD52 3B7D FC CMP EDI,DWORD PTR SS:[EBP-4]) Y0 O5 J5 o' f' T; @: A2 ? 0040FD55 75 03 JNZ SHORT aports.0040FD5A, u0 U& X( V7 l- Q/ r 0040FD57 6A 39 PUSH 39& Y9 A% D4 `4 U+ S7 v 0040FD59 5F POP EDI( B2 L6 J# K& m/ w2 A9 a 0040FD5A 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]& E0 T5 q8 N |, g 0040FD5D 56 PUSH ESI 6 _, L9 _8 H. C+ z% A. Z0040FD5E C1E7 0C SHL EDI,0C - F2 f' a: k% t0040FD61 57 PUSH EDI8 g# g; ~2 [1 n F8 e# L 0040FD62 6A 00 PUSH 0 $ [- ^* n( g4 X% U0040FD64 6A 04 PUSH 4 1 D' T; S! Q# n; J: j& M0040FD66 FF30 PUSH DWORD PTR DS:[EAX]" u$ z! w0 h( b& X' g 0040FD68 FFD3 CALL NEAR EBX //MapViewOfFile(*,4,0,edi,0x1000);+ U' u! a. y2 e: j* ?* ` 0040FD6A 5F POP EDI/ w7 S7 M5 C! U- ]1 l8 z 0040FD6B 5E POP ESI4 ?2 ~$ ^. r k! j1 W: `9 x 0040FD6C 5B POP EBX " \7 X! G1 {- s" N( a% V9 ]) Q. d, H0040FD6D C9 LEAVE ( C0 b; l9 }* ^- c# i/ r0040FD6E C3 RETN

8 m& ]! D r! F

看完了反汇编,接下来就是写代码了 呵呵 就在OpenPhysicalMemory加上下面这点就可以了 5 P; j2 }0 ? {% H; `; V4 }pMapPhysicalMemory=MapViewOfFile(pHandle,4,0,0,0x0a0000); ///第一次映射的,后面那个参数如果映射没成功的话,就需要变化。在我电脑上这个就可以了,就用这个算了 要写完善的话 自己改改 " d5 L! m& U/ v6 ZDWORD d_begin=0;' V) x; k# Y# E) N5 h( U8 f, y q DWORD d_edx=0x67;, A0 h2 r7 I4 x/ W DWORD d_p=pMapPhysicalMemory+0xc00;9 B: x2 K! [2 ~ while(d_edx!=d_p)7 ~8 q, m6 x; i; H8 x4 D( x {% t( N* \4 Z/ ^# n8 w# f d_begin++; ( C# e- o& Z' H+ D$ Y% G5 A- td_p+=0x1000;! `/ o1 k3 }) B1 b3 H! W d_edx+=0x67; //// 这个0x67不知道是什么含义,请谁给个答案最好 :)) f1 ~6 Y# B2 o/ v6 U if(d_begin>=0xa0)break;: B5 l) c$ d$ [" C' D! q3 P3 e: C; i }" D2 i2 T4 x7 v6 Z3 r; T Unmapviewoffile(pHandle);* T9 u; }5 y/ l e4 g if(d_begin==0xa0)$ }2 Y% h3 _/ m d_begin=0x39;2 P4 P0 n1 B7 r0 ?4 Q d_begin=d_edx<<0xc; ) y9 ~# Q/ C; rMapViewOfFile(pHandle,4,0,d_edx,0x1000);

( i, v& r' z8 f8 B9 B

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

$ @% N! S! x4 c( W( s4 o. Q, ~. Y2 F) x

后话:现在xp和win2003都出来那么长时间了,也许win2k下的这个意义不是很大 :),这个偶也说不清楚了 # M( T0 e7 e7 {4 U; I 如果你在做这个部分的时候遇到我同样的问题,加上上面的代码应该能解决,但如果你做的程序的稳定性要和active ports一样,建议你再仔细分析下它的反汇编。由于时间关系,我就不多写了 & o2 _: R9 G3 X, [ 在做这个的时候,偶有不少地方不明白的,比如为什么那个隐射地址要变化,是什么原因使得这个要变化呢?如果您能解释,还请告诉偶hhkkk@126.com ,偶在此先谢啦! P- d( S( {! m8 L3 _ 那个0x67也是个古怪的数据,不知道是为什么用那个数据,因为偶只是从破解的角度来分析的,对内核不熟悉 :( # P1 V/ [" ]: Q5 A4 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-4-18 22:12 , Processed in 0.427816 second(s), 52 queries .

回顶部