找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 15357|回复: 17

R0 - R3通讯问题

  [复制链接]

5

主题

46

回帖

0

精华

铜牌会员

积分
116
发表于 2021-4-27 11:30:43 | 显示全部楼层 |阅读模式
微软提供的通讯方式是利用IRP进行R0R3数据交互,出于实验,我自己也做了个通讯,
1.修改R0的分页属性,让R3能够直接读取R0内存
2.R0创建个线程循环,用于接收R3的数据,达到交互的目的

问题:
1.内核线程死循环占用较高,直接占满了一个核心,能否优化呢
2.多线程问题,R3多线程和R0交互,有很多问题,容易蓝屏

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
发表于 2021-4-27 16:53:22 | 显示全部楼层
0、我很好奇你是怎么样使得应用程序可以直接读取内核内存的(除非你用的是XP)。

1、在循环里调用KeDelayExecutionThread

2、一般非标准方式通信还可以使用内核CALLBACK(比如注册表CALLBACK)。

5

主题

46

回帖

0

精华

铜牌会员

积分
116
 楼主| 发表于 2021-4-27 21:58:26 | 显示全部楼层
Tesla.Angela 发表于 2021-4-27 16:53
0、我很好奇你是怎么样使得应用程序可以直接读取内核内存的(除非你用的是XP)。

1、在循环里调用KeDelayE ...

0.修改线性地址的分页属性,修改U/S位,这是保护模式的知识
2.我对通讯的访问次数很高,每秒几十万次,而内核函数为了防止重入,我加了锁,导致了我单线程死循环访问内核一个函数时没问题,第二个线程同时访问同一个内核函数时在锁外进不去,目前我自己的解决方法是内核写两个相同功能函数,不同线程访问不同函数,比较傻

5

主题

46

回帖

0

精华

铜牌会员

积分
116
 楼主| 发表于 2021-4-27 22:04:31 | 显示全部楼层
Tesla.Angela 发表于 2021-4-27 16:53
0、我很好奇你是怎么样使得应用程序可以直接读取内核内存的(除非你用的是XP)。

1、在循环里调用KeDelayE ...

关于你的第一点疑惑可以参考这个,在x64下修改线性地址的分页属性可以让R3读R0内存,https://www.cnblogs.com/lanrenxinxin/p/4735027.html

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
发表于 2021-4-28 05:45:44 | 显示全部楼层
blackbox 发表于 2021-4-27 21:58
0.修改线性地址的分页属性,修改U/S位,这是保护模式的知识
2.我对通讯的访问次数很高,每秒几十万次,而 ...


游客,如果您要查看本帖隐藏内容请回复

78

主题

190

回帖

9

精华

贵宾会员

积分
15605
发表于 2021-4-28 21:29:42 | 显示全部楼层
改页表你不管PatchGuard么

5

主题

46

回帖

0

精华

铜牌会员

积分
116
 楼主| 发表于 2021-4-28 23:07:31 | 显示全部楼层
Tesla.Angela 发表于 2021-4-28 05:45
**** 本内容被作者隐藏 ****

不是,学了保护模式就想做点项目练手加固记忆,正好吹水群大佬说内核线程通讯缺陷很多,就想练练手了,目前就只有多线程的问题了

5

主题

46

回帖

0

精华

铜牌会员

积分
116
 楼主| 发表于 2021-4-28 23:09:30 | 显示全部楼层
tangptr@126.com 发表于 2021-4-28 21:29
改页表你不管PatchGuard么

改页表不PG吧

5

主题

46

回帖

0

精华

铜牌会员

积分
116
 楼主| 发表于 2021-5-26 14:37:21 | 显示全部楼层
经过实验,改页表属性不行,找个一个月的BUG
1.我自己电脑没问题,但是大部分系统会改页表属性,如果自己强制死循环改页表属性就会蓝屏,
2.然后我又想到自己挂PTE,但是现在很多电脑都是大内存,很可能分的页表都没PTE和PDE,我并没有思路解决
3.最后老实点用系统的MDL映射一个地址,然后传给R3进行通信吧

0

主题

27

回帖

0

精华

铜牌会员

积分
45
发表于 2021-5-31 14:38:49 | 显示全部楼层

触发的吧……我去年改了页表折腾了一周

5

主题

46

回帖

0

精华

铜牌会员

积分
116
 楼主| 发表于 2021-6-2 12:46:11 | 显示全部楼层
hang_on 发表于 2021-5-31 14:38
触发的吧……我去年改了页表折腾了一周

可能吧,我自己用没事啊 1909的,一两个小时没问题,给别人测试要么蓝屏,要么就系统自动改PTE属性,

0

主题

58

回帖

0

精华

铜牌会员

积分
103
发表于 2021-6-27 09:22:18 | 显示全部楼层
学习下看一看

0

主题

7

回帖

0

精华

初来乍到

积分
7
发表于 2021-7-19 19:21:39 | 显示全部楼层
谢谢分享哈

0

主题

29

回帖

0

精华

初来乍到

积分
17
发表于 2021-8-8 21:54:49 | 显示全部楼层
学学思路

1

主题

123

回帖

0

精华

铜牌会员

积分
183
发表于 2021-8-12 09:15:50 | 显示全部楼层
应用层与内核通讯的方式很多,IRP,ALPC,共享内存,MiniFilter,管道,socket,ETW,但要设计出一个好用高效的,就得花花功夫了

0

主题

111

回帖

0

精华

银牌会员

积分
340
发表于 2021-8-20 17:38:04 | 显示全部楼层
学一学~

0

主题

31

回帖

0

精华

铜牌会员

积分
41
发表于 2022-12-3 03:39:23 | 显示全部楼层
看看情况

0

主题

12

回帖

0

精华

初来乍到

积分
22
发表于 2024-1-23 05:55:22 | 显示全部楼层
我用的是线程暂停的方法
直接映射一块内存到R3 之前用了挂靠,但是觉得直接读物理内存也行。
r3读完直接暂停本线程 r0判断线程状态再写入
当时感觉的这比再创建一个事件句柄好,毕竟线程他是本来就必须要存在的数据都可以捆绑在一个结构里,单独创建一个句柄用来等待感觉像脱裤子放屁不符合编程思想。
话说回来还是技术问题  直接插apc或者KeUserModeCallback不也行吗
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

快速回复 返回顶部 返回列表