首页
社区
课程
招聘
[分享]老文章系列:APC注入DLL的梗
发表于: 2014-4-16 06:14 35908

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

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


[课程]Linux pwn 探索篇!

上传的附件:
收藏
免费 5
支持
分享
最新回复 (67)
雪    币: 135
活跃值: (63)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
2
前排,学习
2014-4-16 08:12
0
雪    币: 10026
活跃值: (158)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
占坑学习。。
2014-4-16 08:19
0
雪    币: 37
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
卖弄这种写法很有意思是吧

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?
2014-4-16 08:25
0
雪    币: 230
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
学习了,谢谢分享。
2014-4-16 09:26
0
雪    币: 69
活跃值: (157)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
6
玩的就是高端大气上档次, 屌丝看不懂的才叫高端...
2014-4-16 09:47
0
雪    币: 37
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
这种做法,说好听点叫做“**”,说难听点,叫做“居心叵测、误导新手、培养不良编程习惯”。

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

2014-4-16 13:22
0
雪    币: 138
活跃值: (306)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
11
WINDOWS内核圈子, 有这种东西存在?

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

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

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

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

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

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

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