首页
社区
课程
招聘
[求助]关于obregistercallbacks
2021-5-3 13:52 10805

[求助]关于obregistercallbacks

2021-5-3 13:52
10805

刚刚接触驱动内核,学了一个星期,本来按照《WIN64基础编程》来说,打算去挑战一下游戏,然后我也查了一下,现在大部分游戏都是利用obregistercallbacks这个函数来创建线程与进程回调来保护自己不被读写,我一寻思,这不就是曲线救国的x86下的hook NTopenprocess吗,然后就在看雪上找类似的资料,最后发现大部分有效对抗此回调的方法,基本上大部分也只有
1.高位拦截(亲测可用)
2.遍历回调入口hook头部(基本上大部分游戏都会有crc)
然后相对于其他方法,比如利用ObUnRegisterCallbacks
来卸载句柄之内的,一般也会有检测重新创建

 

但是现在这游戏估计又加了一点什么东西,我利用高位拦截,内存只能存在三秒左右就全部又被保护起来了

 

于是我在ce上做了一个设置

 

“读写进程内存”

 

此项目打勾,然后在加载自己的驱动

 

内存又全部能读取了

 

但是我还是想研究一下这种三秒读内存的原因出在哪里,有望大神赐教,仅做研究。


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

收藏
点赞1
打赏
分享
最新回复 (17)
雪    币: 39
活跃值: (4187)
能力值: ( LV3,RANK:35 )
在线值:
发帖
回帖
粉丝
ookkaa 2021-5-3 14:13
2
0
libelevate或者自己绕过句柄的创建操作,DNF不是去年早就加了吗
雪    币: 39
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
算神卜命 2021-5-3 14:45
3
0
ookkaa libelevate或者自己绕过句柄的创建操作,DNF不是去年早就加了吗
我已经过了,问题是他现在一直在清空内存
雪    币: 3464
活跃值: (3575)
能力值: ( LV3,RANK:37 )
在线值:
发帖
回帖
粉丝
qqzxc 2021-5-6 15:44
4
0
ace 扫句柄表
雪    币: 1041
活跃值: (733)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
鸭子咯咯哒 2021-7-26 22:50
5
0
求驱动入门学习啊呜呜你们是在哪儿学的
雪    币: 7
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
刻骨柔情 2022-5-16 17:47
6
0
兄弟,高位拦截,是什么思路。能不能透露一下。我刚学驱动没几天,刚入门。
雪    币: 7
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
刻骨柔情 2022-5-16 19:00
7
0

兄弟 ,能不能分享一下,高位拦截的源码。想看看思路。非常感谢。


1.ObUnRegisterCallbacks 传入 ObHandle 注销回调; 

2.把记录的回调函数地址改为自己的设置的空回调;

3.给对方设置的回调函数地址写入 RET。 

我用的就是这几种方法,但是有个问题。就是发现有5个回调,其中三个是可以正常 通过上面这三种方法摘掉的。但是有两个。只要一摘掉,就会蓝屏。

兄弟。能不能赐教一下高位拦截的思路

最后于 2022-5-16 19:24 被刻骨柔情编辑 ,原因:
雪    币: 14
活跃值: (80)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
lovenikola 2022-5-17 02:10
8
0
把句柄权限改回去不就完事了吗?
雪    币: 22
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
龙乎 2022-5-17 04:01
9
0
分享一个最近想出的指针替换绕过pg hook 对象回调方法: 
1.OBJECT_TYPE枚举进程回调链:
ObProcessCallbackListHead = *(ULONG64*)PsProcessType + dynData.ObjectCallbackListOffset;
2.找到目标驱动下的进程回调,替换指针:
//全局保存对象回调结构指针,用于还原钩子
g_POB_CALLBACK = pObCallback;
 //如果设置了PreCall,则hook PreCall
if (MmIsAddressValid(pObCallback->PreCall))
  {
pSourceProcessPreCall = pObCallback->PreCall;
pObCallback->PreCall = HookedProcessPreCall;
DPRINT("[ALIEN]:Start Hook ProcessPreCall\n");
}
//如果设置了PostCall,则hook PostCall
 if (MmIsAddressValid(pObCallback->PostCall))
{
pSourceProcessPostCall = pObCallback->PostCall;
pObCallback->PostCall = HookedProcessPostCall;
DPRINT("[ALIEN]:Start Hook ProcessPostCall\n");
 }
3.ACE只做eprocess object判断,hook返回一个假的object给他就能绕过进程回调保护。
只有TP可以这么干,EAC会被detect,然鹅没什么用,TP的内存,你过回调也只能看看而已
雪    币: 22
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
龙乎 2022-5-17 04:15
10
0
“高位拦截,但是现在这游戏估计又加了一点什么东西,我利用高位拦截,内存只能存在三秒左右就全部又被保护起来了”是因为驱动保护开了线程定时扫句柄表降句柄权限,高位拦截只能对付一些碰碰车(我并不认为mhyprot3)是碰碰车
雪    币: 7
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
刻骨柔情 2022-5-19 21:30
11
0
龙乎 “高位拦截,但是现在这游戏估计又加了一点什么东西,我利用高位拦截,内存只能存在三秒左右就全部又被保护起来了”是因为驱动保护开了线程定时扫句柄表降句柄权限,高位拦截只能对付一些碰碰车(我并不认为mhyp ...
大佬能不能给科普一下 高位拦截
雪    币: 39
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
算神卜命 2022-7-12 15:48
12
0
wx_小董-15868424886 大佬能不能给科普一下 高位拦截
高位拦截会被保护内存的,没啥用,还是要想办法hook他的函数,或者直接给所有句柄提权
雪    币: 89
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
sanqiu 2022-11-25 15:43
13
0
我废弃掉句柄这个东西 使用我自己创建的标识来操纵api是否可行
雪    币: 4448
活跃值: (3481)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
木志本柯 2022-11-25 16:46
14
0

可以试试逆向obregistercallbacks内部的实现 如果第一次成功获取到句柄权限之后 后面ob不管怎么降权 都没用了
雪    币: 89
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
sanqiu 2022-12-13 23:13
15
0
木志本柯 [em_1] 可以试试逆向obregistercallbacks内部的实现 如果第一次成功获取到句柄权限之后 后面ob不管怎么降权 都没用了
然而 antidbg 通过扫线程就绪链表+遍历所属进程句柄表 你这种方法就是儿戏 antidbg 虽然大多很傻逼,但也不那么傻逼
雪    币: 4448
活跃值: (3481)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
木志本柯 2022-12-13 23:28
16
0
sanqiu 然而 antidbg 通过扫线程就绪链表+遍历所属进程句柄表 你这种方法就是儿戏 antidbg 虽然大多很傻逼,但也不那么傻逼
哈哈哈那我也不可能把有杀伤力的东西贴出来给他啊 只能告诉他去看看这些代码里的设计过程
雪    币: 164
活跃值: (493)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
DepressedMan 2022-12-14 00:14
17
0
三秒内存消失是句柄被降权了
雪    币: 852
活跃值: (3535)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
逆向爱好者 2023-3-26 17:29
18
0
句柄降权了只能写定时器提权回去或者nop他的降权指令,游戏还有crc那还可以自己写个内存遍历,还可以hook掉ce的读写接口,不过还是写个内存遍历工具好点,反正读写别用句柄的方式来就行
游客
登录 | 注册 方可回帖
返回