云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > ssdt hook 实现进程隐藏二 - 图文

ssdt hook 实现进程隐藏二 - 图文

  • 62 次阅读
  • 3 次下载
  • 2025/7/7 9:45:14

42: //将当前这个进程(即要隐藏的进程)从 SystemInformation 中摘除(更改链表偏移指针实现)

43: pPrevProcessInfo->NextEntryOffset

+= pCurrProcessInfo->NextEntryOffset;

44: } 45: else

46: {//说明当前要隐藏的这个进程是进程链表中的最后一个 //9,三种情况, 二:被查的

ID在信息链的末尾

47: pPrevProcessInfo->NextEntryOffset = 0;

48: 49: } 50: } 51: else 52: {

53: //第一个遍历到得进程就是需要隐藏的进程 54: //10,三种情况, 三:被查的

ID在信息链的开始——又分——

if(pCurrProcessInfo->NextEntryOffset)

55: {//11,后面有节点

56: (PCHAR)SystemInformation

+=pCurrProcessInfo->NextEntryOffset;

57: } 58: else

59: {//12,后面没节点

60: SystemInformation = NULL;//所有的连都为NULL。。。

61: } 62: } 63: } 64:

65: //遍历下一个 SYSTEM_PROCESS_INFORMATION 节点 66: pPrevProcessInfo = pCurrProcessInfo;

67:

68: //遍历结束

//13,个人认为应该叫该信息节点审阅完毕,下一个

69: if(pCurrProcessInfo->NextEntryOffset) 70: {

71: pCurrProcessInfo =

(PSYSTEM_PROCESS_INFORMATION)

72: (((PCHAR)pCurrProcessInfo) +

pCurrProcessInfo->NextEntryOffset);

73: } 74: else 75: {

76: pCurrProcessInfo = NULL; 77: } 78: } 79: } 80: }

81: return rtStatus; 82: }

既然有了自己的 Hook NtQuerySystemInformation 了,自然我们就可以通过利用 SSDT 框架来实现 Hook 了,这部分的代码其实是最简单的,因为我只需要在 DriverEntry 中 Hook 掉 NtQuerySystemInformation 即可,这里需要注意的是,在执行 Hook 之前需要备份一次 SSDT,即在 DriverEntry 中最先需要备份 SSDT ~

当然为了保证系统的安全以及其他诸多方面,我们在 DriverUnload 中会将 Hook 解除掉 ~ 从下面的代码中,我们看到在安装 Hook 和解除 Hook 时参数传递进去的是 ZwQuerySystemInformation,

这样很有可能会让很多朋友认为我们在 Ring0 下的 Hook 的是 ZwQuerySystemInformation,

如果你这样认为的话,那就大错特错了,确实在 Google 上搜索出的一大堆关于 SSDT Hook 中,很多文章都说是 Hook 的 ZwQuerySystemInformation,而事实上这是大错特错的,

我们这里传入 ZwQuerySystemInformation ,是因为我们需要调用 SYS_INDEX(ZwQuerySystemInformation)

来获得 NtQuerySystemInformation 在 SSDT 中的地址所在的索引号, 然后我们根据这个索引号来 Hook NtQuerySystemInformation, 认识到这一点是非常重要的,因为我一开始也认为是 Hook 的

ZwQuerySystemInformation,从而导致蓝屏了 n 次,在这里非常鄙视那些把文章从别处拷贝过来也不加验证就乱发表的 ~ 害死人 ~ 当然也要怪自己懒 ~

5. Ring0 实现进程保护:

有了上面实现进程隐藏的基础,要再来实现进程保护,其实也就是过过场子了 ~ 进程保护呢,上面也说了,是要 Hook NtTermianteProcess 这个系统服务 ~ 由于 ZwTerminateProcess 呢,在 ntddk.h 中已经声明了,

所以在我们自己的代码中就不需要声明 ZwTermianteProcess 了,(只需要定义一个函数指针用就可以了)

而只需要声明 NtTerminateProcess 以及 Hook 函数就 OK 了 ~ 1: typedef NTSTATUS (* NTTERMINATEPROCESS)( 2: __in_opt HANDLE ProcessHandle, 3: __in NTSTATUS ExitStatus 4: ); 5:

6: NTSTATUS HookNtTerminateProcess( 7: __in_opt HANDLE ProcessHandle, 8: __in NTSTATUS ExitStatus 9: ); 10:

11: NTTERMINATEPROCESS pOldNtTerminateProcess;

至于安装 Hook 以及卸载 Hook ,都可以根据进程隐藏中的代码来完成,因为有了 SSDT Hook 框架,这一切也就变得很简单了,只要在 DriverEntry 中 InstallHook ,然后再在 DriverUnload 中 UnInstallHook 即 OK ~

下面我们重点来看一看我们自己的 Hook NtTerminateProcess 中是如何实现进程保护的 ~

进程保护呢其实也是比较简单的,因为从上面一层的调用会传递一个进程句柄下来,

而后我们可以根据这个进程句柄来获得进程的 EPROCESS 对象(进程位于执行体层得对象), 通过这个 EPROCESS 对象,我们就可以获得这个请求被结束的进程的 PID,

我们再判断这个 PID 是否是我们已经保护了的 PID,如果是的话,直接返回一个请求被拒绝即可,而如果这个 PID 未被保护,自然我们就交给原来的 NtTerminateProcess 处理即可 ~

搜索更多关于: ssdt hook 实现进程隐藏二 - 图文 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

42: //将当前这个进程(即要隐藏的进程)从 SystemInformation 中摘除(更改链表偏移指针实现) 43: pPrevProcessInfo->NextEntryOffset += pCurrProcessInfo->NextEntryOffset; 44: } 45: else 46: {//说明当前要隐藏的这个进程是进程链表中的最后一个 //9,三种情况, 二:被查的ID在信息链的末尾 47:

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com