通过几次栈回溯,找到需要hook的地点,将返回地址替换为自己的hook函数。
这种方法应用场景应该不常见,但对于之前提到的《 PsSetCreateThreadNotify回调PsLookupThreadByThreadId失败 》,这应该是一个不错的解决方案。下面详细说明。
这种方法应用场景应该不常见,但对于之前提到的《 PsSetCreateThreadNotify回调PsLookupThreadByThreadId失败 》,这应该是一个不错的解决方案。下面详细说明。
第一次回溯,找到了上一级调用函数,在这里为“PspCreateThread”。在这里HOOK依然不能成功调用“PsLookupThreadByThreadId”,所以我们在回溯一次。
通过2次栈回溯,找到了更上一级的函数“PsCreateSystemThread”(或其他),此时,“PspCreateThread”内部已经完成了对GrantAccess的初始化,调用“PsLookupThreadByThreadId”已无障碍。而这时的线程也就刚刚建立,还未开始执行,仍然处