完美的免杀方法
到目前为止,要实现恶意软件的“FUD”,加密恶意代码被认为是个不错的选择,不过有几点要注意:
1.恶意程序在解密时,应当也进行代码混淆
2.当恶意文件在内存中运行解密代码时,我们必须要保证在不重定位绝对地址的情况下进行
3.恶意软件是否在沙箱环境中运行,如果是,则立马停止恶意文件的解密
4.应当只对 PE 文件中的 shellcode 或 只有二进制文件的.text部分进行加密,而不是对整个 PE 文件进行,以便把信息熵和降到最低
以下是恶意软件流程图。
我们的“杀软检测”功能将检测恶意软件是否正在沙箱中被动态分析,如果功能检测到AV扫描器的任何迹象,则它将再次调用主函数或者仅当 “AV Detect” 函数来用。如果没有发现AV扫描器的任何迹象,它会调用 “解密Shellcode” 的功能。
以下就是 meterpreter 反汇编 shellcode 的原始格式。
为了让信息熵保持适当的大小,我们需要将shellcode注入方法改为使用多字节键的xor加密,xor加密标准不同于RC4或blowfish。因为恶意软件根本就用不到像RC4或blowfish这样的强加密,所以杀软产品也不会企图去解密信息熵中的shellcode,因此我们在编写恶意软件时,只需保证shellcode具备不可读和不可检测的静态字符串就足够了,如果使用xor,那解密过程更快,加密库中的代码量也会少很多。
同一个 meterpreter 代码使用 XOR 加密的前后对比