首页
社区
课程
招聘
[讨论]在驱动直接读写虚拟内存
发表于: 2009-4-11 15:00 15412

[讨论]在驱动直接读写虚拟内存

2009-4-11 15:00
15412
在通常情况下,读写一个进程的虚拟内存用的是ReadProcessMemory和WriteProcessMemory,在读写之前要用OpenProcess打开进程,但现在很多软件为了防止别人进程读取自己的数据,都在这些函数或这些函数的NT函数下设置了众多的钩子和检测(例如NP技术),导致这些函数调用的失败。但不管这个程序怎么设置钩子,Windows系统应该是能够对这些内存块进行操作的,否则这个程序就不能运行了。我想,虚拟内存都是物理内存的分页机制下一个地址映射,虚拟内存和实际的物理内存肯定存在一个对应关系,如果我们能将虚拟内存地址直接转换为物理内存,那么我们的程序就可以像在R0下直接读写2GB以上内存空间的来直接读写一个进程的虚拟内存了,这样实际上就完全饶过了保护进程的HOOK,如果有人知道这个映射关系,希望大侠能不吝赐教,让大家一起学习下。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (9)
雪    币: 217
活跃值: (35)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
如果你在ring0下,如果能取得进程PERPOCESS,那么直接KeStackAttachProcess过去,就可以读写此进程的虚拟内存了。进程的虚拟内存也是由EPROCESS里面的vad结构描述的。
2009-4-11 16:25
0
雪    币: 200
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
分析的非常好
2009-4-20 20:29
0
雪    币: 409
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
插进去,然后不断mov即可
2009-4-22 22:38
0
雪    币: 129
活跃值: (31)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
R0先枚举出你要的指定进程的Eprocess   然后通过Attach到你指定的进程后就可以访问他的虚拟内存了,直接用拷贝内存就行了...不用什么读写那么复杂了.完了以后Detach就好了...

还是比较方便的.看雪大大教我的
2009-4-23 01:11
0
雪    币: 170
活跃值: (45)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
6
Attach进去后可以直接使用和R3下一样的虚拟内存地址吗?
2009-4-23 13:28
0
雪    币: 246
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
现在直接在游戏里就可以卸载np了 方便啊 干什么要进内核那?
2009-4-23 21:16
0
雪    币: 200
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
attach 到某个进程后,还为什么要copy呢? 直接读不行?
2009-4-24 08:48
0
雪    币: 200
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
attach之后,遍历VAD tree时,如果某个vad 的结构体里的control_area 地址 不是valid (MiIsAddressValid 返回 false) 还能读吗?这是怎么办?
2009-4-24 08:51
0
雪    币: 202
活跃值: (151)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
都插进去了,想怎么搞就怎么搞,顶多是个花式招数问题。LZ可以再进一步理解下R0、R3。
2009-4-24 14:09
0
游客
登录 | 注册 方可回帖
返回
//