文章总结: 本文逆向分析了一个真实的AsyncRAT恶意样本。作者通过PowerShell脚本还原了多阶段加载链,发现样本利用混淆、XOR解密、进程空洞化及启动项持久化等技术。通过动静结合分析,最终定位并确认了C2服务器与AsyncRAT身份。文章建议采用反向蜜罐技术主动与攻击者交互以获取情报。 综合评分: 88 文章分类: 恶意软件,逆向分析,威胁情报
逆向分析一个真实运行中的 AsyncRAT 恶意样本
hai dragon
安全狗的自我修养
2026年1月6日 12:04 湖南
#
官网:http://securitytech.cc/
在我上一篇博客文章《使用 URLScan 寻找正在活动的恶意软件》之后,我决定再四处看看,找一些有意思的样本。最近我没怎么做恶意软件分析,于是想着干脆再写一篇博客,记录一下分析过程。
寻找恶意样本
为了找到一些“新鲜”的恶意样本,我们可以使用我上一篇博客中提到的搜索语句。有好几个可选项,但其中一个特别引人注意的是 secret_bytes.txt 文件。
按 Enter 或点击查看大图
查看 secret_bytes.txt 文件内容后,我们可以推测它很可能是混淆后的代码。根据重复出现的模式来看,它像是十六进制字符,并且在每个字节之间插入了 -[S 字符串。
按 Enter 或点击查看大图
secret_bytes.txt 的内容
如果我们再看看 cap.ps1 文件的内容,可以发现攻击者并没有对这个 PowerShell 脚本进行混淆,因此我们可以非常清楚地看到这些文件是如何被解码和执行的。
该脚本读取第一个文件 secret_bytes.txt,通过以下步骤解码其内容:
- 从
[S字符串中提取十六进制字符 - 将其转换为字节
- 与
0xA7进行 XOR 运算,得到最终的二进制数据
解码完成后,这个二进制文件会被加载到内存中,并尝试调用其中的 Main 函数(如果存在)。
接下来,脚本从解码后的 secret_bytes 程序集中定位 Run 函数,并传入 4 个参数进行调用:
aspnet_compiler.exe的绝对路径- 一个
null值 - 解码后的
msgbox.txt内容 - 一个
true值
这很可能是在启动一个牺牲进程(sacrificial process),并通过**进程空洞化(process hollowing)**的方式,将解码后的内容写入该进程内存中执行。当然,我们还需要真正拿到程序集文件才能确认这一点。
最后,脚本会找到一个名为 script.vbs 的文件,并将其复制到 启动目录(StartUp folder) 中。这是一个持久化机制,用于确保用户每次登录系统时恶意软件都会自动运行。
按 Enter 或点击查看大图
script.vbs 的作用
script.vbs 会执行一条很长的 PowerShell 命令:
powershell.exe -NoProfile-ExecutionPolicy Bypass -WindowStyleHidden-Command""Get-Process powershell -ErrorAction SilentlyContinue | Where-Object { $_.Id -ne$PID } | Stop-Process-Force; Start-Sleep-Seconds3; Start-Process-FilePath'powershell.exe'-ArgumentList'-NoProfile','-ExecutionPolicy','Bypass','-WindowStyle','Hidden','-File','" & ps1Path & "'-WindowStyleHidden""
这条一行命令做了三件事:
- 查找当前系统中运行的其他 PowerShell 进程
- 强制终止这些进程
- 以隐藏窗口方式重新执行
cap.ps1脚本
静态分析
现在我们已经清楚这些文件的作用和整体执行流程,可以开始提取并分析 secret_bytes 和 msgbox 这两个程序集。
按 Enter 或点击查看大图
幸运的是,攻击者留下了一些“贴心”的辅助函数,因此我们不需要自己重新实现解码逻辑,只需要稍微修改 cap.ps1 脚本,让它把解码后的内容写入磁盘,并移除所有恶意调用即可。
注意: 我们可以修改文件扩展名,以避免意外执行恶意程序。
我们先从 secret_bytes 开始分析,因为它体积较小,并且我们已经知道它很可能负责加载第二阶段载荷。
从前面的分析可以确认,这两个文件都是 .NET 二进制文件,因此我们可以使用 dnSpy 来进行分析。
我们知道 cap.ps1 调用了 Run 函数,并传入了:
C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_compiler.exe- 解码后的
msgbox.txt数据
快速浏览代码后可以确认,这个模块确实是在加载下一阶段载荷。既然如此,我们就没必要在这个 loader 上浪费太多时间,直接转向 msgbox 程序集。
按 Enter 或点击查看大图
msgbox 程序集分析
将 msgbox 程序集加载进 dnSpy 后,可以看到它被高度混淆,分析难度明显提升。不过,它包含一个 Main 函数,这是一个很好的切入点。
最好的分析方式是:
从 Main 函数开始,沿着函数调用一路跟下去,直到遇到有意义的代码。
继续深入后,我们会发现一个方法,看起来是在将原始程序集字节加载到一个线程中。这意味着在这个二进制文件中,还隐藏着另一个阶段的载荷。
继续追踪变量 Jimneizhto,可以看到它从程序集资源中读取了一个名为 Hyvlljezm 的对象。查看资源文件后发现,它的大小超过 300KB,很可能是另一个被加密或编码过的二进制文件。
接下来有两个关键函数:
RHQHVUPy6: 使用 Triple DES 进行解密,且密钥是硬编码的scyn4n7EC: 对解密后的内容进行 GZIP 解压
我们可以先逆向解密函数,然后在 CyberChef 中重现该过程。
按 Enter 或点击查看大图
需要注意的是,解密后数据的前 4 个字节存储的是解压后内容的大小,因此在解压前需要先移除这 4 个字节,否则解压会失败。
在 CyberChef 中可以使用 Drop bytes 操作来完成。
按 Enter 或点击查看大图
最终,我们得到了又一个 PE 文件,而且同样是 .NET 程序。
按 Enter 或点击查看大图
这个二进制文件的混淆程度与之前类似,但函数和类的数量更多,其中大量是无用的死代码,仅用于增加分析难度。
动态分析
此时,转向动态分析会更加高效。
我们可以修改最初的 PowerShell 脚本,让它忽略 StartUp 持久化逻辑,同时在第二阶段模块加载到内存的位置设置断点。然后使用 dnSpy 附加到 PowerShell 进程,在模块加载完成后直接从内存中提取它。
继续设置断点到 Run 函数,并单步执行,直到下一个进程被创建。
在进一步分析中,我们发现之前遗漏了一步:
secret_bytes 程序集会尝试加载一个名为 1.vb 的文件,而我们最初并没有这个文件。
按 Enter 或点击查看大图
我回到攻击者服务器检查,发现 1.vb 确实存在。快速浏览后可以确认,它实现的是标准的进程空洞化逻辑。
按 Enter 或点击查看大图
更有意思的是,攻击者在代码中留下了大量注释,清楚描述了整个流程:
'Step 4 : 运行时解析 API(自定义 GetProcAddress)
'Step 5 : 创建挂起的牺牲进程
'Step 6 : 判断 x86 / x64
'Step 7 : 通过 Ebx + 8 获取进程 ImageBase
'Step 8 : 如有冲突则解除映射
'Step 9 : 在目标进程中分配内存
'Step 10: 写入 PE 头
'Step 11: 写入所有节区
'Step 12: 修改 PEB 中的 BaseAddress
'Step 13: 设置入口点
'Step 14: 更新线程上下文
'Step 15: 恢复进程
'spoted avast
最终阶段与 C2 分析
通过在 ResumeThread 设置断点,我们可以在牺牲进程恢复前附加调试。
按 Enter 或点击查看大图
可以看到:
- 内存被设置为 RWX
- 写入了约 380KB 的恶意代码
- 进程为 32 位
随后附加到 aspnet_compiler.exe,提取内存模块,并继续追踪。
最终,我们通过搜索 x509 相关代码,定位到网络通信逻辑,并发现:
- C2 服务器 IP
- 通信端口
而这个 IP 正是最初托管恶意载荷的服务器。
在 Shodan 查询后确认,该服务器运行的是 AsyncRAT。
按 Enter 或点击查看大图
总结与后续研究方向
本次分析确认了一个多阶段 AsyncRAT 感染链,包括:
- PowerShell 初始执行与持久化
- 内存加载的 .NET Loader
- 对
aspnet_compiler.exe的进程空洞化 - 加密 + 压缩的嵌入式载荷
- 单一服务器同时承担投递与 C2 功能
最终载荷确认是 AsyncRAT,其源码已在 GitHub 上公开,因此继续逆向意义不大。
一个更有意思的方向是: 👉 主动与攻击者基础设施交互 例如编写一个 Python 的 AsyncRAT 客户端封装,安全地连接到 C2 服务器,收集攻击者信息——类似一个“反向蜜罐(Reverse Honeypot)”。
- 公众号:安全狗的自我修养
- vx:2207344074
- http://gitee.com/haidragon
- http://github.com/haidragon
- bilibili:haidragonx
#
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:安全狗的自我修养 hai dragon《逆向分析一个真实运行中的 AsyncRAT 恶意样本》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。









评论