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

[求助]关于obregistercallbacks

2021-5-3 13:52
11758

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

 

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

 

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

 

“读写进程内存”

 

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

 

内存又全部能读取了

 

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


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 2
支持
分享
最新回复 (17)
雪    币: 246
活跃值: (4507)
能力值: ( LV4,RANK:45 )
在线值:
发帖
回帖
粉丝
2
libelevate或者自己绕过句柄的创建操作,DNF不是去年早就加了吗
2021-5-3 14:13
0
雪    币: 39
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
3
ookkaa libelevate或者自己绕过句柄的创建操作,DNF不是去年早就加了吗
我已经过了,问题是他现在一直在清空内存
2021-5-3 14:45
0
雪    币: 4309
活跃值: (4367)
能力值: ( LV3,RANK:37 )
在线值:
发帖
回帖
粉丝
4
ace 扫句柄表
2021-5-6 15:44
0
雪    币: 1041
活跃值: (733)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
求驱动入门学习啊呜呜你们是在哪儿学的
2021-7-26 22:50
0
雪    币: 7
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
6
兄弟,高位拦截,是什么思路。能不能透露一下。我刚学驱动没几天,刚入门。
2022-5-16 17:47
0
雪    币: 7
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
7

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


1.ObUnRegisterCallbacks 传入 ObHandle 注销回调; 

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

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

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

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

最后于 2022-5-16 19:24 被刻骨柔情编辑 ,原因:
2022-5-16 19:00
0
雪    币: 14
活跃值: (80)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
把句柄权限改回去不就完事了吗?
2022-5-17 02:10
0
雪    币: 22
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
9
分享一个最近想出的指针替换绕过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的内存,你过回调也只能看看而已
2022-5-17 04:01
0
雪    币: 22
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
10
“高位拦截,但是现在这游戏估计又加了一点什么东西,我利用高位拦截,内存只能存在三秒左右就全部又被保护起来了”是因为驱动保护开了线程定时扫句柄表降句柄权限,高位拦截只能对付一些碰碰车(我并不认为mhyprot3)是碰碰车
2022-5-17 04:15
0
雪    币: 7
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
11
龙乎 “高位拦截,但是现在这游戏估计又加了一点什么东西,我利用高位拦截,内存只能存在三秒左右就全部又被保护起来了”是因为驱动保护开了线程定时扫句柄表降句柄权限,高位拦截只能对付一些碰碰车(我并不认为mhyp ...
大佬能不能给科普一下 高位拦截
2022-5-19 21:30
0
雪    币: 39
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
12
wx_小董-15868424886 大佬能不能给科普一下 高位拦截
高位拦截会被保护内存的,没啥用,还是要想办法hook他的函数,或者直接给所有句柄提权
2022-7-12 15:48
0
雪    币: 0
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
13
我废弃掉句柄这个东西 使用我自己创建的标识来操纵api是否可行
2022-11-25 15:43
0
雪    币: 4793
活跃值: (4489)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14

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