Xeno-RAT通信模型剖析及自动化解密脚本实现
字数 1907 2025-08-03 16:43:52
Xeno-RAT通信模型剖析及自动化解密脚本实现
概述
Xeno-RAT是一款开源的远程访问工具(RAT),本文将从多个角度深入剖析其工作原理,包括利用分析、配置信息提取、功能分析、通信模型分析以及自动化解密脚本的实现。
开源Xeno-RAT利用分析
项目基本信息
- 首次发布时间:2023年10月17日
- 最新版本:v1.8.7(2024年2月15日发布)
- 开发语言:C#
- 核心模块:
- Client端
- Server端
- Plugin插件模块
- GitHub地址:https://github.com/moom825/xeno-rat
生成Client端木马
- 运行Xeno-RAT控制端GUI界面
- 选择【Builder】菜单进行自定义配置
- 配置包括:
- 连接IP/域名
- 监听端口
- 通信加密密码
- 其他自定义选项
木马上线流程
- 在控制端选择【Listener】菜单配置监听端口及通信加密密码
- 在受控主机运行Client端木马程序
- 木马成功连接后,控制端显示上线主机信息
Xeno-RAT配置信息提取
配置信息存储位置
- Client端:位于
xeno_rat_client命名空间的Program类中 - Server端:位于控制端程序当前目录的
Config.json文件
加密密钥生成
- 通信加密密码通过SHA256运算生成
EncryptionKey - 代码实现:
// 示例SHA256计算代码
byte[] keyBytes = Encoding.UTF8.GetBytes(password);
SHA256 sha256 = SHA256.Create();
byte[] hashBytes = sha256.ComputeHash(keyBytes);
string encryptionKey = BitConverter.ToString(hashBytes).Replace("-", "");
Xeno-RAT功能分析
核心功能实现
-
配置信息管理
- 控制端修改配置后自动更新
Config.json文件 - Client端通过修改
stub目录下的xeno rat client.exe程序生成
- 控制端修改配置后自动更新
-
加密通信机制
- 加密流程:
- 使用AES算法加密数据
- 调用
ntdll.dll的RtlCompressBuffer函数压缩数据
- 解密流程:
- 调用
ntdll.dll的RtlDecompressBuffer函数解压数据 - 使用AES算法解密数据
- 调用
- 加密流程:
-
插件式功能架构
- 通过动态加载插件DLL实现各种远控功能
- 主要功能插件列表:
| 插件文件名 | 对应菜单功能 |
|---|---|
| Chat.dll | Fun->Chat |
| File manager.dll | System->File Manager |
| Hvnc.dll | Surveillance->Hvnc |
| KeyLogger.dll | Surveillance->Key Logger |
| ProcessManager.dll | System->Process Manager |
| ScreenControl.dll | Surveillance->Screen Control |
| WebCam.dll | Surveillance->WebCam |
Xeno-RAT通信模型分析
通信数据包结构
Xeno-RAT通信模型可分为三类:
-
第一类载荷
- 结构:4字节载荷长度 + 1字节标志(00) + AES加密数据
- 直接AES解密即可
-
第二类载荷
- 结构:4字节载荷长度 + 1字节标志(03) + AES加密数据
- AES解密后数据包含:
- 1字节标志(00/01,指示是否压缩)
- 载荷数据
-
第三类载荷
- 结构:4字节载荷长度 + 1字节标志(03) + AES加密数据
- AES解密后数据包含:
- 1字节标志(01表示压缩)
- 4字节后续载荷长度
- 压缩的载荷数据
会话通信流程
- 第一个会话:获取系统基本信息
- 第二个会话:心跳连接及开启主会话
- 第三个会话:主会话,传输执行远控指令
- 功能插件会话:
- FileManager:开启两个会话(传输载荷+功能通信)
- ProcessManager:开启一个会话(传输载荷及通信数据)
模拟构建通信解密程序
解密程序功能
- 批量解密多个会话的通信数据
- 自动识别并处理不同类型的通信载荷
- 支持从Wireshark导出的"C Arrays"格式数据
代码结构
- main.go:主程序,处理文件输入和输出
- xenorat.go:核心解密逻辑实现
- common.go:通用工具函数
核心解密逻辑
func Decrypt(data []byte, key string) (decryptd_text []byte) {
key_sha256 := HashData_sha256([]byte(key))
aes_key, _ := hex.DecodeString(key_sha256)
aes_iv, _ := hex.DecodeString("00000000000000000000000000000000")
var header Header
if data[0] == byte(3) {
data1 := BTruncate(data, 1)
data2, _ := Aes_z_Decrypt(data1, aes_key, aes_iv)
if data2[0] == byte(2) {
return data2
}
header.ParseHeader(data2)
data3 := BTruncate(data2, header.T_offset)
if header.Compressed {
return decompress(data3, header.OriginalFileSize)
}
return data3
}
// ...其他解密逻辑
}
使用说明
- 从Wireshark导出通信数据为"C Arrays"格式
- 将多个会话数据保存到同一目录
- 运行解密程序,指定密钥和输入目录
- 程序将自动解密并输出结果文件
总结
本文全面剖析了Xeno-RAT的工作原理,重点分析了其通信模型和加密机制,并提供了自动化解密脚本的实现方案。通过理解这些技术细节,安全研究人员可以更好地检测和分析Xeno-RAT的攻击活动,开发相应的防御措施。