首页
社区
课程
招聘
[讨论]关于如何在内核安全的读写内核虚拟地址
发表于: 2018-9-29 11:41 6272

[讨论]关于如何在内核安全的读写内核虚拟地址

2018-9-29 11:41
6272
提try except的先往后稍稍,这东西对内核虚拟地址完全无效的

首先是PTE有效的虚拟内存,这个有两种访问方法

一种是用虚拟地址直接访问,就是所谓“ 直接访问 ”,当然访问之前要先MmIsAddressValid判断一下
MmIsAddressValid到访问期间有一个几~几十纳秒的窗口期,我们假设你提前禁用了当前CPU的中断( __disable() )还升了IRQL,不让他发生上下文切换。
但是别的CPU还能跑,这期间如果虚拟地址正好被别的cpu跑别的线程释放了怎么办?
那么就只能挂起所有其他CPU了:KeIpiGenericCall了

还有一种比较慢但是相对稳定的方法,就是自己进行地址翻译,拿到物理地址之后干物理地址去:1fdK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6A6L8Y4c8W2L8q4)9J5c8X3S2S2P5r3#2Q4x3V1k6T1L8r3!0T1i4K6u0r3L8h3q4K6N6r3g2J5i4K6u0r3j5$3!0J5k6g2)9J5c8Y4k6@1L8r3u0Q4x3X3g2U0 vcpu_read_guest_virtual
这样即使窗口期虚拟地址被释放了也没关系,顶多翻译失败,你还能知道失败原因
什么?你问如果物理地址被换进别的内容了咋办?那还是只能挂起其他CPU了呗

PTE无效的虚拟内存,根据e46K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6T1L8r3!0Y4i4K6u0W2j5%4y4V1L8W2)9J5k6h3&6W2N6q4)9J5c8Y4y4Z5k6i4k6S2j5$3!0E0K9h3&6Y4i4K6u0r3j5i4u0@1K9h3y4D9k6g2)9J5c8X3c8W2N6r3q4A6L8s2y4Q4x3V1j5%4y4e0j5I4y4o6R3I4i4@1f1$3i4K6R3&6i4K6R3H3i4@1f1^5i4@1q4r3i4@1t1@1
我们只要考虑在页面文件中的情况
个人的想法是直接call MiIssueHardFault让系统帮你IO,不过这样会修改PTE让其变为有效的
不过也可以找到FILE_OBJECT和offset,自己发IRP,这样更安全,不过如何定位FILE_OBJECT和offset就很蛋疼了

[培训]科锐逆向工程师培训第53期2025年7月8日开班!

收藏
免费 1
支持
分享
最新回复 (6)
雪    币: 25
活跃值: (702)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
github已经失效啦
2018-9-30 09:55
0
雪    币: 4557
活跃值: (5876)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
原来32位的时候不过PG 直接HOOK下处理下异常 让支持Kernel就行 最早 最早 最早 冰刃 还是 狙剑 Hook的BugCheck
个人的想法是直接call MiIssueHardFault让系统帮你IO,不过这样会修改PTE让其变为有效的(PTE变为有效的会影响什么)
2018-10-1 11:24
0
雪    币: 12876
活跃值: (9352)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
4
syser 原来32位的时候不过PG 直接HOOK下处理下异常 让支持Kernel就行 最早 最早 最早 冰刃 还是 狙剑 Hook的BugCheck 个人的想法是直接call MiIssueHardFault ...
hook确实最简单,但是支持全系统就比较蛋疼了
2018-10-4 13:57
0
雪    币: 485
活跃值: (3397)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wem
6
看看再说
2018-10-18 23:46
0
雪    币: 299
活跃值: (306)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
请问一下DXF这个网游内存被保护了 内存数据都是 pushad 有什么思路解决吗
2018-11-15 22:21
0
游客
登录 | 注册 方可回帖
返回