最最最基础免杀入门(一)

发布于 2022-02-20  22 次阅读


基础概念

特征码

免杀是先从特征码开始的。意指为相应病毒或木马所特有的一段二进制码。

系统底层

“指令系统”:控制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字节为基本单位填充。

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


间桐桜のお菓子屋さん