[分享]老文章系列:APC注入DLL的梗
本文核心就是调用简单的APC注入DLL,不过使用内核层的驱动完成工作~~

注入方法很简单就是调用NtQueueApcThread~
参数构造上抄了一抄经典注入APC的QueueUserApc~
在xp上

在win7上

驱动中使用的方法就更简单了~
直接注册一个回调,然后在某个特殊EXE来临时刻直接插入APC就可以了

注入代码:

但是驱动中使用NtQueueApcThread,由于Zw系列函数不提供则个接口,所以需要自己写一下~
因为需求只需要32位系统所以我这里直接用了int 0x2e来调用。
NTSTATUS NTAPI MyNtQueueApcThread(
__in HANDLE ThreadHandle,
__in PVOID ApcRoutine,
__in_opt PVOID ApcArgument1,
__in_opt PVOID ApcArgument2,
__in_opt PVOID ApcArgument3
)
{
NTSTATUS ns;
__asm
{
push eax
push ApcArgument3
push ApcArgument2
push ApcArgument1
push ApcRoutine
push ThreadHandle
mov eax,ZwQueueApcThreadId
mov edx,esp
int 0x2e
mov ns,eax
pop eax
}
return ns;
}
至于注入APC需要的三个参数中第一个参数,因为获取比较麻烦,直接使用符号表来解决。具体代码参看附件了~~~
PVOID getApcDispatchAddress()
{
PVOID lpRet=NULL;
if(GetModuleHandleA("kernelbase.dll"))
{
//高版本系统
lpRet = SymGetProcAddress(L"ntdll.dll",L"RtlDispatchAPC");
}
else
{
lpRet = SymGetProcAddress(L"kernel32.dll",L"BaseDispatchAPC");
}
printf("%p",lpRet);
return lpRet;
}
其中通信部分使用我的调戏系列中的CreateFile通信方式。
符号获取未导出名称函数的代码随便从MSDN参考的~
NewInjectDrv.zip
压缩打包使用360压缩,winrar打不开的朋友可以下载360安全卫士,然后装一个360压缩(不算是给360打广告吧)。

