找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 3276|回复: 4

win7x64上如何伪装PID

[复制链接]

5

主题

53

回帖

0

精华

铜牌会员

积分
66
发表于 2021-3-8 10:11:31 | 显示全部楼层 |阅读模式
最近学习驱动的时候,看到可以利用 ObRegisterCallbacks 注册一个回调,并在回调函数中移除某些权限来达到保护进程的目的

无论是防止结束 还是防止被打开等,效果很好。

然而忽然间想到一个问题,如果我启动A和B两个进程,A进程是主程序本身,B进程就是一个直接生成的空白程序

能否像x32系统上,Hook NtOpenPorcess 当有一个调试器C进程想要打开A进程的时候,经过NtOpenPorcess时,函数内部实则打开B进程,然后将B进程的句柄返回,这样调试器C进程 打开的实则是B进程

然而在x64系统上,实在不知道怎么实现这个,在注册的回调函数中,第二个参数 中

POB_PRE_OPERATION_INFORMATION pOperationInformation

//被访问进程ID
HANDLE pid = PsGetProcessId((PEPROCESS)pOperationInformation->Object);


可以这样获取到被访问者的PID,能否在这里替换 Object 中的值来实现上述效果?

77

主题

192

回帖

9

精华

贵宾会员

积分
15602
发表于 2021-3-8 18:52:30 | 显示全部楼层
大概没啥用,我记得回调是执行到ObpCreateHandle函数里的时候调用的,换言之肯定有对象地址的备份,因为它必然是从参数里赋值到传递给你的结构体上的。你修改掉它的话只会导致在你后面的回调拿到错误的对象地址,但不影响ObpCreateHandle打开正确的对象。

5

主题

53

回帖

0

精华

铜牌会员

积分
66
 楼主| 发表于 2021-3-9 09:43:47 | 显示全部楼层
tangptr@126.com 发表于 2021-3-8 18:52
大概没啥用,我记得回调是执行到ObpCreateHandle函数里的时候调用的,换言之肯定有对象地址的备份,因为它 ...

感谢大佬回复,那x64系统上有没有办法可以实现 类似 x32系统上 Hook NtOpenProcess 替换被打开进程的方法?

856

主题

2630

回帖

2

精华

管理员

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

积分
36108
发表于 2021-3-9 16:23:26 | 显示全部楼层
OB回调的用途是句柄权限过滤。唯一可以让你设置的就是OperationInformation->Parameters->CreateHandleInformation(DuplicateHandleInformation).DesiredAccess。

你说的那个只能用HOOK实现。以前爆出过InfinityHook,自WIN10-19042开始已经不好使了,不过在WIN7上肯定没问题。

5

主题

53

回帖

0

精华

铜牌会员

积分
66
 楼主| 发表于 2021-3-13 17:29:31 | 显示全部楼层
Tesla.Angela 发表于 2021-3-9 16:23
OB回调的用途是句柄权限过滤。唯一可以让你设置的就是OperationInformation->Parameters->CreateHandleInfo ...

好的 感谢大佬,我去看看
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

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