在没有获得父进程的内存权限的情况下创建子进程
Creating child process without getting memory rights to parent
我正在尝试创建子进程,但没有以这种方式获得对父进程的 PROCESS_VM_WRITE
权限:
将内核驱动程序与 ObRegisterCallbacks
一起使用 当父进程试图获取启动子进程的句柄时,我删除了 PROCESS_VM_WRITE
访问权限:
在父进程中,我使用 CreateProcess
函数启动子进程,但失败并显示我没有权限的错误。
我也试过使用 RtlCreateUserProcess
并且成功了,但是你可能知道现在处理 运行 没有子系统并且它不能正常工作。
因此,出于所有这些原因,我有三个问题:
也许可以使用一些 ntdll.dll
函数来正确创建进程而不写入子内存?
也许可以挂钩某些 Nt
函数并在进程创建期间将所有写请求提升到我的内核驱动程序?如果是,我需要挂接哪些功能?我上钩了 NtWriteVirtualMemory
,但是 ntdll.dll
在调用之前检查访问权
也许可以在使用RtlCreateUserProcess
后完成创建自己的正确过程?如果是,我需要使用什么功能?
无法访问父进程的内存对我来说非常重要,因为我需要保护子内存免受所有 UserMode 技巧的影响,ObRegisterCallback
对它有好处,但父进程(启动器)是一个大洞。
Maybe it is possible to hook some Nt
functions and elevate all write requests during process creating to my kernel driver? If yes, what
functions do I need to hook? I hooked NtWriteVirtualMemory
, but ntdll.dll
checks access right before call it
是的,这就是您需要做的全部。挂钩 NtWriteVirtualMemory
,从 CreateProcessInternalW
调用。这避免了 STATUS_ACCESS_DENIED
并且在这种情况下一切都会起作用。
ntdll.dll checks access right before call it
你错了 - 没有发生这样的事情。
在 ObjectPreCallback
中,您是否检查请求是否来自您的父进程并仅在是时删除 PROCESS_VM_WRITE
?在进程创建期间调用 CsrClientCallServer
,结果 csrss.exe 也打开了一个子进程。您确定不删除此处的 PROCESS_VM_WRITE
吗?
当然也可以使用 RtlCreateUserProcess
,但在这种情况下,您将需要自己连接到 csrss 并使用未记录且可能不稳定的接口。我认为这不是最好的方法,但它是可能的。
不,没有另一个 ntdll API 用于创建连接了 csrss 的进程。
我正在尝试创建子进程,但没有以这种方式获得对父进程的 PROCESS_VM_WRITE
权限:
将内核驱动程序与 ObRegisterCallbacks
一起使用 当父进程试图获取启动子进程的句柄时,我删除了 PROCESS_VM_WRITE
访问权限:
在父进程中,我使用
CreateProcess
函数启动子进程,但失败并显示我没有权限的错误。我也试过使用
RtlCreateUserProcess
并且成功了,但是你可能知道现在处理 运行 没有子系统并且它不能正常工作。
因此,出于所有这些原因,我有三个问题:
也许可以使用一些
ntdll.dll
函数来正确创建进程而不写入子内存?也许可以挂钩某些
Nt
函数并在进程创建期间将所有写请求提升到我的内核驱动程序?如果是,我需要挂接哪些功能?我上钩了NtWriteVirtualMemory
,但是ntdll.dll
在调用之前检查访问权也许可以在使用
RtlCreateUserProcess
后完成创建自己的正确过程?如果是,我需要使用什么功能?
无法访问父进程的内存对我来说非常重要,因为我需要保护子内存免受所有 UserMode 技巧的影响,ObRegisterCallback
对它有好处,但父进程(启动器)是一个大洞。
Maybe it is possible to hook some
Nt
functions and elevate all write requests during process creating to my kernel driver? If yes, what functions do I need to hook? I hookedNtWriteVirtualMemory
, but ntdll.dll checks access right before call it
是的,这就是您需要做的全部。挂钩 NtWriteVirtualMemory
,从 CreateProcessInternalW
调用。这避免了 STATUS_ACCESS_DENIED
并且在这种情况下一切都会起作用。
ntdll.dll checks access right before call it
你错了 - 没有发生这样的事情。
在 ObjectPreCallback
中,您是否检查请求是否来自您的父进程并仅在是时删除 PROCESS_VM_WRITE
?在进程创建期间调用 CsrClientCallServer
,结果 csrss.exe 也打开了一个子进程。您确定不删除此处的 PROCESS_VM_WRITE
吗?
当然也可以使用 RtlCreateUserProcess
,但在这种情况下,您将需要自己连接到 csrss 并使用未记录且可能不稳定的接口。我认为这不是最好的方法,但它是可能的。
不,没有另一个 ntdll API 用于创建连接了 csrss 的进程。