手把手教你R0下通过EPROCESS获取进程加载模块

在R3下获取一个进程加载的相关模块儿还是比较简单的,直接通过ToolHelp32库API就能够获取到进程关联的模块儿了,但是既然已经在R0下混了再去使用R3层的东西就没什么意义了,所以这里小悠在这里将会一部一部的介绍如何在R0下通过EPROCESS结构获取到进程加载的模块.

首先这里我们先介绍一下我们通过EPROCESS查询的大概思路

①  通过EPROCESS 获取到对应的PEB 结构

②  通过PEB找到 _PEB_LDR_DATA这货

③  在_PEB_LDR_DATA内部有3个LIST_ENTRY,这也就是进程加载的模块儿信息的链表头,_PEB_LDR_DATA内部的3个链表其实只是模块儿的排列顺序不一样而已,里面的内容是一致的,本文中采用的是LoadOrder这个按照加载顺序排列的链表.

④  知道了链表头,只需要知道链表的结点的就够就行了,这里我们遍历的链表结点是_LDR_DATA_TABLE_ENTRY结构,在这个结构内部有一个FullDllName,也就是模块儿的路径,就是我们要找的东西,只要遍历链表我们就能枚举出所有的加载模块儿.

我用一幅图来描述我们的过程

从图中可以看出,只需要找到最终的那个链表遍历一下就OK了。

知道了上面的基本思路,现在我们开始动手操作了,首先准备好你的Windbg调试工具,先通过Windbg正确查找一个进程的模块儿链表,后面我在介绍使用代码的方式。

我的虚拟机是Win7 x86的,这里以进程dwm.exe为例.

①  命令 !process 0 0 dwm.exe 先获取到dwm.exe的EPROCESS的地址,如图我们可以看到EPROCESS的地址为:0x87ede940  ,PEB的地址为:0x7ffdf000

②  注意PEB的地址小于0x80000000,属于用户地址空间,是不能够直接访问的,要是直接访问的话就只能看到???????,所以我们需要切换到这个应用程序后才能够访问用户地址空间,使用下面的命令 .process /p /r 87ede940 切换到dwm.exe这个进程,如图所示:

③  已经切换到dwm.exe,我们开始按照步骤来操作吧,命令dt _EPROCESS 87ede940 查看EPROCESS,如图所示在偏移0x1a8的位置找到了_PEB,地址为0x7ffdf000

④  跟进_PEB,使用命令 dt _PEB 0x7ffdf000 查看PEB的信息,如图所示在偏移0x0c的位置找到了_PEB_LDR_DATA,地址为: 0x77307880

⑤  继续跟进_PEB_LDR_DATA,使用命令dt _PEB_LDR_DATA 0x77307880  查看_PEB_LDR_DATA的信息,如图所示,一共有3个_LIST_ENTRY,前面我已经说过这三个链表只是结点的顺序不一样,我采用的是第一个InLoadOrderModuleList按照加载顺序的这个链表.

⑥  我们已经找到了链表的头部,但是我们现在可不知道_LDR_DATA_TABLE_ENTRY这货的结构是神马,所以我们使用命令dt _LDR_DATA_TABLE_ENTRY 来看一下_LDR_DATA_TABLE_ENTRY的结构,如图所示:

从结构中可以看到InLoadOrderModuleList位于结构体的首部,所以我们获取到的_LIST_ENTRY地址就直接指向了_LDR_DATA_TABLE_ENTRY,无需再次转换了

⑦   回到⑤看一下了链表的第一个结点的地址(FLink方向遍历),第一个地址为0x3017b8,OK我们使用命令dt _LDR_DATA_TABLE_ENTRY 0x3017b8 跟进看一下,如图所示

是不是看到dwm.exe这个进程本身的路径了? 那就对了,我们是按照模块儿加载的顺序遍历的,第一个模块儿就是本身嘛,不信的话那我们再往后看一个,命令dt _LDR_DATA_TABLE_ENTRY 0x301838 自己看下面的图吧,我就不多说了~~

时间: 2025-01-11 09:59:41

手把手教你R0下通过EPROCESS获取进程加载模块的相关文章

win/linux 下使用 psutil 获取进程 CPU / memory / IO 占用信息

psutil - A cross-platform process and system utilities module for Python 1. 安装 pip 安装即可. windows 下需要安装 vs2008,否则报错: Unable to find vcvarsall.bat 如果已经安装 vs2010 / vs2012 则需要设置环境变量,VS90COMNTOOLS 指向已有的 vs 变量. vs2010 设置如下: VS90COMNTOOLS = %VS100COMNTOOLS%

使用PullToRefresh实现下拉刷新和上拉加载

使用PullToRefresh实现下拉刷新和上拉加载 分类: Android2013-12-20 15:51 78158人阅读 评论(91) 收藏 举报 Android下拉刷新上拉加载PullToRefresh PullToRefresh是一套实现非常好的下拉刷新库,它支持: 1.ListView 2.ExpandableListView 3.GridView 4.WebView 等多种常用的需要刷新的View类型,而且使用起来也十分方便. (下载地址:https://github.com/ch

iOS学习之路--下拉刷新和上拉加载更多

iOS学习之路--下拉刷新和上拉加载更多 简介 本文中笔者将和大家分享应用app中常用到的表单内容的下拉刷新和上拉加载更多的功能实现的方法. 内容 1.有哪些实现方法与各方法的优劣 使用过美团,大众点评的朋友们应该有注意到,当你向上滑动表单的时候会有更多的店铺加载进你的表单中,而当你下滑表单顶的时候,则会刷新表单的内容并从网络上获取最新的信息.通过下拉刷新和上拉加载更多的功能,使app可以获取更多用户想要的信息和获取最新的信息.那么这种功能如何实现呢,还请跟着笔者继续往下看. 目前来说,主要的实

Android 下拉刷新上拉加载效果功能,使用开源项目android-pulltorefresh实现

应用场景: 在App开发中,对于信息的获取与演示,不可能全部将其获取与演示,为了在用户使用中,给予用户以友好.方便的用户体验,以滑动.下拉的效果动态加载数据的要求就会出现.为此,该效果功能就需要应用到所需要的展示页面中. 知识点介绍: 本文主要根据开源项目android-pulltorefresh展开介绍. android-pulltorefresh [一个强大的拉动刷新开源项目,支持各种控件下拉刷新 ListView.ViewPager.WevView.ExpandableListView.G

Android实现下拉刷新和上拉加载更多的RecyclerView和ScrollView

PullRefreshRecyclerView.java /** * 类说明:下拉刷新上拉加载更多的RecyclerView * Author: gaobaiq * Date: 2016/5/9 18:09 */ public class PullRefreshRecyclerView extends PullRefreshView { /** * 内置的RecyclerView: */ private RecyclerView mRecyclerView; /** * 可见的最后一个item

【好程序员笔记分享】——下拉刷新和上拉加载更多

-iOS培训,iOS学习-------型技术博客.期待与您交流!------------ iOS学习之路--下拉刷新和上拉加载更多 简介 本文中笔者将和大家分享应用app中常用到的表单内容的下拉刷新和上拉加载更多的功能实现的方法. 内容 1.有哪些实现方法与各方法的优劣 使用过美团,大众点评的朋友们应该有注意到,当你向上滑动表单的时候会有更多的店铺加载进你的表单中,而当你下滑表单顶的时候,则会刷新表单的内容 并从网络上获取最新的信息.通过下拉刷新和上拉加载更多的功能,使app可以获取更多用户想要

06---数据的下拉刷新上拉加载更多实现

以我最近做的微格项目为例,谈谈关于数据的下拉刷新上拉加载更多实现 页面加载数据: #pragma mark - 加载微博数据 - (void)loadStatusData { _statusesFrame = [NSMutableArray array]; // 微博管理 加载 [StatusManage getStatusesWithSendSinceId:0 maxId:0 Success:^(NSArray *statues) { for (Status *s in statues) {

jQuery下实现检测指定元素加载完毕

检测元素出现方法.虽然是基于 jQuery 的,但是代码很简洁,可以修改成纯js版的. 文本 jQuery.fn.wait = function (func, times, interval) { var _times = times || -1, //100次 _interval = interval || 20, //20毫秒每次 _self = this, _selector = this.selector, //选择器 _iIntervalID; //定时器id if( this.len

Android 下拉刷新上拉加载效果功能

应用场景: 在App开发中,对于信息的获取与演示,不可能全部将其获取与演示,为了在用户使用中,给予用户以友好.方便的用户体验,以滑动.下拉的效果动态加载数据的要求就会出现.为此,该效果功能就需要应用到所需要的展示页面中. 知识点介绍: 本文主要根据开源项目android-pulltorefresh展开介绍. android-pulltorefresh [一个强大的拉动刷新开源项目,支持各种控件下拉刷新 ListView.ViewPager.WevView.ExpandableListView.G