首页
社区
课程
招聘
[原创]ixer 0.11开源版-一款手工杀毒/Anti-rootkit工具
发表于: 2013-6-15 19:05 59186

[原创]ixer 0.11开源版-一款手工杀毒/Anti-rootkit工具

2013-6-15 19:05
59186
标 题: 【原创】ixer 0.11开源版-一款手工杀毒/Anti-rootkit工具
作 者: Chinghoi
时 间: 2013-06-15, 19:05:21
链 接: http://bbs.pediy.com/showthread.php?t=173653

主要功能:
进程、线程、进程Dll模块的枚举与检测,杀进程、杀线程、卸载模块等功能
内核驱动枚举与检测,定位、删除驱动文件等
SSDT的检测和恢复
Shadow SSDT的检测和恢复
消息钩子的枚举和卸载
注册表枚举和删除
文件枚举和删除
网络端口枚举、终止进程
   
   此作品不仅能够用于个人电脑上作为手工查杀的辅助工具,还能作为计算机安全人员研究rootkit的参考工具,本工具为作者学习windows内核驱动安全编程写的工具,内心功能大都是用内核驱动实现的。实现了Anti-rootkit部分功能模块,作为ARK工具尚欠完善,但可作学习参考研究,高手请飘过。为了发扬开源精神,广交好友,作品工程项目面对所有网友开源! 希望能够帮助到像作者一样热衷于windows内核安全的刚起步的晚辈们,在研究参考或开发过程中有遇到技术瓶颈可以联系作者研究学习讨论,作者也很期待能广交各路豪友。
开发环境:
  界面:
     MFC(C/C++) /Microsoft Visual C++ 6.0
  驱动:
  C、汇编 /Microsoft Visual Studio 2008 + WDK 7600.16385.1
运行环境:
  Windows XP sp2、sp3
工具&作品源码下载地址:
     ixer0.11.rar

联系信息:
  作者:Chinghoi(谭正海)
  Email:chinghoi@vip.qq.com
      Blog:http://blog.csdn.net/Chinghoi

界面预览:

        主界面->进程管理


      主界面->进程标签->线程与DLL模块管理双开


       主界面->驱动模块标签


      主界面->ssdt标签


  主界面->ShadowSsdt标签


       主界面->网络端口标签

进程:
  进程枚举:
  用ZwQuerySystemInformation函数的SystemProcessesAndThreadsInformation参数功能,函数返回一个指向PSYSTEM_PROCESS_INFORMATION的缓冲区,此缓冲区为一条链表的结构,结构的NextEntryOffset成员指向下一个结构,遍历此链表即可现实常规的进程枚举。
  
   进程的检测:
  PspCidTable枚举结果与ZwQuerySystemInformation枚举结果对比检测隐藏进程,步骤如下:
  1.获取PspCidTable地址
  特征码搜索定位PsLookupProcessByProcessId函数里调用PspCidTable的Call地址  获取PspCidTable地址。
  2.用ExEnumHandleTable枚举句柄表
ExEnumHandleTable函数是ntoskrnl.exe导出函数,声明即可引用。原型如下:
  NTKERNELAPI
  BOOLEAN
  ExEnumHandleTable (
        __in PHANDLE_TABLE HandleTable,
           __in EX_ENUMERATE_HANDLE_ROUTINE EnumHandleProcedure,
        __in PVOID EnumParameter,
      __out_opt PHANDLE Handle );
  ExEnumHandleTable参数:
  一个指向PHANDLE_TABLE的指针,传入CidHandleTable地址即可
  
  EnumHandleProcedure参数:
  该参数为EX_ENUMERATE_HANDLE_ROUTINE类型,是一个回调例程,该回调原型如下:
  typedef BOOLEAN (*EX_ENUMERATE_HANDLE_ROUTINE)(
              IN PHANDLE_TABLE_ENTRY HandleTableEntry,
                IN HANDLE Handle,
                IN PVOID EnumParameter );
  
  HandleTableEntry参数:
  传递给我们的一个指向PHANDLE_TABLE_ENTRY类型指针,HandleTableEntry->Object指向对象。
  
  函数返回FALSE则继续,TRUE终止,可以判断EnumParameter参数是否等于  HandleTableEntry做终止条件。
  
  PsActiveProcessList枚举进程与上2步中做比较。
  
  结束进程:
  用PspTerminateThreadByPointer结束进程
  
  线程枚举:
  通过传入的EPROCESS地址+ThreadListHead偏移地址得到线程链表头遍历线程链。

  DLL枚举:
  传入一个进程ID,通过PsLookupProcessByProcessId得到进程EPROCESS,EPROCESS->Peb->Ldr->LdrHeader然后遍历LDR链。
  用ZwUnmapViewOfSection卸载Dll

驱动:
  驱动枚举:
  ZwQuerySystemInformation函数的SystemModuleInformation参数
  函数返回缓冲区的缓冲区的前4个字节是已加载的内核模块总数记为N,后面是共有N个元素的SYSTEM_MODULE_INFORMATION_ENTRY内核模块信息数组,用一个for循环N次即可遍历整条链。
  
  驱动检测:
  遍历PsLoadedModuleList与ZwQuerySystemInformation结果做比较

ssdt、shadow ssdt表hook的检测与恢复:
  ssdt:
  从 ntoskrnl**.exe内核PE文件中查找原始的ssdt表函数地址,从ntdll.中查找函数名称。
  
  Shadow ssdt:
  系统线程KTHREAD->KTHREAD.ServiceTable中获取Shadow ssdt表的当前地址、函数名,从微软服务器下载符号文件pdb解析原始的函数地址、函数名。

消息钩子的枚举:
  遍历所有进程的线程从ETHREAD中检测消息钩子信息。
  
注册表的枚举:
  使用ZwOpenKey,ZwQueryKey,ZwClose,ZwEnumerateKey,ZwEnumerateValueKey来枚举。

文件:
  文件的枚举与检测:
  使用传说中icesword的Raw FSD I/O概念思路,即直接填充构造irp的各个域发往FSD文件系统(ntfs.sys/fastfat.sys):
  Irp = IoAllocateIrp(x, x)  //分配一个irp结构
  
  //填充各个域..
  MajorFunction=IRP_MJ_DIRECTORY_CONTROL;
  MinorFunction=IRP_MN_QUERY_DIRECTORY;
  ..
  
  status = IxIoCallDriver( pDevObject, irp );   //自实现的将irp下发到下级设备上
  
   文件的删除:
       文件的删除也使用了send Irp packet,直接填充构造irp的各个域发往FSD文件系
   统删除文件。
  
  网络端口:
  IoBuildDeviceIoControlRequest分别向Tcpip.sys所创建的TCP设备对象和UDP设备对象发送IRP,在输出缓冲区中将返回端口、IP、状态、PID等信息。

源码下载:
ixer0.11.rar

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (62)
雪    币: 406
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
写得不错,兼容WIN7 WIN8 X64?
2013-6-15 19:46
0
雪    币: 350
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
感谢关注, 目前暂只兼容xp系统, 很多功能模块没完成呢, 以后更新吧
2013-6-15 19:49
0
雪    币: 34
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
楼主好牛
2013-6-15 20:15
0
雪    币: 43
活跃值: (28)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
这个一定要顶
2013-6-15 20:36
0
雪    币: 350
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
感谢关注
2013-6-15 20:37
0
雪    币: 90
活跃值: (91)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
小手一抖,积分拿走,炮炮兵补丁有木有
2013-6-15 20:42
0
雪    币: 350
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
顶呀顶~ 不分白天黑夜常常熬夜、有时候为了一个蓝屏bug耗上好几天来调试、修改、找资料为了写它瘦了多少斤都不知道了,可来这里开源却这样安静得可怕, 别人的一段代码都加精或至少关注了,唉~  想想就心凉呀。。
2013-6-16 09:53
0
雪    币: 440
活跃值: (1163)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
9
楼主啊,不是不关注是水平不够,,,不过感觉心不错的样子先收藏
2013-6-16 10:22
0
雪    币: 8765
活跃值: (5250)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
10
纯支持楼主。。。
2013-6-16 10:34
0
雪    币: 297
活跃值: (120)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
11
确实啊,一份原创背后都有无数的心血啊,舍得拿出来共享的人都应该支持,版主反应确实有点迟钝了
2013-6-16 10:42
0
雪    币: 350
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
也许是偶想太多了、
2013-6-16 11:48
0
雪    币: 220
活跃值: (721)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
感觉有点XT的意思了,呵呵
2013-6-16 12:00
0
雪    币: 350
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
一直膜拜~
2013-6-16 13:23
0
雪    币: 1042
活跃值: (500)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
支持下,共享精神。
2013-6-16 20:41
0
雪    币: 139
活跃值: (38)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
支持楼主
2013-6-16 21:02
0
雪    币: 257
活跃值: (67)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
17
开源的东西一定要支持一下...
2013-6-16 21:08
0
雪    币: 25
活跃值: (477)
能力值: (RANK:20 )
在线值:
发帖
回帖
粉丝
18
楼主啊  现在都多少你这样的工具了,来跟我做聊天软件吧,你这个铁定没前途,没点创新,单纯的练技术,你能超越XUETR吗?
2013-6-16 21:22
0
雪    币: 371
活跃值: (72)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
19
帮顶................
2013-6-16 21:38
0
雪    币: 350
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
好吧,就当是纯粹练手吧~
2013-6-16 22:46
0
雪    币: 227
活跃值: (66)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
21
真的很不错,看似简单,看似陈旧的技术,但真的自己写一下就知道其中滋味。
谢谢楼主,下一份来学习~
希望版主能加精
2013-6-16 22:54
0
雪    币: 135
活跃值: (106)
能力值: ( LV2,RANK:140 )
在线值:
发帖
回帖
粉丝
22
还是支持下, 虽然说原理大家都看款款而谈,但是要实在写出来还是很大一工程, 佩服lz的勇气和毅力。
2013-6-17 18:40
0
雪    币: 2028
活跃值: (1096)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
俺们水平不够,下载保存,多谢分享.
2013-6-17 20:41
0
雪    币: 296
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
拍照留念。。
2013-6-17 21:16
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
代码写的很漂亮~ 潜水多年 真心顶  还在拜读中
2013-6-24 00:36
0
游客
登录 | 注册 方可回帖
返回
//