首页
社区
课程
招聘
[原创]inline hook NtQuerySystemInformation 保护进程
发表于: 2009-7-15 15:18 16580

[原创]inline hook NtQuerySystemInformation 保护进程

2009-7-15 15:18
16580

今晚又这么无聊,听着《那些花儿》有点想哭,放假这几天真是无聊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了哇,(听起来好像好衰,但有什么办法呢,现实就是这样)
下面代码奉上


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 7
支持
分享
最新回复 (17)
雪    币: 709
活跃值: (2420)
能力值: ( LV12,RANK:1010 )
在线值:
发帖
回帖
粉丝
2
2年的时间,你就搞个Inline Hook SSDT
2009-7-15 15:22
0
雪    币: 1024
活跃值: (240)
能力值: ( LV12,RANK:310 )
在线值:
发帖
回帖
粉丝
3
代码完全不懂 思路还是挺清晰的
2009-7-15 15:26
0
雪    币: 290
活跃值: (20)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
这种方式最多可以骗下任务管理器
2009-7-15 16:02
0
雪    币: 290
活跃值: (20)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
而且你的Inline 效率并不高也不安全
2009-7-15 16:03
0
雪    币: 243
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
scm
6
请问一下,什么叫“效率并不高也不安全”呀?请问怎样才是效率并高和安全呢?
2009-7-15 16:55
0
雪    币: 290
活跃值: (20)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7
楼主的inline 需要反复修改函数头部几个字节代码
2009-7-15 17:10
0
雪    币: 7651
活跃值: (523)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
8
不知道这种反复改的Inline方式谁想出来的,太挫…还有,针对ZwQuerySystemInformation最好是用DKOM方式~
2009-7-15 17:48
0
雪    币: 375
活跃值: (12)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
9
确实不安全。
调用得如此频繁的函数。。。不应该这样Hook
2009-7-15 18:31
0
雪    币: 284
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
这代码,很好很强大。感谢楼主发布,学习了
2009-7-15 21:31
0
雪    币: 722
活跃值: (123)
能力值: ( LV12,RANK:300 )
在线值:
发帖
回帖
粉丝
11
问题大家都说得差不多了,我说个无伤大雅但看起来有点别扭的问题:
ZHENZHENFEIFEI_INLINEHOOK_KERNEL_DispatchXXXX……
有必要搞这么长的函数名吗?!
2009-7-16 03:02
0
雪    币: 160
活跃值: (209)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
人的侧重点不一样.估计人家重点不是搞安全的吧.
2009-7-16 11:32
0
雪    币: 8211
活跃值: (2801)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
13
那个啥。。。

但愿楼主是笔下之误。。。

cli
mov eax,cr0
and eax,0fffeffffh
mov cr0,eax
修改前5个字节  //这里加这句话太不应该了吧。。。这几条指令是准备关闭CR0。以欺骗内存只读访问。。(并且非最好的。MDL比它稳定)。。。并非修改前5字节。
mov eax,cr0
or eax,not 0fffeffffh
mov cr0,eax
sti
2009-7-16 23:37
0
雪    币: 129
活跃值: (31)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
ZHENZHENFEIFEI_INLINEHOOK_KERNEL       不是吧,LZ的工程名这么长啊,好累啊!!

InLine HOOK这样反复的改函数头,效率不高,而且也不稳定吧..

lpspi->ProcessId = 123;

还有这个,改的PID是123,貌似的我记得PID没有是单数的吧,我好象还没看到过单数的PID,哈哈...太值得怀疑这PID了

不过还不错,代码还能看懂,方法有点挫,思路值得学习!
2009-7-17 12:15
0
雪    币: 6
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
没关系咯~ 大牛你当年不是连C++都学不下去嘛~~
2009-8-18 14:58
0
雪    币: 522
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
16
思路有点意思
不过现在大家都是直接操作对象了 pid可能只有任务管理器还在用吧。
2009-8-18 21:18
0
雪    币: 205
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
看的我头晕。。。
2010-1-9 00:59
0
雪    币: 773
活跃值: (442)
能力值: ( LV9,RANK:200 )
在线值:
发帖
回帖
粉丝
18
轩辕问的问题 太正确了,不看不知道,一看吓一跳
2010-1-11 10:23
0
游客
登录 | 注册 方可回帖
返回
//