设为主页 | 加入收藏 | 繁體中文

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

  拜读了ILSY 的大作《再谈历程与端口的映射》后,觉得很不错,用vc在电脑上调试,发明有些地方能取得信息 有些地方不克不及
  越发怪的是,我的win2k上原来可以取得的,厥后竟然不行了。
  而active ports倒是那样稳固,有鬼不可 靠 ,偶不信
  搬出OllyDdg颠末调试对照发明,程序不克不及正常显示就是函数的OpenPhysicalMemory招致不克不及取得信息
  下面是active ports的OpenPhysicalMemory反汇编部门
  0040FCF2    8B1D CC124000   MOV     EBX,DWORD PTR DS:[<&KERNEL32.MapViewOfFile>]           ; KERNEL32.MapViewOfFile
  0040FCF8    C745 F8 00000A0>MOV     DWORD PTR SS:[EBP-8],0A0000
  0040FCFF    BE 00100000     MOV     ESI,1000
  0040FD04    FF75 F8         PUSH    DWORD PTR SS:[EBP-8]
  0040FD07    8B45 08         MOV     EAX,DWORD PTR SS:[EBP+8]
  0040FD0A    57              PUSH    EDI
  0040FD0B    57              PUSH    EDI
  0040FD0C    6A 04           PUSH    4
  0040FD0E    FF30            PUSH    DWORD PTR DS:[EAX]
  0040FD10    FFD3            CALL    NEAR EBX                //// MapViewOfFile(*,4,0,0,0x0a0000); 1) map
  .........    ///如果没map 乐成 再改参数 map 由于我看到的都是一次map就ok 就不看了
  0040FD2E    837D FC 00      CMP     DWORD PTR SS:[EBP-4],0
  0040FD32    76 17           JBE     SHORT aports.0040FD4B
  0040FD34    6A 67           PUSH    67
  0040FD36    8D88 000C0000   LEA     ECX,DWORD PTR DS:[EAX+C00]
  0040FD3C    5A              POP     EDX
  ///下面这段是关键部门了,也就是取得应该映射的起始位置处
  0040FD3D    3911            CMP     DWORD PTR DS:[ECX],EDX
  0040FD3F    74 0A           JE      SHORT aports.0040FD4B
  0040FD41    47              INC     EDI
  0040FD42    03CE            ADD     ECX,ESI
  0040FD44    03D6            ADD     EDX,ESI
  0040FD46    3B7D FC         CMP     EDI,DWORD PTR SS:[EBP-4]
  0040FD49    72 F2           JB      SHORT aports.0040FD3D
  0040FD4B    50              PUSH    EAX
  0040FD4C    FF15 D0124000   CALL    NEAR DWORD PTR DS:[<&KERNEL32.UnmapViewOfFile>]        ; KERNEL32.UnmapViewOfFile
  0040FD52    3B7D FC         CMP     EDI,DWORD PTR SS:[EBP-4]
  0040FD55    75 03           JNZ     SHORT aports.0040FD5A
  0040FD57    6A 39           PUSH    39
  0040FD59    5F              POP     EDI
  0040FD5A    8B45 08         MOV     EAX,DWORD PTR SS:[EBP+8]
  0040FD5D    56              PUSH    ESI
  0040FD5E    C1E7 0C         SHL     EDI,0C
  0040FD61    57              PUSH    EDI
  0040FD62    6A 00           PUSH    0
  0040FD64    6A 04           PUSH    4
  0040FD66    FF30            PUSH    DWORD PTR DS:[EAX]
  0040FD68    FFD3            CALL    NEAR EBX                //MapViewOfFile(*,4,0,edi,0x1000);
  0040FD6A    5F              POP     EDI
  0040FD6B    5E              POP     ESI
  0040FD6C    5B              POP     EBX
  0040FD6D    C9              LEAVE
  0040FD6E    C3              RETN
  看完了反汇编,接下来就是写代码了 呵呵 就在OpenPhysicalMemory加上下面这点就可以了
  pMapPhysicalMemory=MapViewOfFile(pHandle,4,0,0,0x0a0000);  ///第一次映射的,背面那个参数如果映射没乐成的话,就需要变革。在我电脑上这个就可以了,就用这个算了 要写美满的话  自己改改
  DWORD d_begin=0;
  DWORD d_edx=0x67;
  DWORD d_p=pMapPhysicalMemory+0xc00;
  while(d_edx!=d_p)
  {
  d_begin++;
  d_p+=0x1000;
  d_edx+=0x67;           //// 这个0x67不晓得是什么寄义,请谁给个答案最好 :)
  if(d_begin>=0xa0)break;
  }
  Unmapviewoffile(pHandle);
  if(d_begin==0xa0)
  d_begin=0x39;
  d_begin=d_edx<<0xc;
  MapViewOfFile(pHandle,4,0,d_edx,0x1000);
  应该加上后就可以马上看到效果了,不会呈现映射失败的情况。
  后话:如今xp和win2003都出来那么永劫间了,大概win2k下的这个意义不是很大 :),这个偶也说不清楚了
  如果你在做这个部门的工夫遇到我异样的题目,加上下面的代码应该能解决,但如果你做的程序的稳固性要和active ports一样,发起你再仔细分析下它的反汇编。由于工夫干系,我就未几写了
  在做这个的工夫,偶有不少地方不明确的,比如为什么那个隐射地点要变革,是什么缘故原由使得这个要变革呢?如果您能解释,还请告诉偶hhkkk@126.com ,偶在此先谢啦
  那个0x67也是个古怪的数据,不晓得是为什么用那个数据,由于偶只是从破解的角度来分析的,对内核不熟习 :(
  别的:第一次写点东西,比力乱,将就着看吧,也看成是个人的笔记吧。
 


    文章作者: 福州军威计算机技术有限公司
    军威网络是福州最专业的电脑维修公司,专业承接福州电脑维修、上门维修、IT外包、企业电脑包年维护、局域网网络布线、网吧承包等相关维修服务。
    版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处 、作者信息和声明。否则将追究法律责任。

TAG:
评论加载中...
内容:
评论者: 验证码: