inline hook NtQuerySystemInformation 保护进程
今晚又这么无聊,听着《那些花儿》有点想哭,放假这几天真是无聊ing,正好前几天学习了内核的 inline hook,不如现在写点东西来总结一下吧。
本人对内核的认识也不多,对内核的认识是在 2007 年离别的泪花中开始的,到现在一眨眼就两年啦,真快吖哈!不过认识的也不多,想那年还以为在内核中就是实模式,嘿嘿、你看我有多么的傻!嘿嘿、2 年过去了,梁老师现在还好吧,我很记得 2 年前的那个散学礼,当梁老师说不做我们的班主任了的时候,我还静静的哭了几分钟呢,有没有人看见我就不知到了,不过也正是这离别的泪花让我开始了内核的“不归路”,这儿说的内核是指 Windows 的内核,众周所知 Windows 也就 ring0 和 ring3 组成的吧,ring0 就是内核了,因为 Windows 的内核运行在 ring0级别的哈....
上面又扯了这么多的废话,那么下面就进入正题哈
inline hook & NtQuerySystemInformation & ring0
本文呢,是介绍一种保护进程不被结束的方法,这个方法不算新了,好旧好旧的了,其实呢,也是 hook 了某个函数来实现的,不过没有 hook NtOpenProcess 、NtTerminateProcess、KiInsertQueuApc 等函数,而是 hook 了 NtQuerySystemInformation 来保护我们的进程,NtQuerySystemInformation 是用来查询系统信息的,可以查询的系统信息有 54 种这么多,其中 ID 是 5 的话呢,就会返回一个链表,这个链表中包括了当前系统中的所以的进程名、进程ID,也就是说这个函数可以获取系统的进程列表,我们可以 hook 这个函数来隐藏进程,不过这次是保护进程,不是隐藏哦
在 ring3 中,列举进程的方法是调用 Tool32 或者 psapi 中的 EnumProcess,可是这些函数都调用了ZwQuerySystemInformation 然后在NtQuerySystemInformation,也就是我们hook NtQuerySystemInformation 就可以保护&隐藏进程了哇
hookNtQuerySystemInformation 的方法有好的,可以修改 SSDT,也可以修改函数前 5 个字节,也就是inline hook了,本文采用后者哦
在函数开始的5个字节中,改为一个 Jmp 指令,让她在调用这个函数的时候跳转到我们的函数中,我们在经过一些处理后再调用原来的****
流程如下:
cli
mov eax,cr0
and eax,0fffeffffh
mov cr0,eax
修改前5个字节
mov eax,cr0
or eax,not 0fffeffffh
mov cr0,eax
sti
这儿说下怎么样保护进程,在NtQuerySystemInformation返回的链表中包含了进程的ID,想一下如果我们把某个进程的ID改了后再返回给别人,那么别人就不会得到某个进程的正确的ID了,这样她再怎么NtOpenProcess 也没有了吧,因为她得到是一个错误的ID了哇,(听起来好像好衰,但有什么办法呢,现实就是这样)
下面代码奉上
注意:上传附件及图片大小不得大于30M。
⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途。
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。
