首页
社区
课程
招聘
[原创]驱动通讯方式:在x64程序中返回到32位环境触发bound异常,通过BoundCallback注册回调进行通讯
发表于: 2025-11-29 21:18 1938

[原创]驱动通讯方式:在x64程序中返回到32位环境触发bound异常,通过BoundCallback注册回调进行通讯

2025-11-29 21:18
1938

boundcallback 很早就已经被用来进行用户层与内核层之间的通讯了,但由于 bound 指令仅在 x86 架构下可用,其应用范围一直受限。

x86 源码:misslng/boundcallback


众所周知,x86 可通过"天堂之门"技术切换至 x64 模式执行。反之,x64 同样能够回到 x86 模式执行代码。

基于此原理,可利用 retf 指令从 x64 跳转回 x86,触发 bound 异常来实现与驱动层的通信。

这种方法使得基于 boundcallback 的通信机制能够同时兼容 x64 架构。



[培训]Windows内核深度攻防:从Hook技术到Rootkit实战!

最后于 2025-11-29 21:32 被Saileaxh编辑 ,原因: 补充源码图
收藏
免费 5
支持
分享
最新回复 (11)
雪    币: 505
活跃值: (751)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
驱动界又要腥风血雨了
2025-11-29 21:27
0
雪    币: 3444
活跃值: (4192)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
这可太骚了
2025-11-30 01:12
0
雪    币: 5599
活跃值: (6452)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
我发现如果SetThreadContext是64位程序调用的,去设置一个32位程序的context比如修改rip,这个时候目标32位程序的线程行为就会变成64位的,比如32位程序在执行call的时候就会压入8字节。还有push eax会像push rax一样压入8字节。
2025-11-30 11:51
0
雪    币: 613
活跃值: (2962)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
不明觉厉
2025-11-30 14:55
0
雪    币: 167
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
6
这个回调要是被早早的注册的话是不是就检测到了
2025-12-1 22:39
0
雪    币: 208
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
7
预启动把你看得清清楚楚
2025-12-2 03:29
0
雪    币: 1338
活跃值: (911)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
8
啊你好哇123 这个回调要是被早早的注册的话是不是就检测到了
文中提到,系统中同时只允许存在一个bound异常回调,就算有人提前注册了,也不能像注册表回调一样监控后注册(层级更低)的回调
2025-12-2 11:47
0
雪    币: 1338
活跃值: (911)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
9
mb_urzqsoer 预启动把你看得清清楚楚

整个KeRegisterBoundCallback路径中没有任何事件点位,不知你的观点从何而来。

想要针对检测肯定有办法,但是跟预启动没任何关系。

最后于 2025-12-2 11:49 被Saileaxh编辑 ,原因:
2025-12-2 11:47
0
雪    币: 1043
活跃值: (1416)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
10
Saileaxh 文中提到,系统中同时只允许存在一个bound异常回调,就算有人提前注册了,也不能像注册表回调一样监控后注册(层级更低)的回调
只能提前注册占坑,没法做到感知吗?
2025-12-2 13:29
0
雪    币: 1338
活跃值: (911)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
11
周旋久 只能提前注册占坑,没法做到感知吗?
一旦任何驱动注册过一次boundcallback,其他驱动通过常规的方法就不能再注册,也无法取消之前驱动注册的
2025-12-2 17:41
0
雪    币: 1475
活跃值: (2162)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
mark
2025-12-5 08:41
0
游客
登录 | 注册 方可回帖
返回