HJonny 发表于 2021-3-8 10:11:31

win7x64上如何伪装PID

最近学习驱动的时候,看到可以利用 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 中的值来实现上述效果?

tangptr@126.com 发表于 2021-3-8 18:52:30

大概没啥用,我记得回调是执行到ObpCreateHandle函数里的时候调用的,换言之肯定有对象地址的备份,因为它必然是从参数里赋值到传递给你的结构体上的。你修改掉它的话只会导致在你后面的回调拿到错误的对象地址,但不影响ObpCreateHandle打开正确的对象。

HJonny 发表于 2021-3-9 09:43:47

tangptr@126.com 发表于 2021-3-8 18:52
大概没啥用,我记得回调是执行到ObpCreateHandle函数里的时候调用的,换言之肯定有对象地址的备份,因为它 ...

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

Tesla.Angela 发表于 2021-3-9 16:23:26

OB回调的用途是句柄权限过滤。唯一可以让你设置的就是OperationInformation->Parameters->CreateHandleInformation(DuplicateHandleInformation).DesiredAccess。

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

HJonny 发表于 2021-3-13 17:29:31

Tesla.Angela 发表于 2021-3-9 16:23
OB回调的用途是句柄权限过滤。唯一可以让你设置的就是OperationInformation->Parameters->CreateHandleInfo ...

好的 感谢大佬,我去看看
页: [1]
查看完整版本: win7x64上如何伪装PID