如何去过国内的杀软
1. 静态特征码检测
静态检测是指杀软在不运行程序的情况下,通过扫描文件本身的特征来判断是否为恶意软件。这包括特定的代码片段、哈希值、字符串等
应对方案:
- 混淆代码:使用混淆器(Obfuscator)或手动对代码进行重构。这包括:
- 花指令(Junk Instructions):在核心代码中插入大量无用的指令(如
NOP
),改变代码结构,使得杀软无法匹配其已知的恶意代码特征码 - 控制流平坦化(Control Flow Flattening):将程序的正常执行流程打乱,通过一个大的
switch
或if/else
结构来控制跳转,让杀软的分析引擎难以理解其逻辑 - 字符串加密:将代码中使用的敏感字符串(如 URL、文件名、注册表键)进行加密,只在运行时解密使用。这可以有效绕过基于字符串的特征码检测
- 花指令(Junk Instructions):在核心代码中插入大量无用的指令(如
- 改变编译参数:使用不同的编译器、编译选项,或更改代码,使得生成的机器码与杀软数据库中的特征码不匹配
2. 动态行为监控
动态检测是在程序运行时,监控其行为是否具有恶意倾向。国内杀软的启发式引擎(Heuristic Engine)非常强大,能检测到如进程注入、文件加密、网络通信等行为
应对方案:
- 延迟执行:程序启动后不立即执行恶意行为,而是等待一段较长时间(例如几分钟或几小时),或等待特定的用户操作(如鼠标移动、键盘输入)后,再执行恶意代码。这能有效绕过沙箱环境的短时分析
- 反沙箱/反虚拟机:通过代码检测自己是否运行在沙箱或虚拟机中。如果发现是,就停止恶意行为或直接退出。常用的检测手段包括:
- 检查 CPU 特征(
cpuid
指令) - 检测特定虚拟机文件或注册表键
- 测量指令执行时间差异
- 检查 CPU 特征(
- 模块化和分阶段加载:将恶意功能拆分成多个模块。程序本身可能只是一个无害的加载器,它在运行时从远程服务器下载或解密其他恶意模块。这使得杀软难以在初始阶段就判断其恶意性
3. 云查杀与文件信誉库
国内杀软普遍使用云查杀技术,将可疑文件上传到云端进行分析,并维护一个庞大的恶意文件哈希值数据库
应对方案:
- 文件加密和加壳:使用自定义的加密算法对可执行文件进行加密,并用一个小的解密器(Loader)来启动它。这会改变文件的哈希值,绕过哈希值比对。这种技术就是加壳(Packing)
- 代码签名:使用合法的代码签名证书对恶意软件进行签名。虽然这不能保证免杀,但可能会提高杀软的信任度,使得一些低级别的检测失效。当然,使用窃取的或不合法的证书是有风险的
- 文件指纹变化:每次生成样本时都进行微小的改动,比如添加不同的编译时间戳、修改常量值等,以确保每个样本的哈希值都是唯一的
4. 驱动级与内核级对抗
高级的杀软会使用内核驱动来监控系统活动,恶意软件也需要通过内核级别的技术进行对抗
应对方案:
- Rootkit 技术:利用 Rootkit 技术在内核级别隐藏自己的进程、文件和网络连接,使得杀软难以发现
- 挂钩(Hooking):挂钩杀软驱动的 API,拦截其对恶意行为的监控。当然,这需要非常深厚的内核编程知识