查看: 1637|回复: 7
收起左侧

[原创分析] 【杂谈】如何使用IDA+Agent自动化分析样本——我的一次实战记录

[复制链接]
DisaPDB
发表于 2026-5-6 13:05:27 | 显示全部楼层 |阅读模式
本帖最后由 DisaPDB 于 2026-5-6 18:07 编辑

前排提醒:本文纯技术分享,不含任何样本,请放心阅读。如有雷同,那你电脑可能也有问题(笑)。
一、我是如何中马并发觉自己中马的?
昨天晚上闲着没事,开System Informer看了一下进程,列表里赫然躺着一个colorcpl.exe。等会,colorcpl.exe?
???


打开Ark一看……好好好,反射加载dll。
掏出 Process Explorer 一看,好家伙,一个我不认识的日历进程YXCalendar.exe内存映射里躺着一个熟悉的陌生人:libcurl.dll。
按理说 libcurl 出现倒也不奇怪,毕竟很多程序都要用。但问题是,这文件尺寸比正常的大了那么一丢丢……就一丢丢。多出来的那部分,不用想也知道是"房东加的隔断"。
而且,libcurl是白加黑重灾区。
更离谱的是,这东西在我电脑里不知道待了多久。可能是我装某破解软件的时候顺手带进来的,也可能是我下载了什么带"学习资料"字样的压缩包……算了不重要,先抓出来看看。
二、初见样本:一场典型的"白函数"噩梦
拖进 IDA,第一眼差点没被送走。


导出表翻开一看,6000+ 个导出函数,绝大多数都是 ??_7wxDialog 这种 C++ 模板/虚表符号。往下拉、往下拉、再往下拉……满屏都是这些白函数的 vftable 和 RTTI 信息,真正的恶意逻辑不知道藏在哪里。

这感觉就像你在一座垃圾山里找一颗钻石,但钻石外面包满了卫生纸。

我按经验去看了 OEP,标准的 CRT 初始化流程,干干净净。然后又用 strings 扫了一遍 .rdata——除了常规的 kernel32、msvcrt 这些,几乎没看到什么可疑字符串。倒是扫到了 libcurlOrg.dll,确认是 DLL 代{过}{滤}理劫持无疑,但恶意代码到底在哪?


  1. curl_easy_cleanup       -> libcurlOrg.curl_easy_cleanup
  2. curl_easy_duphandle     -> libcurlOrg.curl_easy_duphandle
  3. curl_easy_escape        -> libcurlOrg.curl_easy_escape
  4. curl_easy_getinfo       -> libcurlOrg.curl_easy_getinfo
  5. curl_easy_init          -> libcurlOrg.curl_easy_init
  6. curl_easy_perform       -> libcurlOrg.curl_easy_perform
  7. curl_easy_recv          -> libcurlOrg.curl_easy_recv
  8. curl_easy_send          -> libcurlOrg.curl_easy_send
  9. curl_easy_setopt        -> libcurlOrg.curl_easy_setopt
复制代码
(全是转发的函数调用……)
我手动翻了半天,越看越迷糊。那些白函数调用之间偶尔夹杂几个莫名其妙的 jmp,看着像是会跳转到某个非导出区段,但 IDA 的交叉引用根本连不上——因为压根就没引用,全是运行时拼出来的。
到这一步我已经有点烦躁了。这要是硬刚手工逆向,估计得通宵。
于是我一拍大腿:让 AI 来。
二、AI Agent 介入:自动化分析引擎

我之前的逆向工作流里有个自己写的 Python + Capstone 小脚本,本质上就是一个简单的递归反汇编器:从 OEP 出发,遇到 call 就递归,把指令打印出来。之前对付过几个小样本,还算顺手。

但这次的样本真正的恶意逻辑根本不经过 OEP,而是藏在某个导出函数里,再加上大量 call dword ptr [0xNNNN],没有符号,没有注释,看汇编等于看天书
于是我和 AI 商量了一下,决定给这个脚本做个升级:


3.1 改造一:支持从任意 RVA 出发递归反汇编
原来的脚本只能从 OEP 出发,这次加上 --rva 参数,可以从任何地址开始递归。这样我就能直接从 curl_global_init(RVA=0x0010F240)出发,不再被 OEP 那堆 CRT 垃圾淹没。
3.2 改造二:IAT 解析
这是最爽的一个改动。脚本读取 PE 的导入表,把 call dword ptr [0xNNNN] 自动解析成 call KERNEL32!CreateProcessW 这种人类可读的格式。
效果立竿见影——原本满屏的 call dword ptr [0x1010B2C0],现在一眼就能看出来这是 CreateProcessW、LoadLibraryA、GetProcAddress……恶意意图瞬间暴露。

跑完之后我拿到了 50 个函数、4000 多条指令的报告,其中带着两个 [PROC-INJ] 和一个 [DYN-API] 标注——

跟着AI的分析,我迅速在IDA定位到了关键载荷的加载逻辑:

(检测cpuid用于反调试)

(经典Process Hollowing)

(字符串拼接出目标进程和shellcode路径)
————
这个函数做了三件事:

SSE 拼接目标进程路径:用 movups 把四个 xmmword 常量拼到栈上,最终合成 C:\Windows\SysWOW64\colorcpl.exe。对,就是我一开始发现异常的那个进程。

这里要吐槽一下攻击者的心机——正常程序直接在 .rdata 里放字符串,strings 一扫就出来。他偏要把字符串拆成 4 块 128 位常量,用 SSE 指令运行时拼。strings 工具完全失效,IDA 里看起来也只是几个 xmmword 数值,不仔细分析根本不知道这是啥。
读取配置文件:用 C++ I/O 流打开 C:\Program Files (x86)\MCWinMailAll\dkcinst.ini——这个路径也是 IDA 直接识别出来的(他没做 SSE 拆分,估计觉得 ini 路径没那么敏感)。
调用注入函数:把文件数据、大小、目标进程路径传给 sub_1010D6A0。
4.3 进程镂空:sub_1010D6A0
这才是重头戏。完整流程就是教科书级的 Process Hollowing:
  1. CreateProcessW("colorcpl.exe", CREATE_SUSPENDED | CREATE_NO_WINDOW)
  2. 挂起创建,窗口隐藏
  3. LoadLibraryA("kernel32.dll") + 5 次 GetProcAddress
  4. 动态解析注入 API 组合:VirtualAllocEx、WriteProcessMemory、GetThreadContext、SetThreadContext、ResumeThread
  5. VirtualAllocEx(hProcess, NULL, size, MEM_COMMIT|MEM_RESERVE, PAGE_EXECUTE_READWRITE)
  6. 在目标进程里分配 RWX 内存(老演员了)
  7. WriteProcessMemory(hProcess, remoteAddr, payload, size, NULL)
  8. 把 Payload 写进去
  9. GetThreadContext + SetThreadContext
  10. 修改线程上下文,把 EIP 重定向到注入代码
  11. ResumeThread(hThread)
  12. 恢复执行,原进程被"偷梁换柱"
复制代码
至此,分析结束。

三、结语
这次经历给我的最大感受是:现代恶意样本的伪装水平越来越高,但分析工具的自动化水平也在同步提升。
以前遇到这种"白函数淹没"的样本,可能要花几天时间手工扫导出表、翻字符串、追调用链。现在借助 AI Agent,我可以在几个小时内:定位恶意入口 → 递归反汇编 → 提取关键字符串 → 还原完整攻击链路。
当然,前提是你要知道自己在问什么。AI 不会替你思考,但它能极大地降低你思考到结论之间的执行成本。
最后,忠告大家:
  • 别在实体机里跑来历不明的程序(我当然知道你们做不到,但还是要说)
  • 保持 Process Explorer / System Informer 的习惯,没事看看进程列表
  • AI 是个不错的副手,尤其是在你被 6000 个白函数淹没的时候。

帖子写于某次深夜分析后的恍惚状态,如有错别字请见谅。 IDA 永远的神,但 Python + Capstone + AI Agent 在某些场景下是真的香。







本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?快速注册

x

评分

参与人数 10经验 +30 魅力 +1 人气 +36 收起 理由
Raven95676 + 3 版区有你更精彩: )
UNknownOoo + 3
RainCloud9 + 3 精品文章
FD丶纸鸢 + 3 版区有你更精彩: )
对对对对 + 3

查看全部评分

隔山打空气
发表于 2026-5-6 13:29:42 | 显示全部楼层
再变一变 简化反编译 让AI输出检测结果就是NGML了(

一想到能用这种东西折磨小黑我就浑身发抖

评分

参与人数 2人气 +4 收起 理由
QVM360 + 2 精品文章
DisaPDB + 2

查看全部评分

wowocock
发表于 2026-5-6 13:45:31 | 显示全部楼层
现在都喜欢在几十MB的正规开源库里加几KB的SHELLCODE.

评分

参与人数 1人气 +2 收起 理由
DisaPDB + 2 确实

查看全部评分

DisaPDB
 楼主| 发表于 2026-5-6 18:40:46 | 显示全部楼层
隔山打空气 发表于 2026-5-6 13:29
再变一变 简化反编译 让AI输出检测结果就是NGML了(

一想到能用这种东西折磨小黑我就浑身发抖

利好自制杀软云分析(
不需要搞沙箱只需要调用个平价AI的API,接个反汇编脚本就行了
bilibiliee
发表于 2026-5-7 07:00:14 来自手机 | 显示全部楼层
真的假的
偶偶偶114514
发表于 2026-5-10 08:44:56 | 显示全部楼层
好思路
之前我也做过类似的东西(利用agent让LLM自动化取证,反汇编,虚拟机收集行为啥的)
但是后面弃坑了()
因为发现用ds这种廉价模型效果不甚理想,上gpt又太贵
YYT2013
发表于 2026-5-10 11:03:19 | 显示全部楼层
这个是MCP技术的利用吗?
DisaPDB
 楼主| 发表于 2026-5-10 13:02:56 | 显示全部楼层
YYT2013 发表于 2026-5-10 11:03
这个是MCP技术的利用吗?

不是MCP,虽然可能IDA-Pro-MCP效果估计更好
这个是本地Agent
您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

手机版|杀毒软件|软件论坛| 卡饭论坛

Copyright © KaFan  KaFan.cn All Rights Reserved.

Powered by Discuz! X3.4( 沪ICP备2020031077号-2 ) GMT+8, 2026-10-19 07:21 , Processed in 0.107547 second(s), 5 queries , Redis On.

卡饭网所发布的一切软件、样本、工具、文章等仅限用于学习和研究,不得将上述内容用于商业或者其他非法用途,否则产生的一切后果自负,本站信息来自网络,版权争议问题与本站无关,您必须在下载后的24小时之内从您的电脑中彻底删除上述信息,如有问题请通过邮件与我们联系。

快速回复 客服 返回顶部 返回列表