用户层的进程隐藏

用户层的进程隐藏

​ 利用 MiniHook 框架对 ZwQuerySystemInformation 进行 InlineHook,实现进程隐藏

github 地址SomaFon/ProcessHider

总体思路

1.利用 GetModuleHandle 获得 ntdll.dll 地址

2.调用 GetProcAddress 获得 ZwQuerySystemInformation 地址

3.对 ZwQuerySystemInformation 进行 Hook

4.FakeZwQuerySystemInformation 的实现

1)根据目标进程名获得进程 ID

2)跳回内存槽执行原函数

status = __OriginalZwQuerySystemInformation(SystemInformationClass, SystemInformation, SystemInformationLength, ReturnLength);

3)对原函数进行后过滤

​ ①判断是否是查询进程信息SystemProcessInformation

​ ②循环进程信息结构体链表,判断目标进程ID是否存在,如果存在,断链实现隐藏

4)返回

相比普通Hook,使用MiniHook有什么优势

1.不用考虑 Hook 重入问题(普通做法在 fake 函数里还需进行 unhook,再执行原函数,最后再执行 hook)

2.minihook 的常见优势

缺点

1.使用minihook框架,生成的dll太大,容易暴露

注意点

1.minihook使用时要进行初始化

2.ZwQuerySystemInformation的测试

3.minihook传参记得注意不要加&

4.def文件不能添加现有,需要重新创建,不然导出函数名字会乱

5.Fake函数调试方法:

1)调试被注入的dll

2)在minihook项目内写测试程序(调用原函数枚举进程的程序)

改进点

1.使用minihook框架

2.通过进程名获得进程ID比硬写进程ID方便

测试

​ 全局钩子注入DLL方式,演示程序DLL注入到任务管理器当中。在注入前,打开任务管理器,查看到520.exe处于可见状态。运行注入程序之后,任务管理器中的520.exe进程消失,这表明进程隐藏成功

注入前

image-20240303161258093

注入后

image-20240303161320590

posted @ 2024-03-03 16:23  修竹Kirakira  阅读(288)  评论(0编辑  收藏  举报