欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

[分享]老文章系列:APC注入DLL的梗

[分享]老文章系列: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打广告吧)。

上传的附件 clipboard.png
clipboard1.png
clipboard2.png
clipboard3.png
NewInjectDrv.zip

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途。
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功