Files
Sec-Interview/Chapter19/19-2.md
T
2025-09-25 03:59:29 +08:00

45 lines
3.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
### 如何去过国内的杀软
**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,拦截其对恶意行为的监控。当然,这需要非常深厚的内核编程知识