Anti Rookit -- 检测隐藏进程

Anti Rookit 一:检测隐藏进程

引言

检测隐藏进程除了众所周知的枚举进程ID之外,还有枚举句柄表的方式。不过今天给大家带来的是第三种方法。

探究

应用层通过接口 C r e a t e P r o c e s s \textcolor{cornflowerblue}{CreateProcess} CreateProcess创建进程,在内部会调用到 K e r n e l b a s e ! C r e a t e P r o c e s s I n t e r n a l \textcolor{orange}{Kernelbase!CreateProcessInternal} Kernelbase!CreateProcessInternal函数,该函数会调用 n t d l l ! N t C r e a t e U s e r P r o c e s s \textcolor{orange}{ntdll!NtCreateUserProcess} ntdll!NtCreateUserProcess转到内核执行创建进程,成功后会向csrss进程发送进程创建的消息。

在这里插入图片描述

​ CreateProcessInternal内部

C s r C l i e n t C a l l S e r v e r \textcolor{cornflowerblue}{CsrClientCallServer} CsrClientCallServer在非csrss进程内是通过LPC向csrss通讯的。在csrss进程内,由 C s r A p i R e q u e s t T h r e a d \textcolor{cornflowerblue}{CsrApiRequestThread} CsrApiRequestThread函数接收并处理,最终由 C s r p C r e a t e P r o c e s s \textcolor{cornflowerblue}{CsrpCreateProcess} CsrpCreateProcess函数负责处理新进程创建事件。

在这里插入图片描述

​ CsrpCreateProcess内部

函数会将进程信息链入一个符号为 C s r R o o t P r o c e s s \textcolor{red}{CsrRootProcess} CsrRootProcess的链表中。链表节点结构如下

typedef struct _CSR_PROCESS
{struct _CLIENT_ID ClientId; struct _LIST_ENTRY ListLink; // 指向下一个_CSR_PROCESSstruct _LIST_ENTRY ThreadList; // 指向_CSR_THREADstruct _CSR_NT_SESSION NtSession; VOID ClientPort; CHAR ClientViewBase; CHAR ClientViewBounds; VOID ProcessHandle;ULONG SequenceNumber; ULONG Flags;ULONG DebugFlags; ULONG ReferenceCount; ULONG ProcessGroupId; ULONG ProcessGroupSequence;ULONG LastMessageSequence; ULONG NumOutstandingMessages;ULONG ShutdownLevel;ULONG ShutdownFlags;struct _LUID Luid; PVOID ServerDllPerProcessData[1];
} CSR_PROCESS, *PCSR_PROCESS;

对于检测隐藏的进程,我们只需要关注该结构的ClientIdListLink两个字段就可以了。于是事情就变得很明显了,我们只需要遍历这个双向链表就能得到系统创建的所有进程。

不过这个符号并未导出,我们需要通过特征码去定位。以win10 1909 x64为例

我采用的定位方式是先取得 c s r s r v ! C s r E x e c S e r v e r T h r e a d \textcolor{orange}{csrsrv!CsrExecServerThread} csrsrv!CsrExecServerThread函数地址,因为是导出函数,所以很容易获取地址。然后观察该函数的反汇编代码:

在这里插入图片描述

​ CsrExecServerThread内部

于是特征码为: 48 8 B 0 D C C C C C C C C \textcolor{orange}{48\ 8B\ 0D\ CC\ CC\ CC\ CC} 48 8B 0D CC CC CC CC。其他版本系统方法如是,这里不赘述了。

因为csrss是保护进程,应用层无法读取它的内存数据,所以需要放到内核去做。

关键代码

VOID EnumCsrssProcessList(PCSR_PROCESS CsrProcessList)
{PEPROCESS pProcess = NULL;NTSTATUS ntStatus;PUNICODE_STRING uszProcName;PLIST_ENTRY pListHdr;PLIST_ENTRY pNext;__try{ProbeForRead(CsrProcessList, sizeof(CSR_PROCESS), 1);pListHdr = (PLIST_ENTRY)&CsrProcessList->ListLink;pNext = pListHdr->Blink;while (pListHdr != pNext){PCSR_PROCESS pCsrProc = CONTAINING_RECORD(pNext, CSR_PROCESS, ListLink);ProbeForRead(pCsrProc, sizeof(CSR_PROCESS), 1);ntStatus = PsLookupProcessByProcessId(pCsrProc->ClientId.UniqueProcess, &pProcess);if (NT_SUCCESS(ntStatus)){ntStatus = SeLocateProcessImageName(pProcess, &uszProcName);if (NT_SUCCESS(ntStatus)){DbgPrint("Pid: %x -- %wZ\n",PsGetProcessId(pProcess) ,uszProcName);ExFreePool(uszProcName);}ObDereferenceObject(pProcess);}pNext = pNext->Blink;}}__except (EXCEPTION_EXECUTE_HANDLER){DbgPrint("[!] An exception occurred! Exception code = %I32x\n", GetExceptionCode());}}

完整代码请到我的github仓库中查看:https://github.com/singlefreshBird/Rootkit/

演示

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/4253.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Linux系统编程】26.信号、kill、alarm、setitimer

目录 信号 信号共性 信号特质 产生信号 信号相关概念 默认处理动作 信号4要素 常规信号 ​编辑 注意 kill 参数pid 测试代码1 测试结果 测试代码2 测试结果 alarm 参数seconds 返回值 取消闹钟 测试代码3 测试结果1 测试结果2 ​编辑 setitimer 参数…

BIO、NIO与AIO

一 BIO 同步并阻塞(传统阻塞型),服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理. BIO(Blocking I/O,阻塞I/O)模式是一种网络编程中的I/O处理模式。在BIO模式中&#xf…

物联网实战--平台篇之(一)架构设计

本项目的交流QQ群:701889554 物联网实战--入门篇https://blog.csdn.net/ypp240124016/category_12609773.html 物联网实战--驱动篇https://blog.csdn.net/ypp240124016/category_12631333.html 一、平台简介 物联网平台这个概念比较宽,大致可以分为两大类&#x…

vue的axios使用!

什么是axios? 1.axios是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中, 也是 vue 官方推荐使用的 http 库;封装axios,一方面为了以后维护方便,另一方面也可以对请求进行自定义处理。 如何安装? npm in…

HTTP和HTTPS的区别及HTTPS的工作原理

一、HTTP和HTTPS的区别 1、安全性 HTTP:HTTP是明文传输的,这意味着数据在传输过程中不加密,容易受到中间人攻击。敏感信息,如密码和信用卡号,如果通过HTTP传输,可能会被窃取。HTTPS:HTTPS使用SSL(Secure Sockets Lay…

网络攻击日益猖獗,安全防护刻不容缓

“正在排队登录”、“账号登录异常”、“断线重连”......伴随着社交软件用户的一声声抱怨,某知名社交软件的服务器在更新上线2小时后,遭遇DDoS攻击,导致用户无法正常登录。在紧急维护几小时后,这款软件才恢复正常登录的情况。 这…

有哪些好用电脑端时间定时软件?桌面日程安排软件推荐 桌面备忘录

随着现代生活节奏的加快,人们对于时间管理和任务提醒的需求越来越大。为了满足这一需求,市场上涌现出了众多桌面便签备忘录软件,它们不仅可以帮助我们记录待办事项,还能定时提醒我们完成任务。在这篇文章中,我将为大家…

WebGIS面试题(第六期)-GeoServer

WebGIS面试题(第六期) 以下题目仅为部分题目,全部题目在公众号 {GISer世界} ,答案仅供参考!!! 因为本人之前做过相关项目用到了GeoServer,因此在简历上写了熟悉GeoServer。所以在相关面试中都有问到,所以我…

【Unity动画系统】详解Root Motion动画在Unity中的应用(一)

Root Motion动画与普通动画的区别 普通动画:动画文件里记录的是物体的绝对坐标和方向,在播放动画时,Unity会根据Animation中记录的值,直接修改游戏对象的坐标和方向,每一帧的坐标和方向都是通过插值计算得出来的&…

2013NOIP普及组真题 1. 计数问题

线上OJ: 一本通:http://ybt.ssoier.cn:8088/problem_show.php?pid1961 核心思想: 本来想找规律,后来发现本题的数据范围不大,n为 1 0 6 10^6 106,即使每一位都判断一次,最坏的情况下时间复杂度…

ubuntu20部署ceph17

# 配置3个节点ubuntu 20操作系统源 cat /etc/apt/sources.list deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse deb http://mirrors.aliyun.co…

Int4:Lucene 中的更多标量量化

作者:来自 Elastic Benjamin Trent, Thomas Veasey 在 Lucene 中引入 Int4 量化 在之前的博客中,我们全面介绍了 Lucene 中标量量化的实现。 我们还探索了两种具体的量化优化。 现在我们遇到了一个问题:int4 量化在 Lucene 中是如何工作的以…

git clone 报错 记录

问题 $ git clone http://***.git Cloning into … remote: Enumerating objects: 110841, done. remote: Counting objects: 100% (110841/110841), done. remote: Compressing objects: 100% (46725/46725), done. error: RPC failed; curl 18 transfer closed with outstand…

微服务之并行与分布式计算

一、概述 1.1集中式系统vs分布式系统 集中式系统 集中式系统完全依赖于一台大型的中心计算机的处理能力,这台中心计算机称为主机(Host 或 mainframe ),与中心计算机相连的终端设备具有各不相同非常低的计算能力。实际上大多数终…

额外加餐-关于使用bitmap来解决缓存穿透的方案

[外链图片转存中…(img-OyLw7puy-1712760065604)] 代码 UserController GetMapping("/sign/count") public Result signCount(){return userService.signCount(); }UserServiceImpl Override public Result signCount() {// 1.获取当前登录用户Long userId User…

[前端] todoList制作

知识点回顾 后代选择器 可以使用多个选择器每个选择器之间用空格分开。只要是后代就会被选择如 <style>div a{color: red;} </style> <div><a href"">我是儿子</a><p><a href"">我是孙子</a></p>…

【ARM 裸机】BSP 工程管理

回顾一下上一节&#xff1a;【ARM 裸机】NXP 官方 SDK 使用&#xff0c;我们发现工程文件夹里面各种文件非常凌乱&#xff1b; 那么为了模块化整理代码&#xff0c;使得同一个属性的文件存放在同一个目录里面&#xff0c;所以学习 BSP 工程管理非常有必要。 1、准备工作 新建…

校车车载4G视频智能监控系统方案

一、项目背景 随着社会的快速发展&#xff0c;校车安全问题日益受到人们的关注。为了提高校车运营的安全性&#xff0c;保障学生的生命安全&#xff0c;我们提出了一套校车车载4G视频智能监控系统方案。该系统能够实时监控校车内部和外部环境&#xff0c;及时发现并处理潜在的…

沪深websocket level2/level1行情推送接入示例

行情接入包 golang packge: package hangqingimport ("bufio""bytes""compress/flate""encoding/json""github.com/gorilla/websocket""io/ioutil""log""net/http""net/url"&quo…

【方案解决思路】RPC服务器不可用

当在SCCM服务器上使用wmic /node:<客户端IP> process list命令时&#xff0c;如果遇到“RPC服务器不可用”的错误&#xff0c;这通常意味着SCCM服务器无法通过RPC协议与远程客户端通信。以下是一些可能的解决步骤&#xff1a; 检查远程客户端的RPC服务&#xff1a; 确保远…