### 如何去过国内的杀软

1. 静态特征码检测

静态检测是指杀软在不运行程序的情况下，通过扫描文件本身的特征来判断是否为恶意软件。这包括特定的代码片段、哈希值、字符串等

应对方案：

- 混淆代码：使用混淆器（Obfuscator）或手动对代码进行重构。这包括：
  - 花指令（Junk Instructions）：在核心代码中插入大量无用的指令（如 `NOP`），改变代码结构，使得杀软无法匹配其已知的恶意代码特征码
  - 控制流平坦化（Control Flow Flattening）：将程序的正常执行流程打乱，通过一个大的 `switch` 或 `if/else` 结构来控制跳转，让杀软的分析引擎难以理解其逻辑
  - 字符串加密：将代码中使用的敏感字符串（如 URL、文件名、注册表键）进行加密，只在运行时解密使用。这可以有效绕过基于字符串的特征码检测
- 改变编译参数：使用不同的编译器、编译选项，或更改代码，使得生成的机器码与杀软数据库中的特征码不匹配

2. 动态行为监控

动态检测是在程序运行时，监控其行为是否具有恶意倾向。国内杀软的启发式引擎（Heuristic Engine）非常强大，能检测到如进程注入、文件加密、网络通信等行为

应对方案：

- 延迟执行：程序启动后不立即执行恶意行为，而是等待一段较长时间（例如几分钟或几小时），或等待特定的用户操作（如鼠标移动、键盘输入）后，再执行恶意代码。这能有效绕过沙箱环境的短时分析
- 反沙箱/反虚拟机：通过代码检测自己是否运行在沙箱或虚拟机中。如果发现是，就停止恶意行为或直接退出。常用的检测手段包括：
  - 检查 CPU 特征（`cpuid` 指令）
  - 检测特定虚拟机文件或注册表键
  - 测量指令执行时间差异
- 模块化和分阶段加载：将恶意功能拆分成多个模块。程序本身可能只是一个无害的加载器，它在运行时从远程服务器下载或解密其他恶意模块。这使得杀软难以在初始阶段就判断其恶意性

3. 云查杀与文件信誉库

国内杀软普遍使用云查杀技术，将可疑文件上传到云端进行分析，并维护一个庞大的恶意文件哈希值数据库

应对方案：

- 文件加密和加壳：使用自定义的加密算法对可执行文件进行加密，并用一个小的解密器（Loader）来启动它。这会改变文件的哈希值，绕过哈希值比对。这种技术就是加壳（Packing）
- 代码签名：使用合法的代码签名证书对恶意软件进行签名。虽然这不能保证免杀，但可能会提高杀软的信任度，使得一些低级别的检测失效。当然，使用窃取的或不合法的证书是有风险的
- 文件指纹变化：每次生成样本时都进行微小的改动，比如添加不同的编译时间戳、修改常量值等，以确保每个样本的哈希值都是唯一的

4. 驱动级与内核级对抗

高级的杀软会使用内核驱动来监控系统活动，恶意软件也需要通过内核级别的技术进行对抗

应对方案：

- Rootkit 技术：利用 Rootkit 技术在内核级别隐藏自己的进程、文件和网络连接，使得杀软难以发现
- 挂钩（Hooking）：挂钩杀软驱动的 API，拦截其对恶意行为的监控。当然，这需要非常深厚的内核编程知识