随着高级语言编写的”病毒混淆器”(一些国外安全厂商会报出HLLP、HLLW等名字,即High-Level Language Packer/Wrapper)的出现,病毒和反病毒引擎之前的博弈又被推上了一个新的高度。传统扫描引擎对壳的”识别“被颠覆,基于“通用脱壳”(Generic Unpacking)的反病毒引擎应运而生。“通用脱壳”,简单来说,就是不识别特定类型的壳代码,对所有待扫描样本均通过”虚拟沙盒“虚拟执行,进而在虚拟执行的过程中还原可能被”加壳“的代码和数据。
如图17所示,请求RSA公钥文件是整个病毒流程的第一步。因为每个文件在加密之前都会调用Windows API CryptGentKey生成一个全新的AES256密钥(图18),AES256密钥用于加密用户数据文件,下载下来的RSA公钥用来加密AES256密钥,公钥只会请求一次,从始至终不会改变,但每个被加密文件所使用的AES256密钥均不相同。这两组密钥最终都会保存到被加密的文件中,只是RSA公钥以MD5的形式保存于文件头(图19),而AES256密钥被RSA加密存放在后面。