标 题: 【原创】 隐藏进程中的模块绕过IceSword的检测
作 者: xPLK
时 间: 2008-06-19,17:59:11
链 接: http://bbs.pediy.com/showthread.php?t=66886

【文章标题】: 隐藏进程中的模块绕过IceSword的检测
【文章作者】: 小伟的小伟[0GiNr](看雪ID:xPLK)
【作者主页】: http://www.0GiNr.com    http://hi.baidu.com/zoo%5F  
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
       最近对隐藏DLL来了点兴趣,首先是断了PEB里面的双向链,过了大部分程序。然后呢把MZ标志改掉了过了暴力搜索(感谢aegisys)。
  接下来就是对抗IceSword使用的NtQueryVirtualMemory的方法了。
  我去WRK里面看了下NtQueryVirtualMemory的源码,找到了这里。  
  以下是调试笔记。
  
  lkd> dt_EPROCESS 0x81583B60
  nt!_EPROCESS
     +0x000 Pcb              : _KPROCESS
  ;.............
     +0x11c VadRoot          : 0x816afb68 
  ;.............
  lkd> dt_MMVAD 0x816afb68 ;看到了吧。。。二叉树。。。。。。。。。。。
  nt!_MMVAD
     +0x000 StartingVpn      : 0x30
     +0x004 EndingVpn        : 0x12f
     +0x008 Parent           : (null) 
     +0x00c LeftChild        : 0x813d7748 _MMVAD
     +0x010 RightChild       : 0x816b21d8 _MMVAD  ;选择右节点来遍历
     +0x014 u                : __unnamed
     +0x018 ControlArea      : 0x0a050004 _CONTROL_AREA
     +0x01c FirstPrototypePte : 0x6d665346 _MMPTE
     +0x020 LastContiguousPte : 0x00000001 _MMPTE
     +0x024 u2               : __unnamed
  lkd> dt_MMVAD 0x816b21d8
  nt!_MMVAD
     +0x000 StartingVpn      : 0x400
     +0x004 EndingVpn        : 0x410
     +0x008 Parent           : 0x816afb68 _MMVAD
     +0x00c LeftChild        : 0x81672bb0 _MMVAD
     +0x010 RightChild       : 0x817b58d8 _MMVAD  ;再来一次
     +0x014 u                : __unnamed
     +0x018 ControlArea      : 0x8144a2f8 _CONTROL_AREA   ;这里是进程映像的地方。
     +0x01c FirstPrototypePte : 0xe24faaa0 _MMPTE
     +0x020 LastContiguousPte : 0xfffffffc _MMPTE
     +0x024 u2               : __unnamed
  lkd> dt_MMVAD 0x817b58d8 
  nt!_MMVAD
     +0x000 StartingVpn      : 0x7c920
     +0x004 EndingVpn        : 0x7c9b3
     +0x008 Parent           : 0x816b21d8 _MMVAD
     +0x00c LeftChild        : 0x81731348 _MMVAD
     +0x010 RightChild       : 0x81629b70 _MMVAD
     +0x014 u                : __unnamed
     +0x018 ControlArea      : 0x81f05138 _CONTROL_AREA   ;从这里进去。。
     +0x01c FirstPrototypePte : 0xe1377040 _MMPTE
     +0x020 LastContiguousPte : 0xfffffffc _MMPTE
     +0x024 u2               : __unnamed
  lkd> dt_CONTROL_AREA 0x81f05138 
  nt!_CONTROL_AREA
     +0x000 Segment          : 0xe1377008 _SEGMENT
     +0x004 DereferenceList  : _LIST_ENTRY [ 0x0 - 0x0 ]
     +0x00c NumberOfSectionReferences : 1
     +0x010 NumberOfPfnReferences : 0x6d
     +0x014 NumberOfMappedViews : 0x19
     +0x018 NumberOfSubsections : 5
     +0x01a FlushInProgressCount : 0
     +0x01c NumberOfUserReferences : 0x1a
     +0x020 u                : __unnamed
     +0x024 FilePointer      : 0x81e9d938 _FILE_OBJECT  ;这里可以得到模块信息
     +0x028 WaitingForDeletion : (null) 
     +0x02c ModifiedWriteCount : 0
     +0x02e NumberOfSystemCacheViews : 0
  lkd> dt_FILE_OBJECT 0x81e9d938 ;到这里ntdll.dll已经出来了。。。。
  nt!_FILE_OBJECT
     +0x000 Type             : 5
     +0x002 Size             : 112
     +0x004 DeviceObject     : 0x81dce7b8 _DEVICE_OBJECT
     +0x008 Vpb              : 0x81e9f8e0 _VPB
     +0x00c FsContext        : 0xe13939e0 
     +0x010 FsContext2       : 0xe1393b38 
     +0x014 SectionObjectPointer : 0x81e9338c _SECTION_OBJECT_POINTERS
     +0x018 PrivateCacheMap  : (null) 
     +0x01c FinalStatus      : 0
     +0x020 RelatedFileObject : (null) 
     +0x024 LockOperation    : 0 ''
     +0x025 DeletePending    : 0 ''
     +0x026 ReadAccess       : 0x1 ''
     +0x027 WriteAccess      : 0 ''
     +0x028 DeleteAccess     : 0 ''
     +0x029 SharedRead       : 0x1 ''
     +0x02a SharedWrite      : 0 ''
     +0x02b SharedDelete     : 0 ''
     +0x02c Flags            : 0x44040
     +0x030 FileName         : _UNICODE_STRING "\WINDOWS\system32\ntdll.dll"
     +0x038 CurrentByteOffset : _LARGE_INTEGER 0x0
     +0x040 Waiters          : 0
     +0x044 Busy             : 0
     +0x048 LastLock         : (null) 
     +0x04c Lock             : _KEVENT
     +0x05c Event            : _KEVENT
     +0x06c CompletionContext : (null) 
  lkd> dt_FILE_OBJECT 0x81c08350 ;再往后是kernel32.dll
  nt!_FILE_OBJECT
  ;......................
     +0x030 FileName         : _UNICODE_STRING "\WINDOWS\system32\kernel32.dll"
  ;......................
   
  
  这里是源码,包含了大量硬编码,要编译的话自己搜索一下就可以。
  Code:
  
  
  //
  //在Ring0下通过遍历VAD获取进程内的模块(WinXP SP2)
  //By 小伟的小伟[0GiNr](看雪ID:xPLK)
  //http://www.0GiNr.com
  //http://hi.baidu.com/zoo%5F
  /
  VOID ShowModules()
  {
      ULONG VAD;
      PEPROCESS TargetProcess;
      
      PsLookupProcessByProcessId( (HANDLE)Pid,TargetProcess);
      if(!TargetProcess)
       {
          dprintf("[EnumModules] Error on Get EProcess By Pid.");
          return;
       }
      VAD = *(ULONG *)((ULONG)TargetProcess + Vad);
      //+0x11c VadRoot : Ptr32 Void
      dprintf("[EnumModules] EPROCESS : 0x%X , VAD : 0x%X",TargetProcess,VAD);
      PreOrderTraverse(VAD);  //遍历二叉树。。。
      dprintf("[EnumModules] Modules count : %d",nCount);
      //start.
  }
  
  VOID PreOrderTraverse(ULONG mmVad)
  {
      if ( MmIsAddressValid( (ULONG *)mmVad ) )
       {
          ShowPath(mmVad);//读取地址
          PreOrderTraverse( *(ULONG *)(mmVad + LeftChild) );
          PreOrderTraverse( *(ULONG *)(mmVad + RightChild) );
       }
  }
  
  VOID ShowPath(ULONG mmVad)
  {
      PUNICODE_STRING pPath;
      ULONG ca;//_CONTROL_AREA
      ULONG fp;//_FILE_OBJECT
      ca = *(ULONG *)(mmVad + ControlArea);
      if( !MmIsAddressValid( (ULONG *)ca ) )
       {
          //dprintf("[EnumModules] ControlArea is not available : 0x%X",ca);
          return;
       }
      fp = *(ULONG *)(ca + FilePointer);
      if( !MmIsAddressValid( (ULONG *)fp ) )
       {
          //dprintf("[EnumModules] FileObject is not available : 0x%X",fp);
          return;
       }
      pPath = (PUNICODE_STRING)(fp + FileName);
      dprintf("[EnumModules] The file name is %S",pPath->Buffer);
      //dprintf("[EnumModules] The MMVAD is 0x%X",mmVad);
      //dprintf("\n");
      nCount++;//计数
  }
  
  
  这样和用NtQueryVirtualMemory扫描出来的结果一样(MemorySectionName),可以在DebugView里看到。输出是这样的。
  [EnumModules] The file name is \Project\VisualC++\HideModule\Release\HideModule.exe
  [EnumModules] The file name is \WINDOWS\system32\ntdll.dll
  [EnumModules] The file name is \WINDOWS\system32\kernel32.dll
  [EnumModules] The file name is \WINDOWS\system32\advapi32.dll
  [EnumModules] The file name is \WINDOWS\system32\rpcrt4.dll
  [EnumModules] The file name is \WINDOWS\system32\gdi32.dll
  [EnumModules] The file name is \WINDOWS\system32\user32.dll
  [EnumModules] The file name is \WINDOWS\system32\imm32.dll
  [EnumModules] The file name is \WINDOWS\system32\msvcrt.dll
  [EnumModules] The file name is \WINDOWS\system32\apphelp.dll
  [EnumModules] The file name is \WINDOWS\system32\version.dll
  [EnumModules] The file name is \WINDOWS\system32\lpk.dll
  [EnumModules] The file name is \WINDOWS\system32\usp10.dll
  [EnumModules] The file name is \WINDOWS\system32\unicode.nls
  [EnumModules] The file name is \WINDOWS\system32\sortkey.nls
  [EnumModules] The file name is \WINDOWS\system32\ctype.nls
  [EnumModules] The file name is \WINDOWS\system32\sorttbls.nls
  [EnumModules] The file name is \WINDOWS\system32\locale.nls
  
  
  所以要隐藏呢,就简单了,当然遍历二叉树找到需要隐藏的DLL的时候,我们可以做手脚。
  当初测试抹掉FileObject会不稳定,运行某些程序会蓝屏。
  
  感谢炉子提示,抹掉_FILE_OBJECT里面的路径就可以了。
  代码如下:
  
  RtlZeroMemory(pPath->Buffer,pPath->Length);
  pPath->Length = 0;
  pPath->MaximumLength = 0;
  ///
  
  
  效果图如下,我隐藏的是ntdll.dll,IceSword是最新版:
  
  比较有意思的是,隐藏掉了之后,再所有进程中都不会显示该模块(ntdll.dll)。
  经过测试,对新创建的进程同样有效,新进程中也没有ntdll.dll的痕迹(IceSword)。
  抹了这点地方,应该还是有办法检测出来的。
  大家发挥创造力吧。

再次感谢几位朋友的帮忙:
  aegisys: http://hi.baidu.com/aegisys
  Sysnap :http://hi.baidu.com/sysnap
  炉子 :http://hi.baidu.com/breakinglove_
  FlowerCode: http://hi.baidu.com/flowercode
  
  本人菜鸟,文中难免有所缺漏,敬请各位看官指出不足之处。。

注:sysnap大牛已经检测出来了,得到了一个基址,十分不错,我把bin放出来,有兴趣的可以玩一下,完整src就不放了,主要是怕流氓啊~。
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!

2008年06月19日 18:02:30*转载请注明来自看雪论坛@PEdiy.com

jpg改rar 

转载于:https://www.cnblogs.com/kuangke/p/6259389.html

隐藏进程中的模块绕过IceSword的检测相关推荐

  1. 进程中dll模块的隐藏

    标 题: [原创]进程中dll模块的隐藏 作 者: NetRoc 时 间: 2008-02-20,17:28:30 链 接: http://bbs.pediy.com/showthread.php?t ...

  2. 利用伪造内核文件来绕过IceSword的检测

    作者:倪茂志 邮件:backspray008@gmail.com 完成于:2005.12.20 文章分为八个部分: 一.为什么需要伪造内核 二.伪造内核文件 三.隐藏进程 四.隐藏内核模块 五.隐藏服 ...

  3. 再谈隐藏进程中的DLL模块/黑月教主

    http://hi.baidu.com/_achillis/blog/item/59bf732623fbe509918f9d87.html 相当老的话题,大约一年前就写过这个东西了,不过那时候知识比较 ...

  4. 枚举Windows进程中模块的几种方法-PEB内核结构详解

    1. 引言 在诸多的场景中(例如软件测试,软件安全研究等领域)经常需要分析在目标进程中具体加载了哪些模块(DLL),以及所加载的模块的信息(如模块基地址,映射文件大小等).获取这windows进程加载 ...

  5. 学习笔记之卸载远程目标进程中的DLL模块(转)

    学习笔记之卸载远程目标进程中的DLL模块 (2007-07-23 23:51:02) 转载▼ 学习笔记之卸载远程目标进程中的DLL模块2007/7/23 1.首先得把DLL模块中的线程结束 使用Cre ...

  6. [转载]侦测隐藏进程

    侦测隐藏进程 Detection of the hidden processes 俄语原文:http://wasm.ru/article.php?article=hiddndt 俄文翻译:kao ht ...

  7. Rootkit隐藏进程和端口检测

    Rootkit是一种特殊的恶意软件,它的功能是在安装目标上隐藏自身及指定的文件.进程和网络链接等信息,比较多见到的是Rootkit一般都和木马.后门等其他恶意程序结合使用. 例如:inetd或者log ...

  8. icesword 是如何列出隐藏进程?

    icesword 是如何列出隐藏进程? icesword 是通过 PspCidTable 这个表来遍历进程的, PspCidTable 是一个没有被 ntoskrnl.exe 导出的.这就涉及到如何定 ...

  9. 修改ActiveProcessLinks链表隐藏进程

    在Windows内核中有一个活动进程链表AcvtivePeorecssList.它是一个双向链表,保存着系统中所有进程的EPROCESS结构.特别地,进程的EPROCESS结构包含一个具有指针成员FL ...

最新文章

  1. Hubble.net 简介及与Lucene.net 对比测试
  2. 6.Django与Ajax
  3. 局部钩子能防全局钩子吗_阿特的钩子成为队友的噩梦,毫无游戏体验感,小夏:当场哭了出来...
  4. . NET5一出,. NET岗面试普遍喊难,真相是…
  5. C#面向对象设计模式第二讲:Singleton Pattern单件模式(创建型模式)
  6. 前端学习(1854)vue之电商管理系统电商系统之安装mysql
  7. 【2016年第1期】基于大数据的小麦蚜虫发生程度决策树预测分类模型
  8. httpcline转发_go http请求转发
  9. php中json字符串转json对象数组对象,php – 将JSON字符串解析为数组,而不是对象
  10. Ubuntu ufw防火墙常见命令
  11. PyTorch中查看GPU使用情况以及一些重要函数
  12. 在自定义类中使用HttpContext和Page等对象的方法
  13. PTA是什么?BT-WIFI共存
  14. DSSM模型的原理简介,预测两个句子的语义相似度
  15. 2000w mysql_MySQL数据库优化(基于酒店2000w条数据)
  16. 正向随机微分方程的经典数值格式模拟
  17. java是如何调用native方法?hotspot源码分析必会技能
  18. 前端页面实现在线预览文档Word、Excel、PPT、PDF
  19. 美国Zip code大全
  20. 打印纸张规格“XXX”不见了

热门文章

  1. html 滚动条 scrolltop scrollheight,JavaScript之scrollTop、scrollHeight、offsetTop、offsetHeight等属性学习笔记...
  2. linux中.log文件是什么,linux 下log文件夹简介
  3. 如何在一个电脑上同时登录两个微信?
  4. 2021年R2移动式压力容器充装证考试题库及R2移动式压力容器充装试题解析
  5. 处男,要不要告诉对象_告诉,不要问
  6. matlab可以仿真开关电源吗,开关电源系统可以用()软件进行仿真。A、AnsysB、MatlabC、ProtelD、AutoCAD...
  7. 汽车品牌、资讯、出行App获取安装来源统计
  8. Mathematica应用之求通项公式
  9. 轰动一时的三大黑客现在在做什么?
  10. July博客第十二章参考学习