免杀的静态过和动态过

静态过

含义

文件在“静止状态”(未运行、存放在磁盘或者传输中)时候,绕过了杀毒软件的静态扫描。

检测原理

杀毒软件在扫描文件时,主要通过以下的方式进行静态特征查杀:

· 特征码扫描:检查文件内容是否包含已知的恶意代码片段、特定字符串(如某些敏感API名称)、或者文件的哈希值。
· 结构分析:检查文件的PE结构(如导入表、区段名称、数字签名等)。

PE(Portable Executable Format,即可移植可执行文件格式)是 Windows 操作系统下所有可执行文件(如 .exe、.dll、.sys、.ocx 等)的标准文件格式。它是 Windows 操作系统加载和执行程序的核心蓝图。简单来说,Windows 的加载器必须完全读懂这个结构,才知道如何把硬盘上的程序正确地分配到内存中并跑起来。

PE结构的核心组成部分:
· DOS伞头与DOS兼容头:包含了一个真正指向PE头的偏移地址。
· PE Header(PE头部/文件头):PE结构核心指挥部,包含有程序运行所需的全局元数据:签名、运行平台、节区数量、时间戳、可选头部。其中可选头部包含有程序入口点、镜像基址、堆栈大小、操作系统版本要求等关键信息。
·Section Table(节表/区段表):紧跟在PE头后面的一张“目录表”。他把整个程序切分成若干个不同的“房间”(即节区),并记录每个房间在磁盘上和内存中的位置、大小以及访问权限(读、写、执行)。
· Sections(节区/区段):程序的实际内容被分类别装到这些节里,常见的节有:.text/.data/.radta/.idata/.rsrc

在免杀方面,PE结构是很重要的。
· 静态特征码与结构异常:杀毒软件在静态扫描时候,会重点检查PE头的异常,例如,某些加壳工具会修改区段名称(把 .text 改成乱码),或者 PE 头的某些标志位不符合规范,这往往会被安全软件直接标记为可疑。
· OEP篡改:加壳软件会把真正的程序入口藏起来,将 PE 头的入口点(OEP)指向壳的代码。当程序运行先执行壳的解密逻辑,再跳回真正的代码。
· API 导入表重构:恶意软件为了躲避杀毒软件对敏感 API(如 VirtualAlloc 远程注入)的静态监控,经常会抹掉或动态加密导入表(Import Table),在运行时通过内存搜索动态加载 API。
· 静态式启发:分析代码中是否存在可疑的指令组合。

常见实现手段

· 加壳与加密:对核心代码进行加密或压缩,在运行时才解密加载,破坏原有特征码。
· 代码混淆与重构:修改变量名、插入无用代码(垃圾代码)、改变代码执行逻辑,使静态特征发生变化。
· 特征修改:修改敏感字符串、篡改PE头的特征信息或伪装成合法的数字签名。

动态过

含义

文件在“运行状态”(进程加载、内存执行、行为触发)时,绕过杀毒软件的实时监测和行为检测。

检测原理

即使文件静态特征会洗白,一旦程序开始运行,现代杀毒软件(EDR)会通过以下方式进行动态检测:

· API钩子(API Hooking):监控程序对系统关键API的调用。【你去银行(系统API)取钱(执行操作),需要走到柜台去办理,银行在门口安排了保安(Hook),你每走一步、想取多少钱,都要先经过保安盘查、登记、甚至觉得你有嫌疑直接把你扣下,才能到柜台。】

API Hooking(API 钩子 / 挂钩)是操作系统中一种用于拦截、监视或修改函数调用行为的技术。
当你的程序调用某个系统函数(比如打开文件、发送网络请求、申请内存)时候,Hook就像在半路设下了一个哨卡:程序原本想直接去找系统,结果半路被拦截了。哨卡可以记录这次调用,甚至篡改参数、阻止调用、或者重定向到别的代码去。

现代杀毒软件或 EDR 在程序启动时,会把自己的 Hook 注入到所有运行的进程中:如果某个程序调用了 VirtualAlloc 申请可执行内存,并试图把一段代码写入进去,Hook 会立刻触发。安全软件拦截这次调用,分析其行为模式(例如这很像进程注入),从而直接杀掉进程,实现动态行为检测.

最经典的 Hook 方式是Inline Hook(内联挂钩):
修改内存:安全软件(或监控工具)在内存中找到某个敏感 API 函数的第一行代码。
植入跳转:它把原本的正常指令覆盖掉,改成一条强制跳转指令(如 JMP),指向安全软件自己写的一个监控函数。
拦截与放行:当恶意程序调用这个 API 时,CPU 会先跳到安全软件的监控函数里。安全软件检查完参数(发现没有恶意)后,再把被覆盖的原始指令执行一遍,最后把控制权还给系统。

· 沙箱模拟:将程序放入虚拟环境中运行,观察其行为(如是否试图修改注册表、注入其他进程)。
· 内存扫描:定期扫描内存空间,寻找内存中解密出来的未加壳恶意特征。
· 行为分析:识别异常行为模式(如进程注入、反射加载、敏感目录写入、异常网络外联等)。

常见实现手段

· 直接系统调用(Syscalls):绕过用户层的API Hook,直接从应用层进入内核执行系统调用。躲避安全软件的监控。

干脆不走被 Hook 的应用层 API 了,直接通过汇编指令进入内核。这样连“半路设卡”的机会都不给它,直接绕过监控。

· API Unhooking:在内存中抹除或修复杀毒软件下发到关键DLL中的Hook。【门口有保安盯着,想办法把保安支开。】

既然杀毒软件篡改了内存中的系统 DLL,恶意软件就在运行时从磁盘上重新读取干净的、未被修改的系统 DLL(因为磁盘上的文件通常没被 Hook),或者直接在内存中把 JMP 指令修复成原本的代码,从而把安全软件的眼睛“瞎掉”。

· 沙箱对抗:检测当前运行环境是否为沙箱(如检查运行时间、鼠标移动、硬件信息),如果是则暂停恶意行为或表现得像正常软件。
· 内存加密/免分配:不在常规可执行内存中暴露明文代码,或者使用完后立即擦除内存痕迹。

posted @ 2026-10-23 16:00  ddx-dev  阅读(10)  评论(0)    收藏  举报