首页
论坛
课程
招聘
[讨论]在驱动直接读写虚拟内存
2009-4-11 15:00 13195

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

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

[注意]中秋好礼,诚意满满——你提意见,我送月饼!!

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

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