第3章 免杀与特征码
这一章主要讲了一些操作过程。介绍了MyCCL脚本木马免杀的操作,对于定位特征码在FreeBuf也曾发表过类似工具。
VirTest5.0特征码定位器
http://www.freebuf.com/sectool/40580.html
细读一遍这一章的知识才知道自己当时使用MyCCL免杀失败的原因。因为某些反病毒软件的扫描器采用的是密码校验和技术,密码校验和指的是将一段病毒文件代码计算出特定的值,然后与病毒库的值进行比对,如果匹配到特征码则有毒,反之则无毒。
3.1 特征码免杀技术
-
分割法:将一份文件分成数分,然后再用反病毒软件查杀,如果发现其中某一份有病毒,则说明这部分含有特征码,然后再将检测到病毒的这一份文件分割成数份,直到定位出特征码为止。
-
缺点:某些反病毒软件的扫描器采用的是密码校验和技术,密码校验和技术指的是将一段病毒文件代码计算出特定的值,然后与病毒库的值进行比对,如果匹配到特征码则有毒,否则无毒。
3.6.1 特征码修改方法
- 大小写替换法:将原有的大写或小写字符更改为相反的状态。
- 用00字节填充:在汇编里“00”表示空的意思。
- 加1减1法:利用十六进制值相近的部分汇编指令,例如十六进制的0x74,0x75分别代表汇编指令中的JE和JNE,含义虽然相反,但都是具有跳转功能的指令。
3.6.2 特征码修改进阶
- 空白区域跳转法:记录下原本的特征码,将原本的特征码地址JMP到空白处,然后在空白处地址编辑回特征码,再次JMP回原先位置。
- 上下互换:汇编某些指令的位置是可以上下替换而不会影响程序正常运行的。
- 等值替换法:利用汇编语言中相近或有可能达到同一结果的指令来替换原来被定义为特征码的指令。
第4章 其他免杀
- 修改入口点免杀:找到一块空白区域保存被移动的那部分指令,并使用工具(PEditor)将原入口点指令所在的新位置修改为程序的入口点地址,使入口点移动。
a 常用方法
-
VMProtect加密
-
用OEM混淆工具PEArmor,当然用加密壳Themide也是可以的。还有很多新的加密壳
-
Overlay附加数据的处理:将一些数据附加到可执行文件中,供可执行文件调用的一种数据处理方式。
b手工思路
-
1 需要修复校验和
-
2 尽量不要改变sys文件大小
-
3 上一条可以违背。
-
PS:驱动文件免杀技巧:这里特别提到对于*.sys文件要谨慎地进行修改,修改完毕确定校验和。
4.6.1 PE文件格式
- DOS MZ header:又称DOS文件头或DOS MZ文件头,它是一段以关键字MZ开头的数据。
- DOS stub:DOS加载模块这个区块以一段英语提示为标志,当运行环境不匹配时则会弹出这句话。
- PE header:一段以关键字PE为开头的数据,默认大小为244字节,里面包含着许多信息。
- Section table:区段表,又称节表,一段记录着整个文件中区段的大小、位置与属性等信息的表。
- Section 1:区段,又称为节,这些区段的数量有可能不止一个。
-
- .text:存放可执行的二进制机器码
-
- .data:初始化的数据块,比如全局变量等。
-
- .idata:可执行文件所使用的动态链接库等外接函数与文件信息。
-
- .rsrc:存放程序的资源,如图标、菜单等
4.6.2 虚拟内存
虚拟内存:硬盘中划分出一块区域,使系统将其当作物理内存来使用。因为不是真正的内存,而是由硬盘虚拟出来的,所以将其称为“虚拟内存”。
4.6.3 PE文件的内存映射
PE文件与虚拟内存之间的映射关系的名词概念
-
文件偏移地址(file offset): 指文件在磁盘上存放时相对于文件开头的偏移。
-
装载基址(Image Base): 装载基址是指PE文件装入内存时的基地址。一般情况下EXE文件的装载基址都为0x00400000,而DLL文件一般都是0x10000000。
-
虚拟内存地址(Virtual Address,VA):虚拟内存地址就是指PE文件被装入内存之后的地址。
-
相对虚拟地址(Relative Virtual Address,RVA):相对虚拟地址指的是在没有计算装载基址的情况下的内存地址。
重要关系:
- 虚拟内存地址(VA)= 装载基址(Image Base)+ 相对虚拟地址(RVA)
PE映射到内存的关系:
- PE文件:以0x200字节为基本单位进行组织存放。PE文件区段大小永远是0x200的整数倍。
- PE文件装入内存时:以0x1000字节为基本单位进行组织存放。内存中的区段大小永远是0x1000的整数倍。
两者中不够字节则以”00“填充,否则当存放空间超过0x200或0x1000字节下一个数据块依旧是这个空间在使用。
已知:虚拟内存地址VA,装载地址ImageBase,以及所在区段的起始虚拟地址VS和起始文件偏移地址VR。
求文件偏移FileOffset、相对虚拟地址RVA及相对所在区段偏移RelativeSectionOffset
- 因为 相对虚拟地址(RVA) = 虚拟内存地址(VA)- 装载基址(Image Base)
相对所在区段偏移(RelativeSectionOffset)= 相对虚拟地址(RVA)- 起始虚拟地址(VS)
-
所以 文件偏移(FileOffset) = 起始文件偏移地址(VR)+ 相对所在区段偏移(RelativeSectionOffset)
-
求证得出 文件偏移(FileOffset)= 起始文件偏移地址(VR)+(虚拟内存地址(VA)- 装载基址(Image Base)- 起始虚拟地址(VS))
这一章的用意在于熟悉了PE区段的作用,然后根据前面几个章节讲到的特征码定位。就可以从自己手中的源码或者反汇编修改程序中被定义为特征码的位置。达到免杀效果!
4.7 网页木马免杀
a 脚本木马免杀
(1)加密免杀:
-
微软screnc加密
-
大小写字母替换
-
脚本对象及变量拆分
(2)特征码免杀
- 例如中文内部版权
针对性免杀
webshell特征定位器
宽泛性免杀
无目的替换可能会被定位特征码的一些文本、代码信息。
- 代码大小写替换
- 对象中插入空变量
(3)其他方法的免杀
- 致使杀软使用数据库特征扫描导致误判.
- 位移、逆位法
针对专杀工具的免杀
- 利用Windows目录漏洞
建立windows无法访问的畸形目录(..)
- 例如b调用别的文件躲过专杀
文件包含函数包含了其他资源文件,资源文件中带有真正的后门代码。
- copy命令与图片合并
自己编写加密算法
-
(1)分隔符加密算法
-
(2)ASCII转换加密算法
b 网页挂马的免杀
网页挂马的主体构成是HTML,除此之外会涉及JavaScript与VBScript。
-
HTML混淆器
-
蓝星网页加解密专家
-
网页挂马压缩器