首页
论坛
课程
招聘
[分享]老文章系列:APC注入DLL的梗
2014-4-16 06:14 32064

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

2014-4-16 06:14
32064
本文核心就是调用简单的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打广告吧)。


第五届安全开发者峰会(SDC 2021)议题征集正式开启!

上传的附件:
收藏
点赞0
打赏
分享
最新回复 (67)
雪    币: 132
活跃值: 活跃值 (28)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
fatecaster 活跃值 1 2014-4-16 08:12
2
0
前排,学习
雪    币: 421
活跃值: 活跃值 (19)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
guobing 活跃值 2014-4-16 08:19
3
0
占坑学习。。
雪    币: 36
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
天一十年 活跃值 2014-4-16 08:25
4
0
卖弄这种写法很有意思是吧

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;
}

CALL一个API需要INLINE ASM?还用INT 2E?
雪    币: 230
活跃值: 活跃值 (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
dwlsxj 活跃值 2014-4-16 09:26
5
0
学习了,谢谢分享。
雪    币: 27
活跃值: 活跃值 (25)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
liuqiangni 活跃值 2 2014-4-16 09:47
6
0
玩的就是高端大气上档次, 屌丝看不懂的才叫高端...
雪    币: 36
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
天一十年 活跃值 2014-4-16 10:04
7
0
这种做法,说好听点叫做“**”,说难听点,叫做“居心叵测、误导新手、培养不良编程习惯”。

我搞编程少说也15年了,发现就是这个WINDOWS内核圈子怪事特别多。
雪    币: 604
活跃值: 活跃值 (365)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
Morgion 活跃值 1 2014-4-16 10:10
8
0
不如ZwCreateThreadEx来的实在
雪    币: 54
活跃值: 活跃值 (148)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
暗月之魂 活跃值 2014-4-16 13:06
9
0
确实,内核圈子风气很不好。
雪    币: 8671
活跃值: 活跃值 (665)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
cvcvxk 活跃值 10 2014-4-16 13:22
10
0
直接call NtQueueApcThread的直接用typedef那种方式就行,但是考虑调用时的thread里PrevMode不一定符合规则,所以直接采用重新走int 0x2e的方法。

雪    币: 129
活跃值: 活跃值 (33)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
xSpy 活跃值 2 2014-4-16 15:03
11
0
WINDOWS内核圈子, 有这种东西存在?

膜拜15年的大牛,这就上纲上线了,看来老V仇家多啊
雪    币: 8671
活跃值: 活跃值 (665)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
cvcvxk 活跃值 10 2014-4-16 15:30
12
0
我也不知道windows内核会有圈子。
30年打酱油经验的我也被人加入圈子了。
这是不是传说中的被圈子?

雪    币: 36
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
天一十年 活跃值 2014-4-16 15:56
13
0
我根本不认识楼主(如果楼主就是你说的老V)。我只是看不惯这种写法而已。
雪    币: 36
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
天一十年 活跃值 2014-4-16 15:58
14
0
调用ZwQueueApcThread就不能用typedef的写法?
我还以为ZwQueueApcThread跟NtQueueApcThread只有地址上的差别!原来不能用typedef定义!

谢谢你,让我多学了一招!
雪    币: 8671
活跃值: 活跃值 (665)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
cvcvxk 活跃值 10 2014-4-16 16:00
15
0
这是说认识呢,还是不认识呢?

请发个更好的调用未导出的nt api的出来~
这更简单快捷,而且说明问题,我真不知道除了安定和谐的通过SystemService之外的方法能绕过可怕的PrevMode限定问题。
雪    币: 36
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
天一十年 活跃值 2014-4-16 16:08
16
0
呵呵,手滑打错字,初到贵圈,现在大概知道你有点名气,但不算认识你!

听说贵人粉丝很多,怕被喷,不再回复本贴!
雪    币: 8671
活跃值: 活跃值 (665)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
cvcvxk 活跃值 10 2014-4-16 16:43
17
0
我没圈子,也没粉丝,求赐教。
雪    币: 551
活跃值: 活跃值 (360)
能力值: (RANK:400 )
在线值:
发帖
回帖
粉丝
莫灰灰 活跃值 9 2014-4-16 16:49
18
0
PrevMode啥的可以直接改的。
雪    币: 478
活跃值: 活跃值 (577)
能力值: ( LV12,RANK:1010 )
在线值:
发帖
回帖
粉丝
sudami 活跃值 25 2014-4-16 18:50
19
0
广告打的不错。。。
雪    币: 5
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
rqqeq 活跃值 2014-4-16 19:30
20
0
你说的这个东西看雪过去出现过……还是r3版……
顺便说句……膜拜如此高端大气的写法
雪    币: 8671
活跃值: 活跃值 (665)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
cvcvxk 活跃值 10 2014-4-16 19:40
21
0
没办法,winrar现在不靠谱了。只能撸360压缩了~

雪    币: 8671
活跃值: 活跃值 (665)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
cvcvxk 活跃值 10 2014-4-16 19:43
22
0
是啊,问题硬编码不符合某些事儿,难道也从符号取得?如果全符号,自然啥都没问题了~~

雪    币: 8671
活跃值: 活跃值 (665)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
cvcvxk 活跃值 10 2014-4-16 19:44
23
0
我只能说APC的梗太多了~
好吧,我承认我低俗了一次,以后我全部使用符号表获取地址和偏移。
雪    币: 100
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
totest 活跃值 2014-4-16 20:30
24
0
APC注入能稳定么?
雪    币: 272
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
AASSMM 活跃值 2014-4-16 20:30
25
0
本来玩对抗就是不按常规出牌,竟然有人迂腐到非要按常规来写,还自称15年写码经历。。。。
游客
登录 | 注册 方可回帖
返回