如何对抗用cmd执行的自删除外挂?实战,火绒有妙用!

前言

近期有社区成员碰到一个cmd的外挂,不仅没头绪,还会自删除,今天我们就来看一下

目录下存在一个dat文件,还存在一个cmd文件,我们挨个分析一下

Snipaste_2026-01-26_18-22-03-min

dat文件分析

当看到一个陌生后缀文件的时候,作为逆向安全人员,大家首先要想到这个文件到底是不是一个PE文件?

我们可以借助各种PE工具去查看,这里我们使用StudyPE工具:

通过分析我们发现它并不是什么dat文件,而是一个PE文件,并且是一个DLL文件

DLL文件是动态链接库文件,无法直接运行,只能寄生在exe程序中

而文件夹中只有两个文件,所以真正答案就在cmd

Snipaste_2026-01-26_18-24-36-min

cmd文件分析

这是一个明显用于加载 DLL 并自我混淆/伪装的批处理脚本,常见于木马、加载器、DLL 劫持样本

Snipaste_2026-01-26_18-27-22-min

我把逻辑给大家拆解一下:

① 关闭已有的 rundll32

taskkill /f /im rundll32.exe >nul 2>&1

作用:强制结束所有 rundll32.exe

意图:防止已有实例占用 DLL、避免重复加载或被调试器附加、清理现场,准备重新加载

② 切换到脚本所在目录

cd /d "%~dp0"

作用:确保后续操作都在当前目录,方便加载同目录的文件(DLL / dat)

③ 校验系统 rundll32 是否存在

if not exist "%SystemRoot%\System32\rundll32.exe" (
    echo 错误:rundll32.exe缺失,请修复系统文件!
    pause
    exit /b 1
)

作用:防止环境异常、确保 DLL 能被执行

④ 构造随机字符集

set "chars=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"

作用:用于后面随机重命名、典型“自变异 / 免杀 / 混淆”

⑤ 找一个 .dat 文件(实际是 DLL)

set "dll_file="
for %%f in (*.dat) do set "dll_file=%%f"

找当前目录下 任意一个 .dat 文件、没校验是不是 DLL、默认当成 DLL 用

这说明:.dat 只是伪装扩展名,本质是 DLL

⑥ 使用 rundll32 加载这个 dat

rundll32.exe "xxx.dat",0

⑦ 随机重命名 DLL(dat)

生成10位随机名
ren 原dat → 随机名.dat

总结:这是一个

  • 使用 rundll32 执行伪装成 .dat 的 DLL

  • 执行指定导出函数 O

  • 执行后立即随机重命名自身和 DLL

  • 用于隐藏、免杀、反分析的加载脚本

程序行为分析

运行cmd后,发现这个程序大概率是释放了一个exe,并直接把自己伪装成系统的程序了,并且自删除了

Snipaste_2026-01-26_18-43-43水印版-min

并且当x32dbg进行附加时,出现了如下提示:“无法获取模块文件名”

Snipaste_2026-01-26_18-45-35水印版-min

直接没办法调试了

你们感谢作者吧,让你们又学到一个“反调试”的方法

但是道高一尺魔高一丈

编写DLL Loader绕过随机命名注入

由于DLL会被cmd随机命名,所以我们不妨开发一个简单的Loader去加载这个DLL(也就是那个dat)

#include <windows.h>
#include <stdio.h>

int main()
{
	LoadLibraryA("123.dll");

	getchar();
	getchar();
}

然后我们把DLL直接命名为123.dll然后运行程序

这样子我们的dll就永远不会被随机命名,但是还有个问题,就是自删除

利用火绒对抗自删除

1.先找到自定义防护

Snipaste_2026-01-26_18-53-40-min

2.添加保护对象

Snipaste_2026-01-26_18-55-02-min

3.保护C盘的用户目录,也就是程序被释放的目录

Snipaste_2026-01-26_18-55-16-min

4.运行Loader即可拦截到

Snipaste_2026-01-26_18-55-30水印版-min

5.直接把exe就可以复制出来了

Snipaste_2026-01-26_18-55-58水印版-min

分析外挂主程序–>破解

这个软件的逻辑我们就梳理清楚了:执行DLL,然后再释放exe,然后再执行exe,然后再自删除exe

其中exe看起来好像无壳,其实是处理过的,作者加了代码虚拟化

Snipaste_2026-01-26_18-59-03-min

Snipaste_2026-01-26_19-06-25-min

无妨,暴力破一下即可:

Snipaste_2026-01-26_19-10-14水印版-min

外挂样本下载

最后

如果您也对软件安全逆向技术感兴趣,想学一学,期待您的加入!

https://flowus.cn/52xuejishu/share/9ccec752-d950-4520-b0aa-e14df01d34fc?code=7U33KP

内容紧贴实战 · 体系完善 · 持续更新 · 永久答疑
人生没有白学的课,每一节都算数 —— 最好的开始,就是现在!
请登录后发表评论