免杀原理
基于特征码的检测
基于病毒特征码的检测方法,是目前反病毒软件最常用的检测技术。经过长时间的收集与积累,反病毒软件建立了庞大的已知病毒的特征数据库。在对可疑软件进行检测时,会从特征数据库中匹配已有特征。这种方法相对比较准确、快速,而且可以很容易地通过快速分析,结合新的模板,添加新的病毒文件特征。
特征码可以是一个简单的字符串或者代码字节序列,也可以是包含了已知恶意文件各项特点的模板
- 字符串特征是通过在恶意软件的数据区段中提取到的具代表性的字符串。字符串特征匹配通常包含了通配符,可灵活地检测恶意文件中字符串,以及对字符串做的一些简单处理,如在字符串的尾部或者中间加入其他字符,而在执行的时候转换为实际需要的字符串
- 代码字符特征是通过反汇编恶意软件的二进制代码,提取恶意软件核心实现的字节序列。如恶意软件常使用的加密代码或者加壳工具的特征等
- 基于模板的特征检测,是基于反病毒引擎中实现的模板进行检测。在扫描过程中,动态填充该模板。扫描完成后,反病毒软件根据模板里的内容,综合评定被扫描程序是否是恶意软件。一般模板中包含的待扫描文件的属性有:可执行依赖的库文件,如网络通信、敏感的系统库等;可执行文件是否被加壳或者压缩;可执行文件的PE格式里,是否有无效或者异常的字段,如处于.text段外的入口点地址等
基于特征码的检测优点是可以达到100%的检测正确率,没有误报,但缺点是检测依赖于特征库,无法检测出未知的恶意程序
启发式检测
启发式检测主要是为了弥补特征码检测的不足,可以在反病毒厂商未发现某个恶意软件和发布恶意软件特征码之前,阻止未知恶意软件对用户的侵害,防止造成不必要的损失
启发式检测可分为静态与动态两种方式:
- 静态启发式查杀方式是指在程序中查找已知病毒常用的一些实现方法、代码模式等,来判断该程序是否为未知恶意软件。主要从两个方面进行分析:
- 通过反汇编或者反编译被扫描程序,结合程序的API调用序列、在已知恶意软件大量使用的字符串,如系统关键进程名称。Explorer.exe、系统目录名称、PE文件中是否有可疑的段等进行判断
- 扫描是否存在被修改的核心系统组件,如SSDT、IDT等
- 动态启发式查杀方式是指对程序执行过程中的行为进行综合判别,来识别被扫描程序是否是恶意软件。通常,反病毒软件采用一些模拟的环境,如沙盒、虚拟机等,将程序模拟运行一段时间,并记录该程序的各种行为。待运行结束后,通过该程序的一系列行为,如内存写入、创建进程和网络连接等,来确定应用程序的行为是否可疑。动态启发式查杀能检测未知的病毒,但比较消耗计算资源,需要在安全性和可用性上有一定的平衡。在实际应用中,启发式检测方式通常与特征码检测相结合,以应对不同类型恶意代码的检测需求
白名单方法
通常,反病毒软件收集一些已知开发者签名的应用软件