MSRSCI.jar远控组件分析:加密机制、插件加载与内网穿透行为揭秘
字数 2118 2025-12-05 12:10:36
MSRSCI.jar远控组件分析教学文档
1. 组件基础信息
1.1 文件结构分析
目标文件夹WinApSvc包含以下关键文件:
WinApSvc/
├── Java/ # 自带Java运行环境
├── plugins/ # 插件和数据存储目录
│ ├── data/ # 数据库文件
│ └── logs/ # 日志文件
├── MSRSCI.exe # 主程序入口
├── MSRSCI.jar # 核心恶意程序(加密)
├── MSRSCI.xml # 服务配置文件
└── start-svc.exe # 服务启动器
1.2 核心文件功能说明
- MSRSCI.jar:加密的主程序,包含远控核心逻辑
- start-svc.exe:jar文件启动器,负责解密和加载
- MSRSCI.xml:Windows服务配置,定义启动参数
2. 加密机制分析
2.1 加密保护机制
MSRSCI.jar使用XJar加密技术保护关键class文件:
- 加密算法:AES/CBC/PKCS5Padding
- 密钥长度:128位
- IV长度:128位
- 密码:
ed1ee71da4a949e580c3f344aba5ab2d
2.2 解密参数获取方法
方法一:动态调试start-svc.exe
- 使用IDA加载start-svc.exe
- 在main_main函数中设置断点
- 分析os_exec_Command()调用前的参数构造
- 获取完整启动命令:
Java\jre\bin\java -jar MSRSCI.jar AES/CBC/PKCS5Padding 128 128 ed1ee71da4a949e580c3f344aba5ab2d
方法二:内存dump分析
- 使用VisualVM连接运行中的Java进程
- 执行Heap Dump操作
- 搜索XjarClassLoader对象
- 提取key和iv值:
raw_key = [-126, 123, -47, -59, 15, -126, 41, -52, 46, 122, 61, 126, 41, -74, 3, -65]
raw_iv = [54, -26, -90, 32, 90, -96, -13, 41, -102, 86, 61, 94, -24, 103, 50, 97]
2.3 解密脚本实现
import zipfile
from Crypto.Cipher import AES
from Crypto.Util.Padding import unpad
def decrypt_xjar(data: bytes, key: bytes, iv: bytes):
cipher = AES.new(key, AES.MODE_CBC, iv)
if len(data) % 16 != 0:
data += b"\x00" * (16 - len(data) % 16)
dec = cipher.decrypt(data)
try:
dec = unpad(dec, 16)
except:
pass
return dec
3. 核心功能分析
3.1 插件加载机制
3.1.1 PluginUtil类功能
- 从远程URL下载jar插件文件
- 管理插件版本和依赖
- 提供插件删除和清理功能
- 保留关键数据文件(version.txt、agent.mv.db)
3.1.2 插件配置文件解密
version.txt使用AES/ECB加密,密钥硬编码为:68ddcdccb31b4354940eb1a454947e0c
解密脚本:
import base64
from Crypto.Cipher import AES
import hashlib
class YamlDecryptor:
def __init__(self):
self.AES_KEY = "68ddcdccb31b4354940eb1a454947e0c"
def create_secret_key(self):
sha1 = hashlib.sha1(self.AES_KEY.encode('utf-8')).digest()
return sha1[:16]
def decrypt(self, ciphertext):
encrypted_bytes = base64.b64decode(ciphertext)
cipher = AES.new(self.create_secret_key(), AES.MODE_ECB)
decrypted_bytes = unpad(cipher.decrypt(encrypted_bytes), AES.block_size)
return decrypted_bytes.decode('utf-8')
3.1.3 配置文件内容示例
{
"isNewVersion": "false",
"serverPath": "C:\\ClientManager_PSC",
"licenseKey": "187c5b35c3f44eb3b2b1ff9047735ef3",
"servers": "[{\"serverIp\":\"8.140.226.xxx\",\"enable\":true}]",
"upgradeUrl": "http://8.140.226.xxx:9010/version/update",
"overTime": "2025-11-02 13:00:00",
"jarLibs": "[\"proxy-agent.jar\",\"lib-agent.jar\",\"xjar-pscp.exe\"]",
"version": "2.1.0"
}
3.2 数据库操作分析
3.2.1 数据库连接信息
- 数据库文件:
plugins/data/agent.mv.db - 数据库类型:H2 Database
- 用户名:LAUNCHER
- 密码:通过SQLiteHelper类动态生成
3.2.2 关键数据表结构
配置表包含以下字段:
- serverIp:C2服务器地址
- licenseKey:许可证密钥
- jarLibs:插件库列表
- upgradeUrl:更新服务器地址
- overTime:过期时间
- version:程序版本
3.3 远程控制功能
3.3.1 LauncherController类
提供完整的远程管理接口:
- 插件管理(安装、卸载、更新)
- 脚本管理(备份、同步、恢复)
- 配置管理(读取、修改、保存)
- 代理连接管理
- 系统清理和升级
- 文件操作功能
3.3.2 CmdChannelHandler类
命令分发中心,处理以下指令类型:
- 心跳检测和维护
- 任务下发和执行
- 连接状态管理
- 控制消息传递
3.3.3 PscpService类
核心远程控制接口,具备以下能力:
- 远程数据库查询和修改
- 远程文件操作(浏览、删除、上传、下载)
- PowerShell命令执行
- 压缩包解压操作
3.4 内网穿透功能
3.4.1 基于Neutrino Proxy的实现
MSRSCI.jar集成了开源的Neutrino Proxy项目,提供:
- TCP/UDP端口转发
- 内网服务暴露
- 反向代理功能
- 隧道加密通信
3.4.2 代理连接建立流程
- 通过ProxyManager.add(ip, licenseKey)建立连接
- 创建加密通信隧道
- 维持长连接心跳
- 支持多服务器负载均衡
4. 行为特征分析
4.1 网络通信行为
- 定期连接C2服务器(8.140.226.xxx:9010)
- 使用HTTP协议进行插件更新
- 建立持久的代理隧道连接
- 支持服务器地址动态切换
4.2 文件系统操作
- 在C:\ClientManager_PSC目录存储插件和备份
- 维护版本控制文件version.txt
- 使用数据库文件持久化配置
- 支持远程文件操作
4.3 进程和服务行为
- 注册为Windows系统服务
- 使用start-svc.exe作为服务启动器
- 自带Java运行环境避免依赖
- 支持服务自更新和重启
5. 检测和防护建议
5.1 检测指标
-
文件系统指标
- WinApSvc目录结构
- C:\ClientManager_PSC目录存在
- version.txt加密配置文件
-
网络通信指标
- 与8.140.226.xxx:9010的通信
- 异常的代理隧道连接
- 定期的心跳数据包
-
进程行为指标
- start-svc.exe服务进程
- 异常的Java进程参数
- 服务描述伪装
5.2 防护措施
- 监控可疑的目录创建行为
- 检测异常的Java进程启动参数
- 阻断与已知C2服务器的通信
- 加强服务注册表的监控
6. 技术总结
MSRSCI.jar是一个高度专业化的远控程序,具有以下技术特点:
- 多层加密保护:使用XJar加密关键class文件
- 模块化设计:支持插件动态加载和更新
- 持久化机制:通过Windows服务实现自启动
- 网络穿透能力:集成专业的内网穿透组件
- 隐蔽通信:使用加密隧道和心跳维持连接
该组件体现了现代恶意软件的高度专业化特征,结合了加密保护、插件化架构、持久化驻留和网络穿透等先进技术。