一.注意事项
1.代码开源一部分的原因,还是防止伸手党.
2.代码无技术可言,完全是头热搞出来玩的.
3.代码有坑很正常,毕竟没有投入使用过.
4.发帖仅仅是让大手子们别瞎踩坑了.
二.思路说明
1.编写打洞的驱动
映射全部物理内存后
获取KernelDirectoryTableBase:用来寻址内核空间指定内存
获取 PhysicalMemoryMapAddress:用来寻址的物理内存(伪造)
获取 ProcessId在EPROCESS中的偏移:用来遍历进程
获取 PEB32与PEB64在EPROCESS中的偏移:用来遍历模块
获取CurrentProcess作为遍历进程的起点
以上信息全部传回R3,即可卸载驱动
2.应用层实现功能
通过KernelDirectoryTableBase+ PhysicalMemoryMapAddress来寻址访问R0内存
通过CurrentProcess作为起点,遍历目标进程EPROCESS
通过EPROCESS获取目标进程的PEB32 PEB64 UserDirectoryTableBase
通过User DirectoryTableBase+ PhysicalMemoryMapAddress 来寻址访问指定进程内存
通过PEB32 PEB64来遍历指定进程模块
3.细节清单
物理寻址,页面并非连续,如果数据跨页储存,需要处理,代码用了一种及其笨比的处理方式来处理,如有更好的方法请留言
遍历模块,一些成员偏移量因为对齐方式需要做一定程度的修改,这里我选择直接改的代码
物理寻址,如果分页内存被换出,又无法触发#PF,于是导致被换出的分页内存无法访问,目前在R3没有解决方法,如有方法请留言
5.其余问题,参考代码或留言,选择性回答.