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

一个进程要运行,必然会加载到内存中,断链隐藏进程只是把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);
}
 

最新文章

  1. java中字节流与字符流的区别
  2. Webstorm 下的Angular2.0开发之路
  3. http://blog.csdn.net/krislight/article/details/9391455
  4. reduce方法
  5. 用#define来实现多份近似代码 - map,set中的应用
  6. Javascript模块化编程(一):模块的写法 作者: 阮一峰
  7. 从零开始学习Node.js例子四 多页面实现数学运算
  8. iis php5.3.8 默认文档无效 404 - 找不到文件或目录
  9. July 18th, Week 30th Monday, 2016
  10. [转]JAVA程序员一定知道的优秀第三方库(2016版)
  11. Debug.print的用法
  12. Differential Geometry之第三章曲面的局部理论
  13. HW4.8
  14. HDU5311
  15. oschina应用工具
  16. 关于微信小程序拒绝授权后,重新授权并获取用户信息
  17. ES6模块之export和import详解
  18. Java提高班(三)并发中的线程同步与锁
  19. Beta冲刺(4/5)(麻瓜制造者)
  20. Pyqt5自定义浏览器

热门文章

  1. SpringBoot 2.0中SpringWebContext 找不到无法使用的问题解决
  2. 死磕 java原子类之终结篇(面试题)
  3. Linux下软件安装的四种方式
  4. redis-----字符串操作的复杂度
  5. Windows Azure 配置Active Directory 主机(1)
  6. python3操作excel02(对excel的基础操作,进行简单的封装)3
  7. python之删除指定目录指定日期下的日志文件
  8. LoadRunner使用(1)
  9. C# XML序列化/反序列化类XmlSerializer使用示例
  10. CSS中padding、margin两个重要属性的详细介绍及举例说明