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 中的值来实现上述效果? 大概没啥用,我记得回调是执行到ObpCreateHandle函数里的时候调用的,换言之肯定有对象地址的备份,因为它必然是从参数里赋值到传递给你的结构体上的。你修改掉它的话只会导致在你后面的回调拿到错误的对象地址,但不影响ObpCreateHandle打开正确的对象。 tangptr@126.com 发表于 2021-3-8 18:52
大概没啥用,我记得回调是执行到ObpCreateHandle函数里的时候调用的,换言之肯定有对象地址的备份,因为它 ...
感谢大佬回复,那x64系统上有没有办法可以实现 类似 x32系统上 Hook NtOpenProcess 替换被打开进程的方法? OB回调的用途是句柄权限过滤。唯一可以让你设置的就是OperationInformation->Parameters->CreateHandleInformation(DuplicateHandleInformation).DesiredAccess。
你说的那个只能用HOOK实现。以前爆出过InfinityHook,自WIN10-19042开始已经不好使了,不过在WIN7上肯定没问题。 Tesla.Angela 发表于 2021-3-9 16:23
OB回调的用途是句柄权限过滤。唯一可以让你设置的就是OperationInformation->Parameters->CreateHandleInfo ...
好的 感谢大佬,我去看看
页:
[1]