/process-guard

Rootkit。 进程监控。

Primary LanguageC

process-guard

Rootkit。 进程监控。

功能介绍

活动进程列表

内核态下通过直接操作内核对象的方式(DKOM)获得所有活动的进程, 用户态下通过EnumProcesses函数获得用户态下能够获得的所有活动的进程。 通过对比两种方式获得进程列表,可以知道是否有进程被隐藏,并给出相应提示。

内核态是通过遍历与进程相关联的句柄表ObjectTable)来获得进程列表的, 这样不仅可以找出被各种挂钩方式隐藏起来的进程还可以找出直接操作EPROCESS进行脱链隐藏的进程。

为了方便测试,添加了通过DKOM隐藏进程的功能。

该部分功能总结:

  • 获取活动进程列表
  • 找出被隐藏的进程
  • 隐藏特定(进程名)的进程

监控进程加载可执行文件

内核态下通过SSDT挂钩ZwCreateSection函数完成对特定进程加载可执行文件的监控。

功能总结:

  • 监控指定(进程名)的进程加载可执行文件的操作

自动加载、卸载驱动程序

使用SCM组件相关的API完成驱动的加载和卸载工作。

外观

用户态下与用户交互的是一个“控制台程序”,没有窗口,通过几个特定的指令发送命令,消息显示也十分简陋。

指令说明

  • help --显示帮助信息
  • ls --显示进程列表
  • guard --监控相应的进程
  • hide --隐藏相应的进程
  • load --手动加载驱动(当自动加载失败时)
  • unload --手动卸载驱动(程序正常退出会自动卸载)
  • exit --退出程序

注:

  • <process name>不是完全匹配的,只要进程名前缀与<process name>完全匹配就算匹配成功
  • <process name>最长14个字符,之后的字符被截断(这是由EPROCESS中的char ImageFileName[15]决定的)
  • 监控过程中使用组合键<Ctrl-C>可以停止监控
  • 监控过程,用户态程序采用轮询方式获取信息