首页
社区
课程
招聘
[翻译]恶意软件的脱壳方法(二):弱加密算法
发表于: 2017-10-28 11:11 3495

[翻译]恶意软件的脱壳方法(二):弱加密算法

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)进行破解。我将这些破解方法放在一个工具里,并做了一些改进,特别是在恶意软件的脱壳方面:

        RevealPE

        该工具可以破解基于XOR、ADD、ROL的算法,8或32位密钥(我认为这是在恶意软件中最常见的),有或没有密钥增量。此外,它还可以破解维吉尼亚(vigenere)密码,是否可以破解其他更复杂的加密算法还有待发现。


         tem

        结果:

        该脚本在目标文件上尝试所有的破解方法,可以匹配不同的算法和密钥。它会为每种结果创建一个文件,命名格式如下:

                   <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

          temp.jpg     

        例如:

        密钥初始值:0x85,无增量。


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 1
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//