前言
近期有社区成员碰到一个cmd的外挂,不仅没头绪,还会自删除,今天我们就来看一下
目录下存在一个dat文件,还存在一个cmd文件,我们挨个分析一下

dat文件分析
当看到一个陌生后缀文件的时候,作为逆向安全人员,大家首先要想到这个文件到底是不是一个PE文件?
我们可以借助各种PE工具去查看,这里我们使用StudyPE工具:
通过分析我们发现它并不是什么dat文件,而是一个PE文件,并且是一个DLL文件
DLL文件是动态链接库文件,无法直接运行,只能寄生在exe程序中
而文件夹中只有两个文件,所以真正答案就在cmd中

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

我把逻辑给大家拆解一下:
① 关闭已有的 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,并直接把自己伪装成系统的程序了,并且自删除了

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

直接没办法调试了
你们感谢作者吧,让你们又学到一个“反调试”的方法
但是道高一尺魔高一丈
编写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.先找到自定义防护

2.添加保护对象

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

4.运行Loader即可拦截到

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

分析外挂主程序–>破解
这个软件的逻辑我们就梳理清楚了:执行DLL,然后再释放exe,然后再执行exe,然后再自删除exe
其中exe看起来好像无壳,其实是处理过的,作者加了代码虚拟化


无妨,暴力破一下即可:

外挂样本下载
最后
如果您也对软件安全逆向技术感兴趣,想学一学,期待您的加入!
https://flowus.cn/52xuejishu/share/9ccec752-d950-4520-b0aa-e14df01d34fc?code=7U33KP




