基本原理
本质是利用windows系统的apc机制,以及涉及到windows进程启动的流程.
因为线程初始化阶段LdrInitializeThunk函数会调用NtTestAlert函数,这个函数执行后,所有apc队列中的例程都会执行.因此我们在主线程初始化之前向主线程的apc队列中加入恶意代码即可实现代码执行.
具体就是创建一个挂起状态的进程,然后向其主线程的apc队列中添加新的数据,然后恢复目标进程让其执行我们添加的数据即可.apc队列中的例程会在目标进程入口点代码执行之前执行,不过加载IAT表中的dll后,apc队列才会开始执行.
NtTestAlert执行时机
NtTestAlert会在LdrpInitiallizeProcess执行结束后执行,此时所有静态链接的dll都已经加载完毕.
防御手段
检查跨进程添加APC
参考文章
https://idiotc4t.com/code-and-dll-process-injection/early-bird