基础概念
特征码
免杀是先从特征码开始的。意指为相应病毒或木马所特有的一段二进制码。
系统底层
“指令系统”:控制CPU完成各项功能的命令系统,其将指令分为特权指令和普通指令。
Intel的CPU将特权级别分为4层,Ring0,RIng1,Ring2和Ring3。Ring0就是所谓的内核层。Ring3为用户层。

反病毒软件工作原理
一般由扫描器,病毒库,虚拟机组成。其中扫描器为反病毒软件的核心。病毒库中存放病毒的“特征码”。
1.基于文件扫描的反病毒技术
第一代扫描技术:
字符串扫描:从病毒中的具有特征的一段字符来检测病毒。
通配符扫描
第二代扫描技术:
智能扫描:对变异病毒中NOP无意义指令忽略;替换文本格式脚本病毒中多余的格式字符。替换操作在缓冲区中执行,以提高扫描器的检测能力。
近乎精确识别:采用多个字符串集检测病毒或者用校验和检测,以提高准确性。
......
2.基于内存扫描的反病毒技术
程序运行后会将自身释放到内存中,释放后的文件结构与未执行的文件比有较大差异。病毒在初始化运行环境的时候,会让更多的可疑点暴露出来
3.基于行为监控的反病毒技术
某些程序在执行后进行非正规的操作。比如释放文件到系统关键目录;修改系统设置使新释放文件可以自启动;删除自身;
4.其他类型反病毒技术
云查杀
对服务器来说,如果某一个用户与其他用户对比发生了异常,服务器就会发出指令,让异常机器检查出问题所在。
可信继承
信任机制体系中,顶层信任体系是由数字签名,样本分析构成,在用户机器表现出的形式就是“根可信进程”。“根可信进程”,凡是由可信进程开启的新进程都被认为是可信的。
代码仿真技术
通过虚拟机环境仿真CPU和内存管理系统,从而模拟代码执行过程。
首先将可执行文件的内容读取到内存缓存区中,然后由仿真器中的switch()语句对各个指令操作码进行逐一分析,最后执行。
PE文件
.exe,.dll等文件都遵守PE文件结构的约定。
在WIndows中,可以直接以二进制形式被系统加载执行的文件都是PE文件。
PE(Portable Executable 可移植的执行体),代表文件格式是跨平台的。Win32自身所带的可执行文件格式。
PE文件结构
由以下五部分组成:DOS文件头,DOS文件加载模块,PE文件头,区段表,区段

以MZ标志位开始;
接下来就是DOS加载模块的标志性字符串“The program cannot be run in DOS mode”;
接下来就是以PE为开头的文件块,其标准大小为224字节(32位),260(64位);
接下来就是.text,.data,.rsrc组成的区段表,使PE加载器能够准确快速加载对应区段;
免杀原理
最基本思想使破坏特征,行为特征,特征码等。
文件免杀原理
改特征码免杀
一种最基础的思想是修改特征码。
另一种就是对病毒的特定区域进行一定的更改,就会使此区域的校验和改变,达到欺骗。
花指令免杀
花指令对程序的执行结果没有影响,存在的唯一目的就是反汇编。
对第一代扫描器,因为反病毒软件为了提高精度和效率,对特征码的偏移量设置在一定限制内。而在添加花指令后,程序的部分偏移量会受到影响。反病毒软件不能识别这段花指令,其检测特征码的偏移量又会整体偏移。
其根本思想是扰乱程序运行顺序。
加壳免杀
当运行加壳程序,系统首先运行“壳“,然后由壳将加密程序逐步还原到内存中,最后运行程序。
内存免杀
内存是数据进入CPU之前的最后一个可控物理存储设备。杀毒软件在内存扫描原理和硬件扫描原理都是通过特征码对比。一个病毒木马同时拥有两套特征码,并全部破坏才能反杀。或者加壳。
行为免杀
工具脱壳
壳的分类
1.压缩壳
压缩程序体积。例如upx。在进入CPU执行前会被解压。
2.加密壳
加密壳会对原程序进行一定修改,例如:代码乱序,代码混淆。进入CPU时,原代码仍然被改变。
代码乱序:通过跳转指令使乱序代码恢复顺序。代码在硬盘或内存中的组织排列发生很大变化
代码混淆:将一条指令拓展为若干条指令,结果相同,逻辑发生变化。
3.虚拟机保护壳
被加密的可执行代码不再遵守Intel的OPCode标准(汇编代码→机器码),而是由虚拟机作者制定的非公开,动态的COU}指令编码和解码标准。
虚拟机保护壳将会被保护程序的可执行代码重新编码为自己的软件CPU可识别格式。
特征码的修改方法
简单的特征码修改方法
1.大小写替换修改 e.g CODE→cODE
2.加一减一法 十六进制值相近的部分汇编指令 e.g 0x74-JE 0x75-JNE 都具有跳转功能
特征码进阶修改
将偏移地址转化为内存地址(将文件偏移地址转化为虚拟偏移地址)
空白区域跳转法
通过得到偏移地址后得到内存地址,然后在汇编器中修改

上下互换法
由于特征码的16进制信息已经调换,所以可以躲避查杀

等值替换法
e.g push→pop,Je→jnz,add→sub
修改入口点免杀
入口点:程序的执行入口处。
将原入口点指令所在的新位置(一片空白区域保存原入口点的指令),修改为程序的入口点地址

Overlay附加数据的处理
将数据附加到可执行文件中,供可执行文件调用
手动操作附加数据
这里使用7z制作自解压文件

查看文件头位置,其中EOF为额外附加数据

在hex里面可以看到详细信息

提取后另外保存为”提取数据.7z“,并解压,结果发现,原压缩包里内容与”提取数据.7z”内内容一致。即,如果需要修改,则只需要修改此区段内内容。
驱动程序免杀修改
驱动程序大多以.sys结尾
驱动程序的常见免杀
利用VMProtect加密,或者进行OEP混淆
虚拟内存介绍

只有在需要进行实际的内存操作时,虚拟内存管理才会将虚拟i地址和物理地址相联系
PE文件的内存映射
文件偏移地址:
PE文件数据在硬盘中存放的地址。相对于文件开头的偏移
装载基址:
PE文件装入内存时的基地址。一般情况下,exe的装载基址为0x00400000
虚拟内存地址:
PE文件被装入内存后的地址
相对虚拟地址:
在没有计算装入基址的情况下的内存地址
虚拟内存地址=装载基址+相对虚拟地址。
PE文件的数据区段空间永远是0x200的整数倍,不足则用00填充。当PE文件装入内存时。PE文件数据以0x1000字节为基本单位填充。

文件偏移地址=所在区段的起始文件偏移+ (虚拟内存地址-装载基址-所在区段的起始虚拟偏移)
Comments | NOTHING