上面说过了隐藏进程,这篇博客我们就简单描述一下暴力搜索进程。

一个进程要运行,必然会加载到内存中,断链隐藏进程只是把EPROCESS从链表上摘除了,但它还是驻留在内存中的。这样我们就有了找到它的方法。

在内核中,传入进程ID,通过ZwOpenProcess得到句柄,再传入句柄,通过ObReferenceObjectByHandle,可以获得EPROCESS,既然获得了EPROCESS,问题就迎刃而解了。

既可以选择用加偏移的方法得到进程名,也可以用PsGetProcessFileName来获取进程名。这样就得到了进程的信息。

所以,我们从0枚举到一个很大的数,比如100000(我们所见过的进程ID没有大过100000的),作为进程ID,为了提高效率,可以只把4的倍数作为进程ID(进程ID都是4的倍数),在Ring3层通过OpenProcess打开,如果得到的句柄不为空,在将其ID传入Ring0层,通过上面的方法,就可以搜索出内存中的所有进程。

下面是关键部分源码:

BOOLEAN
GetProcessImageNameByProcessID(/*IN*/ULONG ulProcessID,/*OUT*/char* szProcessImageName,/*OUT*/ULONG* ulProcessNameLen)
{
CLIENT_ID Cid;
HANDLE hProcess;
NTSTATUS Status;
OBJECT_ATTRIBUTES oa;
PEPROCESS EProcess = NULL; Cid.UniqueProcess = (HANDLE)ulProcessID;
Cid.UniqueThread = ; InitializeObjectAttributes(&oa,,,,); Status = ZwOpenProcess(&hProcess,PROCESS_ALL_ACCESS,&oa,&Cid); if (!NT_SUCCESS(Status))
{
return FALSE;
} Status = ObReferenceObjectByHandle(hProcess,FILE_READ_DATA,,
KernelMode,&EProcess, ); if (!NT_SUCCESS(Status))
{ ZwClose(hProcess);
return FALSE;
} ObDereferenceObject(EProcess); //上面用过ObReferenceObjectByHandle,所以这里要解一次引用计数 *ulProcessNameLen = strlen((const char*)PsGetProcessImageFileName(EProcess)); memcpy(szProcessImageName,(const char*)PsGetProcessImageFileName(EProcess),*ulProcessNameLen);
DbgPrint("%s\r\n",szProcessImageName); ZwClose(hProcess);
}
 

枚举进程——暴力搜索内存(Ring0)的更多相关文章

  1. ACM 暴力搜索题 题目整理

    UVa 129 Krypton Factor 注意输出格式,比较坑爹. 每次要进行处理去掉容易的串,统计困难串的个数. #include<iostream> #include<vec ...

  2. hdu 4740 The Donkey of Gui Zhou(暴力搜索)

    题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=4740 [题意]: 森林里有一只驴和一只老虎,驴和老虎互相从来都没有见过,各自自己走过的地方不能走第二次 ...

  3. hdu 1427 速算24点 dfs暴力搜索

    速算24点 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Problem De ...

  4. 随手练——洛谷-P1151(枚举与暴力搜索)

    枚举 #include <iostream> using namespace std; int main() { ; cin >> k; ; i < ; i++) { ) ...

  5. [luogu 1092] 虫食算 (暴力搜索剪枝)

    传送门 Description Input 包含四行. 第一行有一个正整数 (N≤26). 后面的三行,每行有一个由大写字母组成的字符串,分别代表两个加数以及和.这3个字符串左右两端都没有空格,从高位 ...

  6. HDU 3131 One…Two…Five! (暴力搜索)

    题目链接:pid=3131">HDU 3131 One-Two-Five! (暴力搜索) 题意:给出一串数字,要求用加,减,乘,除(5/2=2)连接(计算无优先级:5+3*6=8*6= ...

  7. 吴裕雄 python 机器学习——模型选择参数优化暴力搜索寻优GridSearchCV模型

    import scipy from sklearn.datasets import load_digits from sklearn.metrics import classification_rep ...

  8. POJ 1129:Channel Allocation 四色定理+暴力搜索

    Channel Allocation Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 13357   Accepted: 68 ...

  9. 「状压DP」「暴力搜索」排列perm

    「状压DP」「暴力搜索」排列 题目描述: 题目描述 给一个数字串 s 和正整数 d, 统计 sss 有多少种不同的排列能被 d 整除(可以有前导 0).例如 123434 有 90 种排列能被 2 整 ...

随机推荐

  1. 快速开启MySQL慢日志查询的方法

    MySQL慢日志查询对于很多刚接触MySQL数据的新人来说比较陌生,下面就为您介绍MySQL慢日志查询的用法和好处,供您参考.  mysql有一个功能就是可以log下来运行的比较慢的sql语句,默认是 ...

  2. JAVA 员工管理系统(用抽象类实现),简易版。

    package Demo513; /* 定义一个Employee类,该类包含: private 成员变量name,number,birthday,其中birthday为MyDate类的对象: abst ...

  3. My1stServlet

    Servlet可以看做是一个嵌套了Html代码的Java类: 1.首先创建一个Servlet类,例子如下 import java.io.PrintWriter; import javax.servle ...

  4. SpringBoot 数据库操作 增删改查

    1.pom添加依赖 <!--数据库相关配置--> <dependency> <groupId>org.springframework.boot</groupI ...

  5. [Java]Eclipse无法import “com.sun.management.OperatingSystemMXBean”的解决方法

    背景: 当使用jdk的自带的API获取系统信息时,代码中import “com.sun.management.OperatingSystemMXBean”出现报错. 解决方法: Eclipse默认把这 ...

  6. SharePoint 2013 安装配置(3-1)

    在第二部分中,我向您展示了如何在Windows Server 2012 R2 for SharePoint 2013上设置Active Directory域服务.现在我们应该能够在Active Dir ...

  7. BandwagonHost 5个数据中心/机房Ping速度测试亲自体验

    我们选择Bandwagonhost服务器的原因之一在于有5个数据中心,而且与众多其他VPS不同之处在于可以自己后台切换机房和IP,这样我们 在遇到不满意的速度时候,可以自己切换其他机房更换,而且对于有 ...

  8. codevs 4093 EZ的间谍网络

    时间限制: 10 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题目描述 Description 由于外国间谍的大量渗入,学校安全正处于高度的危机之中.YJY决定挺身而作出反抗 ...

  9. Python3获取大量电影信息:调用API

    实验室这段时间要采集电影的信息,给出了一个很大的数据集,数据集包含了4000多个电影名,需要我写一个爬虫来爬取电影名对应的电影信息. 其实在实际运作中,根本就不需要爬虫,只需要一点简单的Python基 ...

  10. Page_Load与sender -- PostBack是由哪个 ASP.NET控件引起 ?

    Page_Load与sender -- PostBack是由哪个 ASP.NET控件引起 ? 之前有讨论过ASP.NET Web Form "事件"里面的 "sender ...