#ProcessHider
此工具仅允许用于渗透测试和其他白帽活动。严禁非法使用!
ProcessHider 是一款后渗透工具,旨在隐藏进程,使其不被任务管理器、Process Explorer 等监控工具发现,从而防止管理员发现 payload 进程。该工具支持 32 位和 64 位系统,能够自动检测操作系统版本并使用相应的工具版本。
ProcessHider 提供 EXE 文件或 Powershell 脚本两种形式。
此工具采用 BSD-3 许可证:
版权所有 (c) 2016, M00nRise
保留所有权利。
特此免费授予任何获得本软件及相关文档文件(“软件”)副本的人,无限制地处理本软件的权利,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售本软件副本的权利,并允许向其提供本软件的人这样做,但须满足以下条件:
上述版权声明和本许可声明应包含在本软件的所有副本或实质性部分中。
本软件按“原样”提供,不提供任何明示或暗示的担保,包括但不限于适销性、特定用途的适用性和不侵权的保证。在任何情况下,作者或版权持有人均不对因本软件或本软件的使用或其他交易而引起的任何索赔、损害或其他责任负责,无论是在合同诉讼、侵权行为还是其他方面。
要构建项目,请使用根目录下的 build-me.bat。
完整脚本有两个版本:EXE 和 Powershell。
要使用 EXE,请从 cmd 调用主文件 ProcessHider(位于 MainFile\ 下),使用以下选项:
-i - 指定要隐藏的进程 ID,用逗号分隔(不要带空格!)-n - 指定要隐藏的进程名称,用逗号分隔(同样不要空格)-x - 指定要规避的监控应用程序,除默认值(powershell.exe, taskmgr.exe, procexp.exe, procexp64.exe, perfmon.exe)之外要使用 Powershell,请使用 Powershell\Output\fullScript.ps1,参数与 exe 相同。
使用示例:
`ProcessHider -i 5454,3672 -n "chrome.exe,notepad.exe" -x "cmd.exe"`
注意:至少需要使用 -i 或 -n 中的一种。隐藏器会确保自身也被隐藏。
本项目使用了以下库和项目:
findvs 脚本取自 EasyHook:https://easyhook.github.io/
Invoke-ReflectivePEInjection 由 clymb3r 编写,可在 https://github.com/PowerShellMafia/PowerSploit/blob/master/CodeExecution/Invoke-ReflectivePEInjection.ps1 获取
Xgetopt 由 Hans Dietrich 编写,可在 http://www.codeproject.com/Articles/1940/XGetopt-A-Unix-compatible-getopt-for-MFC-and-Win32 获取
NtHookEngine 由 Daniel Pistelli 编写,可在 http://www.codeproject.com/Articles/21414/Powerful-x-x-Mini-Hook-Engine 获取
ReflectiveDLLInjection 由 Harmony Security 的 Stephen Fewer 编写,可在 https://github.com/stephenfewer/ReflectiveDLLInjection 获取
“设置全局 API 钩子的简单方法”由 Apriorit Inc 的 Sergey Podobry 编写,可在 http://www.codeproject.com/Articles/49319/Easy-way-to-set-up-global-API-hooks 获取
这些库和 VC++ 运行时均无依赖,因为它们都是静态链接的。
首先,隐藏器检查操作系统是 32 位还是 64 位,并选择正确的版本使用。然后,它启动一个守护进程,该进程会寻找被禁止的监控工具之一。当找到时,它会使用 DLL 注入来加载 payload——该 payload 钩住 NtQuerySystemInformation 的调用(操作系统工具用来枚举活动进程的方法),并从结果中删除指定的每个进程(以及守护进程)。
非常欢迎贡献。
在修改 powershell 脚本时,请确保不要在 fullScript 上操作,而是在 daemon-integration 和 Invoke-ReflectivePEInjectionLite 上操作,因为构建脚本会使用这些文件作为 fullScript 的源。
Get-Process 检索进程列表后,Powershell 有时会崩溃。tasklist.exe 调用的方法——目前它太快了(也许使用不同的 API 调用?)