yusakul 发表于 2020-12-16 16:12

大灰狼RAT样本分析

本帖最后由 yusakul 于 2020-12-16 16:21 编辑

样本为远控客户端,样本联网下载大灰狼远控dll,其导出函数DllFuUpgradrs注册自启服务、连接服务端,接收服务端指令来控制用户系统。
![](https://gitee.com/yusakul/ImageHostingService/raw/master/20201216113645.png)
样本执行流程

# ()样本概况

## [**1.1  **]()**样本信息**

File:菲律宾确诊新型肺炎病毒.exe
Size: 217088bytes
MD5: 30C13ED8030DDA8A578E822B60E3B24F
SHA1: A54F9C32425AD9FDBA48938418508BA54582EDE6
CRC32: 1B8896E5

## [**1.2  **]()**测试环境及工具**

运行平台:Windows 7 X64
系统监控工具:火绒剑
调试工具:IDA Pro、OD

# ()

![](https://gitee.com/yusakul/ImageHostingService/raw/master/20201216113713.png)
打开N62.dll文件(解密该文件)

![](https://gitee.com/yusakul/ImageHostingService/raw/master/20201216113716.png)
释放自身到系统目录并启动

![](https://gitee.com/yusakul/ImageHostingService/raw/master/20201216113719.png)
写入的注册表键值

# ()逆向分析

## ()菲律宾确诊新型肺炎病毒.exe分析

![](https://gitee.com/yusakul/ImageHostingService/raw/master/20201216113723.png)
PE文件基本信息

### 3.1.1 入口函数

检查当前系统版本配置分辨率。
![](https://gitee.com/yusakul/ImageHostingService/raw/master/20201216113727.png) ![](https://gitee.com/yusakul/ImageHostingService/raw/master/20201216113730.png)
判断系统版本

![](https://gitee.com/yusakul/ImageHostingService/raw/master/20201216122814.png)
设置屏幕分辨率

### 3.1.2 payload的下载与解密

检查payload文件是否存在:
![](https://gitee.com/yusakul/ImageHostingService/raw/master/20201216113733.png)

文件不存在,则下载N62.dll:
![](https://gitee.com/yusakul/ImageHostingService/raw/master/20201216113737.png)

文件存在则读取N62.dll,检查标识是否一致
![](https://gitee.com/yusakul/ImageHostingService/raw/master/20201216113739.png)
检查payload标识

动态调试下查看到payload打开位置:
![](https://gitee.com/yusakul/ImageHostingService/raw/master/20201216113802.png)
读取C:\\Program Files\\AppPath\\N62.dll

检查payload存在且标识正确后,解密N62.dll,并加载它,遍历导出表寻找到payload的需要的导出函数地址:DllFuUpgradrs
![](https://gitee.com/yusakul/ImageHostingService/raw/master/20201216113742.png)

动态调试dump解密后的N62.dll,下图可以看到解密后的PE文件魔数”MZ”。
![](https://gitee.com/yusakul/ImageHostingService/raw/master/20201216113754.png)
N62.dll解密完成

#### 3.1.2.1 解密算法

![](https://gitee.com/yusakul/ImageHostingService/raw/master/20201216113808.png)
解密函数

观察解密操作特征,得知加密算法为RC4算法,其为对称算法,通过简单的异或实现加解密。

![](https://gitee.com/yusakul/ImageHostingService/raw/master/20201216113814.png)
RC4算法初始化函数

![](https://gitee.com/yusakul/ImageHostingService/raw/master/20201216113819.png)
加解密函数

#### 3.1.2.2 加载payload: N62.dll

![](https://gitee.com/yusakul/ImageHostingService/raw/master/20201216122506.png)
通过读取PE文件关键字段:imagebase加载基址、sizeofimage加载在内存中的大小。
根据基址和大小,在基址地址申请相应大小的空间,加载dll并修改内存属性为可执行。

#### 3.1.2.3 获取并调用导出函数DllFuUpgradrs

![](https://gitee.com/yusakul/ImageHostingService/raw/master/20201216122512.png)
解析导出表

实现手段:根据加载基址获取数据目录表,获取到数据表的第0项:导出表地址。遍历导出表得到需要的函数地址。

![](https://gitee.com/yusakul/ImageHostingService/raw/master/20201216122517.png)
对比导出函数名称

简单验证地址非零后,样本直接调用DllFuUpgradrs函数,参数为一段密文与密钥。
![](https://gitee.com/yusakul/ImageHostingService/raw/master/20201216122519.png)
调用DllFuUpgradrs([密文],)

![](https://gitee.com/yusakul/ImageHostingService/raw/master/20201216122522.png)
N62.dll 导出表

![](https://gitee.com/yusakul/ImageHostingService/raw/master/20201216122525.png)
DllFuUpgradrs地址

## ()

Dump得到N62.dll,文件被加壳(upx壳)。
![](https://gitee.com/yusakul/ImageHostingService/raw/master/20201216122528.png)
N62.dll文件信息

![](https://gitee.com/yusakul/ImageHostingService/raw/master/20201216122532.png)
N62.dll脱壳后信息

### 3.2.1 导出函数DllFuUpgradrs

动态调试查看函数调用时的寄存器、堆栈与内存信息:
![](https://gitee.com/yusakul/ImageHostingService/raw/master/20201216122536.png)
DllFuUpgradrs调用

函数DllFuUpgradrs行为基本描述:
(1)     传入参数分别为密文和密钥
(2)     解密密文,将得到的明文赋值给各个全局变量
(3)     明文内容包括服务器信息,各类设置的参数
(4)     复制自身到系统目录运行,并设置开机自启
(5)     创建多个注册表键值
(6)     连接服务端,并创建线程接收处理服务端指令
(7)     主要远控功能包括:文件管理、屏幕监视、摄像头记录、音频记录、键盘记录、远程shell、系统管理。

![](https://gitee.com/yusakul/ImageHostingService/raw/master/20201216122542.png)
解密并根据明文赋值

![](https://gitee.com/yusakul/ImageHostingService/raw/master/20201216122544.png)
解密密文操作:异或

![](https://gitee.com/yusakul/ImageHostingService/raw/master/20201216122547.png)
根据明文给各变量赋值

![](https://gitee.com/yusakul/ImageHostingService/raw/master/20201216122551.png)
获取本进程路径

![](https://gitee.com/yusakul/ImageHostingService/raw/master/20201216122557.png)
检查运行在系统目录

![](https://gitee.com/yusakul/ImageHostingService/raw/master/20201216122600.png)
创建服务开机自启

DllFuUpgradrs查询注册表检查自身服务是否开启:
![](https://gitee.com/yusakul/ImageHostingService/raw/master/20201216122603.png)
检查服务

![](https://gitee.com/yusakul/ImageHostingService/raw/master/20201216122606.png)
查询注册表

DllFuUpgradrs检查服务完成,开始连接服务端,并获取功能分发函数OnRecvive:
![](https://gitee.com/yusakul/ImageHostingService/raw/master/20201216122610.png)
连接服务端

### 3.2.2 连接服务端

样本与服务端通讯使用TCP socket,host与port均为前文解密的明文数据。
Host: 91.193.102.149
Port: 0x51
![](https://gitee.com/yusakul/ImageHostingService/raw/master/20201216122614.png)
Socket通信

连接完成,创建线程接收服务端数据,并处理对应指令:
![](https://gitee.com/yusakul/ImageHostingService/raw/master/20201216122620.png)
创建线程:recv & OnReceive

### 3.2.3 接收&处理指令线程

上节中,连接服务端完成后,则创建线程接收并处理服务端指令。
![](https://gitee.com/yusakul/ImageHostingService/raw/master/20201216122623.png)

新线程基本操作:
(1)接收服务端数据;
(2)解密数据(rc4算法);
(3)解析数据包获取指令;
(4)分发功能执行OnReceive函数。
具体见下图。

![](https://gitee.com/yusakul/ImageHostingService/raw/master/20201216122626.png)
接收数据,并解密

![](https://gitee.com/yusakul/ImageHostingService/raw/master/20201216122630.png)
解析获取指令,并执行功能分发函数

### 3.2.4 功能分发

功能分发函数OnRecvive地址如下:
![](https://gitee.com/yusakul/ImageHostingService/raw/master/20201216122634.png)
OnRecvive地址

OnRecvive地址在函数DllFuUpgradrs中,随服务端地址、服务端端口、创建的本地服务名称一同保存到结构体对象(类对象),作为参数提供给各种成员函数引用。
![](https://gitee.com/yusakul/ImageHostingService/raw/master/20201216122637.png)
获取功能分发函数地址

OnRecvive分发执行主要功能如下,包括:文件管理、屏幕监视、摄像头、键盘记录、录音、系统管理、远程shell等等。
![](https://gitee.com/yusakul/ImageHostingService/raw/master/20201216122642.png)
OnRecvive

#### 3.2.4.1 文件管理

![](https://gitee.com/yusakul/ImageHostingService/raw/master/20201216122646.png)
文件管理

#### 3.2.4.2 屏幕监控

基本流程为:扫描光标资源保存,扫描屏幕并转化为位图,将数据发送。
![](https://gitee.com/yusakul/ImageHostingService/raw/master/20201216122648.png)
屏幕监视线程

![](https://gitee.com/yusakul/ImageHostingService/raw/master/20201216122653.png)
![](https://gitee.com/yusakul/ImageHostingService/raw/master/20201216122821.png)
屏幕监视初始化函数

![](https://gitee.com/yusakul/ImageHostingService/raw/master/20201216122656.png)
发送图片数据

#### 3.2.4.3 摄像头

![](https://gitee.com/yusakul/ImageHostingService/raw/master/20201216122700.png)
压缩视频数据,并发送

![](https://gitee.com/yusakul/ImageHostingService/raw/master/20201216122703.png)
XViD视频编码

#### 3.2.4.4 键盘记录

![](https://gitee.com/yusakul/ImageHostingService/raw/master/20201216122706.png)
拦截键盘消息

![](https://gitee.com/yusakul/ImageHostingService/raw/master/20201216122710.png)
记录键位虚拟码

![](https://gitee.com/yusakul/ImageHostingService/raw/master/20201216122713.png)
读取记录文件发送

#### 3.2.4.5 录音

![](https://gitee.com/yusakul/ImageHostingService/raw/master/20201216122717.png)
录音

#### 3.2.4.6 Shell管理

![](https://gitee.com/yusakul/ImageHostingService/raw/master/20201216122720.png)
远程运行cmd,并获取回显

#### 3.2.4.7 系统管理

![](https://gitee.com/yusakul/ImageHostingService/raw/master/20201216122724.png)
![](https://gitee.com/yusakul/ImageHostingService/raw/master/20201216122730.png)
操作各项系统设置

# ()

## ()服务端主机信息

IP地址为91.193.102.149;
Port端口为81(0x51)、9090(0x2382)。

## ()上线方式

除C&C服务器接收消息,还额外有三种上线方式:
![](https://gitee.com/yusakul/ImageHostingService/raw/master/20201216122735.png)
其他3种上线方式

tanlini 发表于 2020-12-16 23:57

前几年我们玩大灰狼玩得很嗨的,这个远控真心不错,兼容性不得鸟。做下免杀,抓国外的鸡杠杠的。

EteRnal丶TL 发表于 2020-12-16 18:19

这款软件发一下谢谢

zipl1985 发表于 2020-12-17 08:12

很高深呀,学习看看

dork 发表于 2020-12-17 09:28

N年前用过RAT

chenkeai深蓝 发表于 2020-12-17 09:56

有点深奥,目前还看不懂,不过特别感谢楼主大人

ALBERTLEE 发表于 2020-12-17 10:32

感谢分享,我爱破解

海棠啊 发表于 2020-12-17 11:39

可以分享一下控制端吗

上课不学习 发表于 2020-12-17 11:46

受教了!

忽闻岸上踏歌声 发表于 2020-12-17 12:01

谢谢来学习啦啦啦
页: [1] 2 3 4 5
查看完整版本: 大灰狼RAT样本分析