针对一道CS面试题样本的详细分析
字数 1478 2025-08-05 08:19:13
Python编译的CS木马样本分析教学文档
1. 样本概述
这是一个使用Python 3.10编译的Cobalt Strike (CS)木马样本,包含以下组件:
- 一个EXE可执行文件
- 一个JSON配置文件(1.json)
样本特点:
- 使用AES加密算法保护payload
- 包含Loader和Shellcode两部分
- 具有反分析特性(pycdc工具无法完全反编译)
2. 样本分析步骤
2.1 初始文件检查
样本包含两个文件:
- 可执行文件(EXE):使用PyInstaller编译的Python程序
- 1.json:加密的配置文件,包含"code"和"load"两个字段
2.2 反编译Python EXE
使用工具链:
- pyinstxtractor:解包PyInstaller编译的EXE
- 确认Python版本为3.10
- pycdc:尝试反编译pyc文件
- 只能部分反编译,遇到困难
- pycdas:反汇编pyc文件获取字节码
2.3 字节码分析关键发现
通过分析字节码发现:
- AES密钥硬编码在代码中:
dfhkAsDFAjDShdfu - 解密流程:
key = "dfhkAsDFAjDShdfu" decrypted_data = aesdecypto.decrypt(encrypted_data) hex_data = decrypted_data.fromhex()
2.4 AES解密模块分析
aesdecypto模块特性:
- 算法:AES-CBC模式
- 填充:PKCS7Padding
- 数据块:128位
- KEY和IV相同,均为16字节
可以使用在线工具解密(如http://tool.chacuo.net/cryptaes):
- 输入:加密的JSON数据
- 密钥:
dfhkAsDFAjDShdfu - IV:与密钥相同
2.5 解密后的payload分析
解密1.json后得到两部分:
-
code部分:Shellcode
- C2服务器:119.29.82.40
- HTTP请求路径:/QlXH
- 行为:循环执行HTTP请求等待服务器指令
-
load部分:Loader程序
- 功能:分配内存空间
- 将Shellcode加载到内存
- 创建线程执行Shellcode
2.6 威胁情报验证
通过威胁情报平台查询C2 IP(119.29.82.40):
- 已被标记为Cobalt Strike木马
- 自动化分析脚本匹配到CS反向Shell特征
3. 技术难点解析
本样本分析的难点在于:
-
pycdc无法完全反编译pyc文件
- 解决方案:使用pycdas反汇编获取字节码
- 需要人工阅读和理解字节码逻辑
-
加密算法识别
- 通过字节码中的常量加载指令发现硬编码密钥
- 识别加密模式为AES-CBC
-
多层payload结构
- EXE → 解密JSON → Loader → Shellcode
- 需要逐层分析
4. 分析技巧总结
- 多工具结合:当主要工具失效时,尝试替代方案
- 字节码阅读:掌握Python字节码有助于分析编译后的样本
- 加密算法识别:关注硬编码字符串和常量加载
- 威胁情报关联:验证发现的IoC(如C2 IP)
- 自动化特征匹配:使用脚本匹配已知恶意代码特征
5. 防御建议
针对此类攻击的防御措施:
- 监控Python编译的可执行文件行为
- 检测AES解密例程的内存操作
- 阻止与已知C2 IP的通信
- 分析网络流量中的可疑HTTP路径(如/QlXH)
- 使用沙箱分析可疑的Loader行为
6. 扩展研究方向
- PyInstaller编译样本的其他分析方法
- Python字节码混淆和反混淆技术
- Cobalt Strike Beacon的更多变种分析
- 内存中Shellcode检测技术
- 无文件攻击的检测方法
通过本案例的分析,可以掌握Python编译恶意样本的分析方法,特别是当自动化工具失效时的人工分析技巧。