某超级注入程序的驱动逆向

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通信上使用了不常见手法,该驱动作者还是很认真的学习了很多知识。

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
某flutter-app逆向分析是指对于一个使用flutter框架开发的应用进行逆向工程分析。逆向工程是通过分析应用的代码、二进制文件等来了解其内部实现细节。 首先,我们需要获取该应用的安装包文件(APK或IPA文件),然后进行解包操作,将其转换为可读取的文件目录结构。 接下来,我们可以使用一些工具来提取应用的资源文件、代码文件等。对于flutter-app来说,可以提取出dart文件,这是flutter的主要代码文件,其中包含了应用的逻辑实现。 通过阅读dart文件,我们可以了解应用的代码结构、数据模型、界面设计等。可以分析应用的逻辑实现方法,包括各种函数、类、方法的调用关系。 同时,还可以通过分析相关配置文件、资源文件等来了解应用的各种设置、资源加载方式等。 在逆向过程中,还可以使用一些调试工具来进一步了解应用的运行机制。例如,hook工具可以拦截应用的函数调用,并捕获输入输出数据,用于进一步分析。 逆向分析的目的可以有很多,比如了解应用的工作原理、发现潜在的漏洞或安全问题、提供参考用于自己的开发等。 需要注意的是,逆向分析需要遵守法律规定。未经授权的逆向分析可能侵犯他人的知识产权,涉及到隐私等方面的问题。因此,在进行逆向分析之前,应该了解并遵守当地相关法律法规,避免产生法律纠纷。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值