QQ登录

只需要一步,快速开始

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

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

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

# b1 M% U# u5 c6 G* a9 l拜读了ILSY 的大作《再谈进程与端口的映射》后,觉得很不错,用vc在电脑上调试,发现有些地方能取得信息 有些地方不能3 R) S) [7 h9 I C1 P+ k 更加怪的是,我的win2k上本来可以取得的,后来居然不行了。) F) E' M2 ~6 A4 l; t4 p" e 而active ports却是那样稳定,有鬼不成 靠 ,偶不信: C2 W1 C/ v0 g5 j" ?' p3 D/ y 搬出OllyDdg经过调试对照发现,程序不能正常显示就是函数的OpenPhysicalMemory导致不能取得信息 $ E( h9 O( w6 c- i$ _5 u4 R1 n下面是active ports的OpenPhysicalMemory反汇编部分 0 l1 b. [1 F$ Y, N$ a3 z. V0040FCF2 8B1D CC124000 MOV EBX,DWORD PTR DS:[<&KERNEL32.MapViewOfFile>] ; KERNEL32.MapViewOfFile * v' b( l. [) y) s! Q0040FCF8 C745 F8 00000A0>MOV DWORD PTR SS:[EBP-8],0A0000 * m; w) ?6 V' y6 \7 K0040FCFF BE 00100000 MOV ESI,1000+ M" Y+ B, `1 `, e' F D: s8 w 0040FD04 FF75 F8 PUSH DWORD PTR SS:[EBP-8] ; T1 i! m+ C" d% @% }- h; ?0040FD07 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8] " S: C1 \. b+ P1 _7 o0040FD0A 57 PUSH EDI " m" s) k* U3 Y- ^0040FD0B 57 PUSH EDI0 M/ ^- ?) R5 v9 C* w 0040FD0C 6A 04 PUSH 4 + e; s1 b7 x+ `. F0040FD0E FF30 PUSH DWORD PTR DS:[EAX]/ S! {5 Q& A7 O0 m 0040FD10 FFD3 CALL NEAR EBX //// MapViewOfFile(*,4,0,0,0x0a0000); 1) map- Z0 S/ ~5 j4 y* [6 H: k+ Y ......... ///如果没map 成功 再改参数 map 因为我看到的都是一次map就ok 就不看了 - i7 o( |( ~$ l' @1 }$ H) N0040FD2E 837D FC 00 CMP DWORD PTR SS:[EBP-4],0 . L1 j- D) T* ^) h0040FD32 76 17 JBE SHORT aports.0040FD4B* u3 m! l3 u6 ^$ [+ v+ s3 b 0040FD34 6A 67 PUSH 67 k/ D7 v, M3 x+ N$ f7 ^' o 0040FD36 8D88 000C0000 LEA ECX,DWORD PTR DS:[EAX+C00]6 Y7 t* |. W4 l+ h C! S( L7 [# P 0040FD3C 5A POP EDX - k: _- P& Z, X5 I# g6 S///下面这段是关键部分了,也就是取得应该映射的起始位置处2 m- n. w, ]. w. X# | 0040FD3D 3911 CMP DWORD PTR DS:[ECX],EDX ) C$ w9 k% A# |: J9 O7 x0040FD3F 74 0A JE SHORT aports.0040FD4B$ Y( Q' z& z2 C% e3 d. O6 h8 S 0040FD41 47 INC EDI$ c5 F9 ?! x5 s {8 Z3 d# K 0040FD42 03CE ADD ECX,ESI $ d) h" M; S+ ?1 y0 j% W7 F0040FD44 03D6 ADD EDX,ESI% K K) W9 R' C* u 0040FD46 3B7D FC CMP EDI,DWORD PTR SS:[EBP-4]. m2 X! ]' f0 \$ W 0040FD49 72 F2 JB SHORT aports.0040FD3D

1 v/ @' |1 K% ~: o5 ?

0040FD4B 50 PUSH EAX + W# r- j' ^8 ?7 u; U+ D' ?. W0040FD4C FF15 D0124000 CALL NEAR DWORD PTR DS:[<&KERNEL32.UnmapViewOfFile>] ; KERNEL32.UnmapViewOfFile . Q! ?4 n7 U6 z0040FD52 3B7D FC CMP EDI,DWORD PTR SS:[EBP-4] ! ~& R5 M' A; k* Y0040FD55 75 03 JNZ SHORT aports.0040FD5A. b3 d* i! X' j$ a3 V 0040FD57 6A 39 PUSH 39 " h# C/ S) j1 d, a* H* w# _0040FD59 5F POP EDI3 o" R, \* L9 y9 e: Y# Y 0040FD5A 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8] ) }4 r" }* J. h" T' L0040FD5D 56 PUSH ESI , F3 m' Y# m2 {" c( q8 x# k2 x0040FD5E C1E7 0C SHL EDI,0C* D" ]. h/ k e/ q- x 0040FD61 57 PUSH EDI# U- o/ g! e5 ]+ C1 M8 I6 G 0040FD62 6A 00 PUSH 0& ` K8 f" I: ?+ a% M; c 0040FD64 6A 04 PUSH 44 ^' V! W K+ r0 s: C( p7 M 0040FD66 FF30 PUSH DWORD PTR DS:[EAX] ( D. |- g* |, g7 j! I0040FD68 FFD3 CALL NEAR EBX //MapViewOfFile(*,4,0,edi,0x1000); ) l1 d0 ?! g4 z+ l% Y6 n, \5 r: U0040FD6A 5F POP EDI( a+ Y0 z' a1 T4 r8 T+ G. \ 0040FD6B 5E POP ESI 7 a$ P* g# d, l, u7 P0040FD6C 5B POP EBX 7 G! j5 a7 G* x; B0040FD6D C9 LEAVE / h0 W/ H9 j) L( D S, u9 D0040FD6E C3 RETN

# ]+ b; T+ t& s0 S& B6 K9 _/ L

看完了反汇编,接下来就是写代码了 呵呵 就在OpenPhysicalMemory加上下面这点就可以了0 K4 ~% g0 N4 S8 s# t O0 x# w' d pMapPhysicalMemory=MapViewOfFile(pHandle,4,0,0,0x0a0000); ///第一次映射的,后面那个参数如果映射没成功的话,就需要变化。在我电脑上这个就可以了,就用这个算了 要写完善的话 自己改改& ]9 l4 U5 x6 z$ \: } DWORD d_begin=0;# j9 _! r+ Z/ d5 m+ W DWORD d_edx=0x67; / K% ~0 i, A: n* C4 Y% {DWORD d_p=pMapPhysicalMemory+0xc00; 0 q3 _0 A% d! M3 Mwhile(d_edx!=d_p)8 _" w# f+ H# c" G* M( c, E { 4 S0 w8 f7 B. J! m S; ld_begin++;/ E) W3 o) r- ^ d_p+=0x1000; . d* q" {5 i2 Bd_edx+=0x67; //// 这个0x67不知道是什么含义,请谁给个答案最好 :) " H! j- g8 E/ A' |" |# mif(d_begin>=0xa0)break;. V; H) S/ ]) k% e, L2 y } b( x# V9 |, y$ N9 sUnmapviewoffile(pHandle); ( f* r; d! \8 G2 L4 o3 uif(d_begin==0xa0): _; P: T; C, ` N b O d_begin=0x39; $ i# `7 @" z# X5 Bd_begin=d_edx<<0xc;" [+ q- }* @2 X MapViewOfFile(pHandle,4,0,d_edx,0x1000);

7 @ l/ d/ {! i5 n

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

/ f9 }) w! \6 T& h4 O; E; Y

后话:现在xp和win2003都出来那么长时间了,也许win2k下的这个意义不是很大 :),这个偶也说不清楚了 + B1 c. n# e! d; m- Y 如果你在做这个部分的时候遇到我同样的问题,加上上面的代码应该能解决,但如果你做的程序的稳定性要和active ports一样,建议你再仔细分析下它的反汇编。由于时间关系,我就不多写了, ?6 G+ M" ^9 q+ g8 o 在做这个的时候,偶有不少地方不明白的,比如为什么那个隐射地址要变化,是什么原因使得这个要变化呢?如果您能解释,还请告诉偶hhkkk@126.com ,偶在此先谢啦4 b$ |0 r7 n) H% v$ B 那个0x67也是个古怪的数据,不知道是为什么用那个数据,因为偶只是从破解的角度来分析的,对内核不熟悉 :(; q8 Y& }4 v ~9 h% Q* K) V: K 另外:第一次写点东西,比较乱,将就着看吧,也算作是个人的笔记吧。

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

回顶部