QQ登录

只需要一步,快速开始

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

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

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

# n$ C% K6 _0 g- H 拜读了ILSY 的大作《再谈进程与端口的映射》后,觉得很不错,用vc在电脑上调试,发现有些地方能取得信息 有些地方不能 6 J& o) _( K1 O" S2 A3 B0 J( z更加怪的是,我的win2k上本来可以取得的,后来居然不行了。: i% ~# E, ^( Y6 k8 ^% ?2 `" p 而active ports却是那样稳定,有鬼不成 靠 ,偶不信 " M* A ]8 D& J7 b% Q2 B搬出OllyDdg经过调试对照发现,程序不能正常显示就是函数的OpenPhysicalMemory导致不能取得信息 2 i( S9 G; G1 m/ f) U/ U下面是active ports的OpenPhysicalMemory反汇编部分 - X( {) t9 A- h/ E6 s+ ~0040FCF2 8B1D CC124000 MOV EBX,DWORD PTR DS:[<&KERNEL32.MapViewOfFile>] ; KERNEL32.MapViewOfFile 1 E8 h' d9 ]- z# f' T* R' X! d0040FCF8 C745 F8 00000A0>MOV DWORD PTR SS:[EBP-8],0A0000 4 ?( }1 b. v- a' Y7 v7 `0040FCFF BE 00100000 MOV ESI,1000 " V, A {% R9 Y; P) k, p0040FD04 FF75 F8 PUSH DWORD PTR SS:[EBP-8]0 G/ @' u: `# U0 |- w- n" R 0040FD07 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]3 Y: k& j& B$ Y t7 J \ 0040FD0A 57 PUSH EDI % S4 A7 G6 A8 Z7 w8 Z0040FD0B 57 PUSH EDI ! P; S0 M6 o; V8 P, O) A0040FD0C 6A 04 PUSH 4% }) K/ x7 v8 M9 t 0040FD0E FF30 PUSH DWORD PTR DS:[EAX], ]* c; b. a6 Y+ w/ ^. F 0040FD10 FFD3 CALL NEAR EBX //// MapViewOfFile(*,4,0,0,0x0a0000); 1) map " n1 a3 h! z/ m0 k; y$ X......... ///如果没map 成功 再改参数 map 因为我看到的都是一次map就ok 就不看了 7 t- K8 B' y$ I) a* q/ @* g0040FD2E 837D FC 00 CMP DWORD PTR SS:[EBP-4],0, a: D" L% N: p3 u# M; i 0040FD32 76 17 JBE SHORT aports.0040FD4B / q4 n% z7 x; \) L" C% ?& T$ Z# H Z0040FD34 6A 67 PUSH 67 * d4 A: Y1 _* j) d: c& [* W, h+ G4 x0040FD36 8D88 000C0000 LEA ECX,DWORD PTR DS:[EAX+C00]) L- K! g; k" k- B$ Y" [7 L' b+ ` 0040FD3C 5A POP EDX! a- B* n3 j$ d, R0 ?8 I( J( s# Q ///下面这段是关键部分了,也就是取得应该映射的起始位置处 : z' E9 H% M- ~+ d# {0 C0040FD3D 3911 CMP DWORD PTR DS:[ECX],EDX$ ^# Y8 M4 [8 ?3 s9 S# `1 W 0040FD3F 74 0A JE SHORT aports.0040FD4B- [" [8 n; h6 _9 n7 i 0040FD41 47 INC EDI & A& x8 \. E# U1 E* D0040FD42 03CE ADD ECX,ESI * c) _/ U% Z3 S0040FD44 03D6 ADD EDX,ESI + L) X( l" Q0 I6 t; N8 i0040FD46 3B7D FC CMP EDI,DWORD PTR SS:[EBP-4]) p! |. w* E) j: X- j) W 0040FD49 72 F2 JB SHORT aports.0040FD3D

5 Q+ s+ z8 {3 T8 U% @

0040FD4B 50 PUSH EAX( ~/ y! A+ ~9 o$ i9 I0 ~- X9 a/ x M 0040FD4C FF15 D0124000 CALL NEAR DWORD PTR DS:[<&KERNEL32.UnmapViewOfFile>] ; KERNEL32.UnmapViewOfFile1 |. D/ c; a5 o0 O1 D- H 0040FD52 3B7D FC CMP EDI,DWORD PTR SS:[EBP-4] ' g; L ?5 \, h% T% A1 ]0040FD55 75 03 JNZ SHORT aports.0040FD5A, c( T8 ^7 d. @; K 0040FD57 6A 39 PUSH 39& f2 }0 E+ a( e. q 0040FD59 5F POP EDI 2 L( c0 C" B0 n1 O0040FD5A 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8] ' w& p3 u7 g- V0040FD5D 56 PUSH ESI# `, ~, `3 p1 v ?" c! s 0040FD5E C1E7 0C SHL EDI,0C 2 \1 {/ \8 C2 f2 g5 b0040FD61 57 PUSH EDI ; f* U6 F) T$ f3 M3 ^+ w9 R2 \0040FD62 6A 00 PUSH 0: f' {: x# @2 d+ }1 [ 0040FD64 6A 04 PUSH 4 8 X8 @8 h1 G8 Z4 J+ h- v3 ]0040FD66 FF30 PUSH DWORD PTR DS:[EAX] 9 P6 L: n# F# q! u' {0040FD68 FFD3 CALL NEAR EBX //MapViewOfFile(*,4,0,edi,0x1000);4 w" I. `( b! _; D' I0 d$ F 0040FD6A 5F POP EDI2 d; p( ?! b/ [' J 0040FD6B 5E POP ESI / d* {/ D. O2 X$ C! b0040FD6C 5B POP EBX 6 w: N% N; ~% k+ {1 K: m3 t0040FD6D C9 LEAVE 7 N& F: w7 a% L. P% n0040FD6E C3 RETN

0 L7 i0 M, ]! [& K N

看完了反汇编,接下来就是写代码了 呵呵 就在OpenPhysicalMemory加上下面这点就可以了" `8 E3 Q5 @. m e6 K# r) f6 } pMapPhysicalMemory=MapViewOfFile(pHandle,4,0,0,0x0a0000); ///第一次映射的,后面那个参数如果映射没成功的话,就需要变化。在我电脑上这个就可以了,就用这个算了 要写完善的话 自己改改 }( t& _( g0 I+ T2 K0 P; A! [ DWORD d_begin=0; 3 A) I2 K# V+ I( n6 v* YDWORD d_edx=0x67; 8 P; R& r. M* k- J' L( |, O' R# |DWORD d_p=pMapPhysicalMemory+0xc00; * j9 V: w! z6 [* X1 j. C) B3 cwhile(d_edx!=d_p) & H' ^% [+ \6 \" T9 {+ U{# x4 a. @/ `9 h9 e d_begin++;( u5 P, L. J4 j7 m d_p+=0x1000; 1 G9 W* Z' x0 A) f* o+ yd_edx+=0x67; //// 这个0x67不知道是什么含义,请谁给个答案最好 :)6 m& o% Y9 l9 I if(d_begin>=0xa0)break;5 y( Z# |8 S8 H. U: ]! v) e }' r, J* o$ N& K- R' j Unmapviewoffile(pHandle);) B: Z# W3 c7 Q# \" ] if(d_begin==0xa0) {) @+ c9 r% Zd_begin=0x39;, [% s; o' R4 Z; Q0 A; ~+ \ d_begin=d_edx<<0xc; ! P! A- Z0 \1 C: t/ bMapViewOfFile(pHandle,4,0,d_edx,0x1000);

- Q$ W* q X! c

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

1 S% V. K% O* c8 D" B' i, Y% J

后话:现在xp和win2003都出来那么长时间了,也许win2k下的这个意义不是很大 :),这个偶也说不清楚了 : C: |( D& @, L: ^ 如果你在做这个部分的时候遇到我同样的问题,加上上面的代码应该能解决,但如果你做的程序的稳定性要和active ports一样,建议你再仔细分析下它的反汇编。由于时间关系,我就不多写了 / g3 b2 h$ k6 @; t/ r# y 在做这个的时候,偶有不少地方不明白的,比如为什么那个隐射地址要变化,是什么原因使得这个要变化呢?如果您能解释,还请告诉偶hhkkk@126.com ,偶在此先谢啦/ x/ n! S9 j/ K9 v6 z9 X 那个0x67也是个古怪的数据,不知道是为什么用那个数据,因为偶只是从破解的角度来分析的,对内核不熟悉 :(, n S4 Y7 o) O3 A! @0 l 另外:第一次写点东西,比较乱,将就着看吧,也算作是个人的笔记吧。

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-16 04:26 , Processed in 0.404380 second(s), 52 queries .

回顶部