首页
社区
课程
招聘
[原创]进程隐藏技术
发表于: 2021-10-22 16:40 39427

[原创]进程隐藏技术

2021-10-22 16:40
39427

本次实现是在WIN7 X86系统上进行,实验要达到的目的就是实现进程的隐藏,以让任务管理器查不到要隐藏的进程。这里要隐藏的程序是一个简单的HelloWord弹窗程序,程序名是demo.exe。

用户层的进程隐藏的实现主要是通过HOOK任务管理器的ZwQuerySystemInformation函数。之所以是这个函数,是因为无论是通过EnumProcess函数还是CreateToolhelp32Snapshot函数来查询进程,它们最终都会调用ntdll.dll中的ZwQuerySystemInformation函数来实现功能。

所以只要采用DLL注入技术,将DLL注入到要HOOK的进程中,并在DLL加载的时候执行HOOK ZwQuerySystemInformation函数就可以实现进程隐藏。关于如何实现DLL注入请参考这篇常见的几种DLL注入技术。而对ZwQuerySystemInformation的HOOK采取的是Inline Hook的技术。如何实现Inline Hook请参考这篇内核层的三种HOOK技术

在IDA中可以看到ZwQuerySystemInformation的实现如下。由于它最开始的五个字节是为eax赋值调用号,所以其实可以根据热补丁的思想,对这五个字节进行HOOK。然后在HOOK完要执行的函数里面对eax进行重新赋值以后在跳转到下一行代码也就是mov edx, 0x7FFE0300进行执行。

由于之前写过热补丁技术,这里的话就用传统的HOOK步骤。

使用GetProcAddress函数获取要HOOK的函数的地址,并将其保存

修改前五字节的页属性为可读可写可执行

将这五个字节读出来备份起来

计算从需要跳转的大小,公式是: 要跳转的目的地址-(HOOK的函数的地址 + 5)

将计算好距离的跳转指令写入函数的这五个字节

还原页属性

UnHook则非常简单

判断函数是否被HOOK

修改函数地址页属性为可读可写可执行

HOOK的时候保存的五个字节写回到函数地址

恢复函数地址页属性

在完成HOOK以后执行的函数内部就需要以下的步骤来让程序正常运行

首先调用UnHook将函数恢复

调用原函数获取返回结果,将要隐藏的进程隐藏掉

再次对程序进行HOOK操作

至于要如何将进程隐藏起来,就需要首先看看ZwQuerySystemInformation在文档中的定义了

 而SYSTEM_INFORMATION_CLASS,在文档中的定义如下

当它指定为SystemProcessInformation(0x5)的时候,就表示要检索系统的进程信息。函数将会得到所有的进程信息并把这些得到的进程信息的内容保存到SYSTEM_PROCESS_INFORMATION结构数组,数组中的每一个元素都代表了一个进程信息。而数组的首地址将会保存到第二个参数SystemInformation中。

而SYSTEM_PROCESS_INFORMATION在文档中的定义如下

其中的NextEntryOffset代表的是下一个SYSTEM_PROCESS_INFORMATION元素距离现在这个SYSTEM_PROCESS_INFORMATION元数的偏移。

而UniqueProcessId就是查询到的这个进程的PID。根据它就可以找到要隐藏的进程,并将它从这个结构体数组中断开,也就是要隐藏进程的SYSTEM_PROCESS_INFORMATION的上一个元数的NextEntryOffset加上当前SYSTEM_PROCESS_INFORMATION的NextEntryOffset。具体代码实现如下

在实现注入HOOK函数之前可以看到任务管理器可以查看到打开的demo.exe进程

完成注入,HOOK成功之后就看不到了

在内核中每一个进程都有对应的一个EPROCESS结构体,在Windows7下这个结构体中的部分成员如下,其中0x16C保存了进程名字的指针。通过这个指针可以获得当前EPROCESS表示的是哪一个进程


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2021-11-30 10:01 被1900编辑 ,原因:
收藏
免费 12
支持
分享
打赏 + 20.00雪花
打赏次数 1 雪花 + 20.00
 
赞赏  hey james   +20.00 2022/01/26 我看不懂但我大为震惊,请大哥喝奶茶
最新回复 (22)
雪    币: 299
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
2
这么好的帖子
2021-10-24 14:18
0
雪    币: 1195
活跃值: (419)
能力值: ( LV3,RANK:39 )
在线值:
发帖
回帖
粉丝
3
内核层那个,通过遍历全局句柄表还是能查出来你这个隐藏的,,要是给句柄表也做个伪装就更好了,嘿嘿
2021-10-25 16:56
0
雪    币: 4714
活跃值: (4250)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
内核通过句柄是去拿EPROCESS 那么通过其他方法获得EPROCESS还是一样可以获取到 
2021-10-25 22:47
0
雪    币: 22411
活跃值: (25361)
能力值: ( LV15,RANK:910 )
在线值:
发帖
回帖
粉丝
5
只是相对而言 想要找到当然是有办法的
2021-10-25 23:11
0
雪    币: 3144
活跃值: (1624)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
内核层WIN7-WIN10通用吗,会触发PG不
2021-10-26 04:31
0
雪    币: 22411
活跃值: (25361)
能力值: ( LV15,RANK:910 )
在线值:
发帖
回帖
粉丝
7
shun其自然 内核层WIN7-WIN10通用吗,会触发PG不
你可以试一下
2021-10-26 09:01
0
雪    币: 3144
活跃值: (1624)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
不用想肯定触发PG
2021-10-26 10:22
0
雪    币: 865
活跃值: (1613)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
9
可以可以,学到了
2021-11-2 17:49
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
10
太干了,够我啃了.感谢
2021-11-2 22:48
0
雪    币: 1
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
11
WIN7 WIN10 X64测试蓝屏  蓝屏代码是pListEntry->Blink->Flink = pListEntry->Flink; 
WIN7偏移是 0XE0  WIN10偏移是+0x350 ProcessListEntry : _LIST_ENTRY
2021-11-8 11:18
1
雪    币: 22411
活跃值: (25361)
能力值: ( LV15,RANK:910 )
在线值:
发帖
回帖
粉丝
12
来自星星的米 WIN7 WIN10 X64测试蓝屏 蓝屏代码是pListEntry->Blink->Flink = pListEntry->Flink; WIN7偏移是 0XE0 WIN1 ...
够认真,可以
2021-11-8 15:32
0
雪    币: 1
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
14
1900 够认真,可以
那天搞错了,哈哈!偏移弄错了,不过确实也触发了PG 。 感谢你的好文
2021-11-12 15:37
0
雪    币: 23
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
15
蓝屏警告,不考虑蓝屏其实不用这么保守了。直接替换啊,甚至删除都可以的,当然结束时蓝屏
2021-11-25 21:50
0
雪    币: 8
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
16
蓝屏警告,不考虑蓝屏其实不用这么保守了。直接替换啊,甚至删除都可以的,当然结束时蓝屏
2022-1-25 14:31
0
雪    币: 160
活跃值: (19)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
好帖子,谢谢
2022-1-26 14:55
0
雪    币: 209
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
18
请问 virtualProtect error 487 是我哪里操作不当了吗。。win 10 x64
2022-3-5 15:37
0
雪    币: 1558
活跃值: (3437)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
内核进程隐藏太难了,各种链表多的很,随便找个都能找出来,进程伪装还是有可能骗过去的
2022-3-5 15:55
0
雪    币: 10
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
20
rookkit就好了
2022-3-7 07:15
0
雪    币: 1551
活跃值: (1855)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
内核容易蓝屏,win7 和win10 总有个蓝屏
2022-6-21 16:09
0
雪    币: 300
活跃值: (2452)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
mark
2022-6-21 16:38
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
23
我遍历线程列表找其所属进程也能看到
2022-10-9 10:44
0
游客
登录 | 注册 方可回帖
返回
//