给EXE加个密码【免杀系列】
字数 1017 2025-08-23 18:31:34
给EXE加密码绕过杀软动态查杀技术详解
一、杀软查杀机制概述
在免杀技术中,我们需要了解杀毒软件的三种主要查杀方式:
-
静态查杀:通过搜索文件中的恶意软件静态特征进行查杀
- 绕过方法:简单的代码变形(如异或、base64编码等)通常就能绕过
-
动态查杀:使用沙箱模拟执行文件,检测是否执行敏感操作
- 本文重点讨论如何绕过这种查杀方式
-
内存查杀和行为监控:检测内存中的恶意代码和执行时的异常行为
- 最难绕过,因为加载到内存后代码会现出原形
二、基于参数密码的免杀技术原理
核心思想
利用EXE文件可以接收命令行参数的特性,通过设置"密码"来控制程序流程:
- 当输入正确密码时,才执行恶意代码
- 不输入或输入错误密码时,程序表现正常
技术优势
- 沙箱通常不会尝试所有可能的参数组合
- 可以绕过仅通过模拟执行检测恶意行为的动态查杀机制
三、实现代码示例
基础示例代码
#include <stdio.h>
#include <Windows.h>
#include <iostream>
void Hello() {
printf("Hello World");
}
void InjectShellcode() {
printf("Inject shellcode!!!");
// 这里实际应放置shellcode注入代码
}
int main(int argc, char* argv[]) {
if (argc >= 2) {
if ((std::string)argv[1] == "123456") { // 设置密码为"123456"
InjectShellcode();
}
} else {
Hello(); // 无参数或参数错误时执行无害代码
}
system("pause");
}
代码解析
argc:命令行参数个数(包括程序名本身)argv:存储所有命令行参数的数组argv[0]:程序名argv[1]:第一个参数(密码)
- 只有当输入正确密码"123456"时,才会执行
InjectShellcode()
四、实际测试效果
根据作者测试,该方法对主流杀毒软件的效果如下:
| 杀毒软件 | 测试结果 |
|---|---|
| 火绒 | 可持续上线不会掉 |
| 360 | 可持续上线,可能长时间会掉 |
| Windows Defender | 可上线但执行不了命令(后来被标记) |
| 卡巴斯基 | 可过静态检测但无法上线 |
五、技术优化方向
虽然这种方法看起来简单,但可以进一步优化:
- 多参数验证:使用多个参数组合作为密码
- 参数加密:对输入的参数进行加密验证而非明文比较
- 环境检测:结合沙箱检测技术,只在真实环境中执行恶意代码
- 时间延迟:添加延迟执行逻辑,绕过沙箱的时间限制
六、注意事项
- 该方法主要针对动态查杀,对内存和行为监控效果有限
- 密码设置过于简单可能被暴力尝试破解
- 长期使用同一密码可能被安全厂商标记
- 需要配合其他免杀技术(如代码混淆、加密等)使用效果更佳
七、总结
通过为EXE添加密码参数控制程序流程,是一种简单有效的绕过杀软动态查杀的方法。虽然技术实现简单,但在实际测试中表现良好,可以作为免杀技术体系中的一个有效组成部分。结合其他高级免杀技术,可以构建更强大的免杀方案。