这是一个 Windows 持久化技术的研究型 PoC(概念验证)工具,演示了以下防御研究场景:
- 持久化机制:利用
RegisterApplicationRestartAPI 实现应用程序自动重启 - 关机拦截:创建隐藏窗口监听系统关机事件(WM_QUERYENDSESSION)
- 载荷执行:启动时自动执行指定的可执行文件(默认为
text.exe) - 混淆技术:使用多种代码混淆手段避免静态检测
-
程序启动
- 释放控制台窗口,完全静默运行(
FreeConsole()) - 注册应用程序自动重启机制(
RegisterApplicationRestart)
- 释放控制台窗口,完全静默运行(
-
载荷执行
- 从当前目录查找配置的可执行文件(默认
text.exe) - 以隐藏窗口方式启动载荷程序
- 从当前目录查找配置的可执行文件(默认
-
关机拦截机制
- 创建隐藏窗口注册系统消息监听
- 设置高优先级关机参数(
SetProcessShutdownParameters) - 当系统尝试关机时:
- 拦截
WM_QUERYENDSESSION消息 - 调用
AbortSystemShutdown中止关机 - 请求关机权限(
SeShutdownPrivilege) - 强制系统重启(
ExitWindowsEx)
- 拦截
-
持久化效果
- 系统重启后,由于注册了自动重启机制,程序会被系统自动拉起
- 形成"关机-重启-程序自启-拦截关机"的循环
- 动态字符串拼接:避免硬编码敏感 API 名称(如
SeShutdownPrivilege) - 随机化窗口类名:基于系统时间生成动态窗口类名
- 计算常量:通过简单运算隐藏真实的 API 标志值
- 干扰变量:插入无意义变量增加逆向分析难度
- 条件混淆:使用永远为真/假的条件表达式混淆逻辑
- Visual Studio 2019 或更高版本
- Windows SDK
- C++ 桌面开发工具集
-
修改载荷文件名(可选)
打开
persistence_obfuscated.cpp,修改第 15 行:#define PAYLOAD_EXE_NAME L"text.exe" // 改为你的目标程序名
-
编译项目
在 Visual Studio 中打开
ObfuscatedPersistence.sln,编译为 Release 版本:- 配置:Release
- 平台:x64 或 x86
-
部署测试
在隔离的虚拟机环境中进行测试:
测试目录/ ├── ObfuscatedPersistence.exe (编译后的主程序) └── text.exe (你的载荷程序) -
运行测试
- 双击运行
ObfuscatedPersistence.exe - 程序会立即隐藏(无任何窗口)
- 载荷程序(text.exe)会被自动启动
- 尝试关机时系统会自动重启
- 重启后程序会自动恢复运行
- 双击运行