以前介绍过的一款工具《开发Dump进程内存镜像、搜索工具ProcessDump》(以前文url:https://mp.weixin.qq.com/s?__biz=MjM5NDcxMDQzNA==&mid=2247484112&idx=1&sn=4c925a3e8fb43419a036f1f7dffab8b0&chksm=a682d41d91f55d0b074ae0746603bcd13c545779206004cc08a2416a06ed19613d87edf09bce&token=563483833&lang=zh_CN#rd)。如图,
是不是有点印象了,嘻嘻。
在代码里我采用OpenProcess函数来打开进程PID,再Dump出来的方式,
这里就产生了一个局限性,即:程序Dump一般进程的内存基本都能转储出来,不会有问题;但如果被Dump的进程是被保护的进程呢,那就dump不出来,失败不成功。
在完善程序的过程中,发现了“利用内核驱动、Ring0和Ring3层联动的方式”来解决Dump出被保护进程的内存镜像的好东西,特分享出来,完善我那个程序只工作于用户层Ring3的不足之处。
一、利用内核驱动Dump出被保护的进程内存镜像
作者的初衷:“我无法从Ring3中转储进程。我决定尝试创建一个自定义驱动程序,允许我在不使用OpenProcess的情况下复制进程内存”,恰好满足了我们的另一种情况需求。
1、源码地址:https://github.com/fobricia/KsDumper
编译环境,
Win 10 x64 ;
Windows Driver Kit (WDK) 10 ;
.NET 4.6.1;
Visual Studio 2019;
程序编译后会形成两个文件:ksDumperClient.exe和ksDumperDriver.sys;
因为涉及到驱动,如果你不熟悉,编译时会有点麻烦,还是用我编译好的吧。
编译好的,放在网盘中,
链接:https://pan.baidu.com/s/1P1ogczKxqjyE2gjaAd8Q6g
提取码:6bf1
2、程序演示图示
这是程序的演示动图,非常形象。
3、运行
如果运行ksDumperClient.exe,会出现程序界面,但没有数据,
查了下它的说明文档,发现要先加载起驱动文件ksDumperDriver.sys,用sc来加载,结果... ...
由于驱动没有签名,所以始终无法用windows拦截;在网上也搜索了暂时不用数字签名的办法,但还是挺麻烦的。
4、在一次细看文档时,发现作者给出了办法:用一个名为“drvmap”的程序来加载驱动sys,这里给出url,
源码地址:https://github.com/not-wlan/drvmap
这个我也编译好了,放在网盘中,
链接:https://pan.baidu.com/s/1Urve5dPnHAuboS75jmyX6A
提取码:pf3k
二、测试
1、在虚拟机中用drvmap来加载ksDumperDriver.sys;测试环境为win10 x64,不要在本机上测试上,万一有问题,很麻烦。
出现这样的界面,说明加载驱动成功了。
2、运行ksDumperClient.exe,
这会有进程内容了,右键选中后导出,这时就跟上面的演示图一样了,不再继续了。
3、这是个涉及到 驱动编程、PE结构重构的源码,有很高的价值,有能力的还是要研究学习下。
因为内核驱动工作于Ring0底层,从而避开绕过了一些保护手段。