AsyncRAT通信模型剖析及自动化解密脚本实现
字数 1389 2025-08-10 08:28:52

AsyncRAT通信模型剖析及自动化解密脚本实现

概述

本文是AsyncRAT远控工具剖析系列的第二篇,重点分析AsyncRAT的通信模型和数据结构,并提供自动化解密脚本实现。第一篇为《AsyncRAT加解密技术剖析》。

整体通信流程

AsyncRAT的通信模型采用分层会话机制:

  1. 主会话通信:用于心跳连接和传输功能插件
  2. 子会话通信:当执行特定功能时启动,用于功能插件的专用通信

功能插件对应关系

功能插件DLL文件名 对应菜单功能 备注
Chat.dll Extra->Chat
Extra.dll Extra->Visit Website
FileManager.dll Monitoring->File Manager
FileSearcher.dll Miscellaneous->Files Searcher
LimeLogger.dll Monitoring->Keylogger
Miscellaneous.dll
Options.dll Extra->Get Admin Privileges
ProcessManager.dll Monitoring->Process Manager
Recovery.dll Monitoring->Password Recovery
RemoteCamera.dll Monitoring->Webcam
RemoteDesktop.dll Monitoring->Remote Desktop
SendFile.dll Send File->To Disk
SendMemory.dll Send File->To Memory

通信数据结构分析

外层通信数据结构

TLS解密后的外层通信数据结构:

08010000    // 后续载荷数据大小(0x108)
05010000    // 解压后载荷数据大小(0x105)
1f8b0800... // GZIP压缩数据(0x104字节)

解压后的数据结构示例:

8d          // 键值对数量(0x8d-0x80=13)
a6          // 键长度(0xa6-0xa0=6)
5061636b6574 // "Packet"
aa          // 值长度(0xaa-0xaa=10)
436c69656e74496e666f // "ClientInfo"
...         // 其他键值对

通信数据结构分类

根据源码分析,AsyncRAT针对不同数据类型采用不同的处理函数:

  • WriteNull
  • WriteString
  • WriteBinary
  • WriteFloat
  • WriteSingle
  • WriteBoolean
  • WriteUInt64
  • WriteInteger

内层通信数据结构

Msgpack数据结构

类型1

81          // 键值对数量(1)
A65061636B6574 // "Packet"
A57368656C6C   // "shell"

类型2(图片数据)

83          // 键值对数量(3)
A65061636B6574 // "Packet"
A977616C6C7061706572 // "wallpaper"
A5496D616765    // "Image"
C6          // 二进制标志
000D6B22    // 数据大小
...         // 图片数据
A3457865    // "Exe"
A42E6A7067  // ".jpg"

savePlugin数据结构

用于传输插件DLL文件:

83          // 键值对数量(3)
a65061636b6574 // "Packet"
aa73617665506c7567696e // "savePlugin"
a3446c6c    // "Dll"
c6          // 二进制标志
0003d39e    // 数据大小
00c20800    // 解压后大小
...         // DLL文件数据
a448617368  // "Hash"
...         // 哈希值

自动化解密脚本实现

代码结构

  1. main.go - 主程序逻辑
  2. common.go - 公共函数库

核心功能

  1. GZIP解压
func Gzip_Uncompress(gzippedBytes []byte) []byte {
    buf := bytes.NewBuffer(gzippedBytes)
    reader, err := gzip.NewReader(buf)
    defer reader.Close()
    uncompressedBytes, err := ioutil.ReadAll(reader)
    return uncompressedBytes
}
  1. MsgPack解析
func parseMsgPack(data []byte) (string, int) {
    // 解析键值对数量和数据内容
    // 处理嵌套的MsgPack和二进制数据
}
  1. 二进制数据处理
func readbinary(buf []byte) (output string, num int) {
    // 处理c4/c6标志的二进制数据
    // 自动保存DLL和图片文件
}

使用示例

输入:从Wireshark导出的原始通信数据
输出:

  1. 解密后的通信指令
  2. 自动提取的DLL/图片文件
  3. 数据结构分析结果

总结

本文详细剖析了AsyncRAT的通信模型和数据结构,并提供了自动化解密脚本的实现。关键点包括:

  1. 分层会话通信机制
  2. 多种数据结构处理方式
  3. 自动化解密和文件提取功能
  4. 完整的Go语言实现代码

该脚本可有效辅助安全研究人员分析AsyncRAT的通信行为,提取关键攻击载荷。

AsyncRAT通信模型剖析及自动化解密脚本实现 概述 本文是AsyncRAT远控工具剖析系列的第二篇,重点分析AsyncRAT的通信模型和数据结构,并提供自动化解密脚本实现。第一篇为《AsyncRAT加解密技术剖析》。 整体通信流程 AsyncRAT的通信模型采用分层会话机制: 主会话通信 :用于心跳连接和传输功能插件 子会话通信 :当执行特定功能时启动,用于功能插件的专用通信 功能插件对应关系 | 功能插件DLL文件名 | 对应菜单功能 | 备注 | |------------------|-------------|------| | Chat.dll | Extra->Chat | | | Extra.dll | Extra->Visit Website | | | FileManager.dll | Monitoring->File Manager | | | FileSearcher.dll | Miscellaneous->Files Searcher | | | LimeLogger.dll | Monitoring->Keylogger | | | Miscellaneous.dll | | | | Options.dll | Extra->Get Admin Privileges | | | ProcessManager.dll | Monitoring->Process Manager | | | Recovery.dll | Monitoring->Password Recovery | | | RemoteCamera.dll | Monitoring->Webcam | | | RemoteDesktop.dll | Monitoring->Remote Desktop | | | SendFile.dll | Send File->To Disk | | | SendMemory.dll | Send File->To Memory | | 通信数据结构分析 外层通信数据结构 TLS解密后的外层通信数据结构: 解压后的数据结构示例: 通信数据结构分类 根据源码分析,AsyncRAT针对不同数据类型采用不同的处理函数: WriteNull WriteString WriteBinary WriteFloat WriteSingle WriteBoolean WriteUInt64 WriteInteger 内层通信数据结构 Msgpack数据结构 类型1 : 类型2(图片数据) : savePlugin数据结构 用于传输插件DLL文件: 自动化解密脚本实现 代码结构 main.go - 主程序逻辑 common.go - 公共函数库 核心功能 GZIP解压 : MsgPack解析 : 二进制数据处理 : 使用示例 输入:从Wireshark导出的原始通信数据 输出: 解密后的通信指令 自动提取的DLL/图片文件 数据结构分析结果 总结 本文详细剖析了AsyncRAT的通信模型和数据结构,并提供了自动化解密脚本的实现。关键点包括: 分层会话通信机制 多种数据结构处理方式 自动化解密和文件提取功能 完整的Go语言实现代码 该脚本可有效辅助安全研究人员分析AsyncRAT的通信行为,提取关键攻击载荷。