-
-
[翻译]恶意软件的脱壳方法(二):弱加密算法
-
发表于: 2017-10-28 11:11 3495
-
几天前开始,我写了一个关于恶意软件脱壳的工具和方法的系列文章,第一篇的链接在此。每个恶意软件/加壳软件都是不同的,有时不能用通用方法脱壳。但有时可以找到他们共有的特征。比如,加壳软件经常使用弱加密算法,破解这些算法是可能的。
本文中我会介绍一些基于非常简单的加密学原理的方法,这些方法可以破解加壳软件使用的弱加密算法。虽然这些破解方法很简单,但是对大量的恶意软件家族和加壳软件仍然很有效,可以自动的脱壳一些恶意软件。
首先,我必须声明这些方法不是新的,已经用了很久。这是一些有关的文章和工具:
《Principles and practice of x-raying》,最好的也是最早的相关文章,作者Peter Ferrie。
《XorSearch》,作者Didier Stevens。
《Decoding XOR shellcode without a Key》,作者Chris Jordan。
《UnXor》,作者Tomchop。
《Deobfuscating Embedded Malware using Probable-Plaintext Attacks》(KANDI工具),作者Christian Wressnegger, Frank Boldewin和 Konrad Rieck。
我用Python实现了一个工具(revealpe.py)进行破解。我将这些破解方法放在一个工具里,并做了一些改进,特别是在恶意软件的脱壳方面:
该工具可以破解基于XOR、ADD、ROL的算法,8或32位密钥(我认为这是在恶意软件中最常见的),有或没有密钥增量。此外,它还可以破解维吉尼亚(vigenere)密码,是否可以破解其他更复杂的加密算法还有待发现。
结果:
该脚本在目标文件上尝试所有的破解方法,可以匹配不同的算法和密钥。它会为每种结果创建一个文件,命名格式如下:
<original_file_name>.<algorithm>_<offset_match>_<param1>_<param2>.<dec | decpe>
后缀名.dec表示用算法和密钥解密得到的文件。后缀名.decpe表示找到的那些被解密并提取有效的PE文件。
例如,一个恶意软件f658526e1227c45415544063997b49c8,破解后可以得到下列结果:
f658526e1227c45415544063997b49c8.XOR1_1f60_88_ff.dec
f658526e1227c45415544063997b49c8.XOR1_1f60_88_ff.decpe
f658526e1227c45415544063997b49c8.XOR4_1f60_85868788_fbfbfbfc.dec
匹配位置为0x1f60。前两条结果表示可以用xor_byte解密,密钥初始值0x88,增量0xff。第三条结果表示用xor_dword解密,密钥初始值0x85868788,增量0xfbfbfbfc,但是没有生成.decpe文件,所以该算法和找到的密钥只适用于给定的明文,而不适用于完整的PE文件(或许这是对齐的问题,如果设置选项为不对齐,则会得到xor_dword算法的正确密钥)。
这里是一个短视频,展示了该工具的使用:
https://youtu.be/pRuyN64ZkAg
这里是一些可能被攻击的弱加密算法的例子。
P xor K = C -> K = C xor P
P add K = C -> K = C sub P
例如:
密钥初始值:0x85,无增量。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课