竞猜排行 / 2025-10-19 09:24:13

1、起因

从哥们儿那找到了一个超级注入的工具,打开一看加了vmp,然后还有驱动的驱动,于是这里把驱动提取出来,简单分析一下。

1.1运行

让程序先把驱动释放出来,可以看到这里需要买卡,然后才会释放驱动加载 (简单破解一下就行,不是重点)

1.2破解之后

下一个CreateServiceA断点,让它在加载驱动之前断下,接着将驱动拷贝出来。从下图可以看到虽然驱动有签名,但是个过期签名,高版本windows10上是加载不上的。

2、驱动分析

好消息是驱动没有加壳,可以f5分析一下

2.1Wdf驱动

简单浏览一下发现驱动没有设备对象,也没有符号链接,不知道怎么通信的?

2.2初始化

主要是两个函数,第一个是利用系统的回调做自己的通信函数,第二个是注册一个ob回调保护自己。

2.3ob回调

有意思的是它的起始地址并不是在当前驱动中,而是去找ntos中的ffe1(jmp ecx),这里的ecx应该就是RegistrationContext(回调函数中的context),他把RegistrationContext替换成自己的回调。

回调函数很简单,就是当有其他进程打开自己的时候降权。

这里注册ob回调系统会检查驱动的签名,常见的方式是下面的代码。但他这里就不,它通过hookMmVerifyCallbackFunction返回1来绕过。

#ifdef _WIN64

PLDR_DATA_TABLE_ENTRY64 ldr;

ldr = (PLDR_DATA_TABLE_ENTRY64)pDriverObj->DriverSection;

#else

PLDR_DATA_TABLE_ENTRY32 ldr;

ldr = (PLDR_DATA_TABLE_ENTRY32)pDriverObj->DriverSection;

#endif

ldr->Flags |= 0x20;

2.4 r3和r0通信

驱动使用的通信方式不常见,利用的是ExRegisterAttributeInformationCallback函数中的两个回调函数ExpDisSetAttributeInformation和ExpDisQueryAttributeInformation做通信。

ExpDisQueryAttributeInformation在ExQueryAttributeInformation中被调用

ExQueryAttributeInformation在NtQueryInformationFile中FileInformationClass为FileUnusedInformation时会被调用。

ExpDisQueryAttributeInformation同理,说明这个驱动的作者还是很有心的,找到了两个可以被利用的回调函数作为驱动r0和r3通信。

2.5 提供给r3的功能函数

一个有七个,这里简单的看一下

1、查找模块基址

2、读取目标地址内存

3、写入数据到目标进程

这里如果ZwProtectVirtualMemory失败,之后会关闭cr0的页保护在试一下。

顺带提一下,使用MmCopyVirtualMemory没有必要自己手动附加到目标进程,因为函数内部会帮你附加,如下图所示。

4、查询目标进程内存信息

5、设置之前提到的保护进程的pid

6、在目标进程中申请内存

7、最重要的是如何执行代码,它并没有调用Createthread的一类函数,而是通过修改Trap_frame和Wow64_context来执行自己的代码。

获取目标进程的一个线程对象

接着暂停线程对象

在判断是x64还是x32

x32,获取到teb之后加了0x1488是什么意思?通过查找资料之后不难发现这个是 WOW64_CONTEXT的地址,修改它的eip就能控制查询的执行。

x64下eprocess+0x28是InitialStack,且InitialStack指向的是TrapFrame这个结构体,通过修改TrapFrame的rip就能控制x64 r3下进程的流程,这里的shellcode是保存寄存器和跳转,没详细去分析。

接着插入一个工作线程,用来回收之前申请的内存资源

最后恢复线程,执行shellcode加载dll

over,该驱动在启动线程和r3 r0通信上使用了不常见手法,该驱动作者还是很认真的学习了很多知识。

我真是太菜了!!呜呜呜!!

使用天际通全球流量
2017年立秋是哪天