ideajava代码混淆加密_分析混淆软件,尝试解密被加密的⽂
件
本帖最后由 顺利毕业 于 2019-4-6 14:19 编辑
样本简介:
代码混淆过,不太好分析。
⽣成随机秘钥来加密⽤户⽂件,从⽽实施⾏为。
本贴的内容包括:
1、介绍软件加密⽤户⽂件的流程;
2、对这个混淆软件进⾏静态分析、动态调试分析;
3、修改这个软件,尝试复原被加密的⽂件;
(整理的初衷是尽可能详细地把全过程交代清楚,导致帖⼦⽐较长。先跟⼤家说声抱歉。
如果不想全部看完的话,可以选择⾃⼰感兴趣的部分来看~)
帖⼦的⼤致⽬录:
⼀,本贴涉及的⼯具与⽂件
⼆,介绍软件加密⽤户⽂件的流程
三,静态分析
1、软件初印象
2、静态分析操作的思路
3、开始分析。
四,动态分析
1、感谢丑⼩鸭⼤佬的学习贴
2、⽬的
3、操作思路
4、动态分析
五、软件的卸载
六、尝试恢复被加密的⽤户⽂件
1、操作思路
2、尝试复原的准备⼯作
3、尝试复原
4、查加密结果不⼀致的原因
5、从尝试到放弃
七、总结
1、为什么仅加密头1024个字节
2、为什么解密⽂件失败
⼀,本贴涉及的⼯具与⽂件
Apktool:可对恶意软件进⾏反编译,从⽽获得smali代码;
⽂件编辑器:对smali代码进⾏修改。不⽤怀疑,就是每个系统⾥⾃带的⽂件编辑器;
Android Device Monitor:可⽤于查看模拟器的运⾏状况,从⽽定位恶意软件的运⾏进程等信息;
Android Studio:可对smali代码进⾏debug;
mumu模拟器:安装恶意软件;
signapk.jar:⽤于签名软件。
testKey.pk8⽂件与testKey.x509.pem⽂件:⽤于对重打包后的软件进⾏签名,不签名就没法安装运⾏了。
⼆,软件加密⽤户⽂件的流程(以加密/sdcard⽬录为例)
1、申请权限
申请对外存(/sdcard⽬录)的“写权限”,即在l⽂件中申
请“android.permission.WRITE_EXTERNAL_STORAGE”权限,并在代码中判断/sdcard⽬录是否“可写”;
2、遍历⽂件
遍历/sdcard⽬录下的所有⽂件,根据⿊⽩名单选择即将要加密的⽤户⽂件。
2.1 若采⽤⽩名单模式,即软件指定⾃⼰要加密的⽂件类型(如doc,docx,jpeg,png等),若/sdcard⽬录下⽂件的后缀名在这些⽂件类型范围内,则被软件列⼊“将要加密的⽂件列表”中;
2.2 若采⽤⿊名单模式,即软件指定⾃⼰不可以加密的⽂件类型,若/sdcard⽬录下⽂件的后缀名在这些⽂件类型范围内,则软件将跳过该⽂件,将其它⽂件列⼊“将要加密的⽂件列表”中;
3、加密⽤户⽂件
采⽤官⽅API来加密或⾃定义⽅法来加密。
4、删除原⽂件
否则它的加密有何意义。有些情况下不需要删除原⽂件,因为原⽂件被加密内容直接覆盖。
5、进⾏⾏为
告知⽤户“你的⽂件被我加密啦,给钱就帮你恢复”。⾏为的实现⽅式⼤多以⽂字的形式出现在⼿机界⾯,也可能出现在被加密⽂件内,⼜或是以⾳频的形式来进⾏。
6、解密⽂件
⽤户提交赎⾦后,软件对⽂件进⾏解密。稍微有良⼼⼀点的软件,才会进⾏到这步。有些软件,根本就不提供解密的操
作,“拿钱不办事”。
三,静态分析
1、软件初印象
要分析⼀个软件,总得先看看它长啥样吧。是帅⼩伙,还是邻家⼩,不扔到JEB怎么看得出来呢。那么,扔!
打开JEB,直接把软件拖进来,或者⽤“打开⽂件”也⼀样:
图⽚1.png (100.3 KB, 下载次数: 0)
2019-4-5 14:40 上传
(图⽚1)
图⽚2.png (66.68 KB, 下载次数: 0)
2019-4-5 14:50 上传
(图⽚2.png)
从上⾯两张图可以认定,混淆得挺彻底的,暗暗搓⼿:是个学动态调试的好机会啦。直接上⼿动态调试?上是要上的,但不是现在,得先进⾏⼀波静态分析,否则动态调试时debug都不知道断点该打在哪⾥了。
所以初印象是啥,就是混淆过了呗,没啥。
2、静态分析操作的思路
加密⽂件型的软件跟其他类型的恶意软件不同,它的特征更明显。
分析其他类型的恶意软件时,最好是从⼊⼝Activity⼀步⼀步往下分析(如图⽚1中被圈出的activity,同时有LAUNCHER和MAIN的)。
但此类恶意软件不⽤,因为它的恶意⾏为⾮常突出,加密+,⾄于其他⾏为就不在这个帖⼦的考虑范畴内了。
在(⼆)中,我有提到,该类型软件会遍历⽂件夹,从⽽到想要加密的⽂件。
遍历⽂件夹,⼀般⽤的是File->listFiles()⽅法(参数及类型我就不写了),⽽该⽅法是不会被混淆的,到listFiles()⽅法后,就可到该软件攻击的⽬录,往下继续分析可到加密⽂件、解密⽂件的部分。
到解密⽂件的部分后,修改该软件的smali代码,尝试在未提交赎⾦的情况下调⽤“解密⽂件”的功能,从⽽达到复原⽂件的⽬的。
3、那么,开始分析啦。我先分析为敬。
3.1、⽤JEB打开该软件,直接在Bytecode⾥全局搜“listFile”:
图⽚3.png (101.16 KB, 下载次数: 0)
2019-4-5 14:50 上传
(图⽚3.png)
查看listFiles()被调⽤处的前后⽅法,加解密⽅法离得不远呀。
图⽚4.png (39.23 KB, 下载次数: 0)
2019-4-5 14:50 上传
图⽚5.png (51.12 KB, 下载次数: 0)
2019-4-5 14:50 上传
图⽚6.png (34.37 KB, 下载次数: 0)
2019-4-5 14:50 上传
(图⽚4、5、6)
到这有两个疑问:(1)可疑字符串e.a的值是什么,做什么⽤的;(2)e.e的作⽤是什么,以及在哪被使⽤。
结合该类型恶意软件的⾏为,我们不难猜测,此处的⾏为应该是:遍历⽬录下所有⽂件,对每个⽂件进⾏判断,⽂件名是否包含可疑字符串1或可疑字符串2,将符合某⼀条件的⽂件名保存到e.e 中。可以合理地猜测,后续将会对e.e保存的⽂件进⾏加密或解密。
为⽅便查,将e.a重命名为“可疑字符串EA”,但以本⼈现在的能⼒⽆法静态还原出e.a的值,故打算在后续动态调试时查看e.a的值。
3.2、追查e.e在哪被调⽤。为了⽅便在搜索,先重命名为“可疑⽂件列表”,然后在整个bytecode⾥全局搜索:
图⽚7.png (26.08 KB, 下载次数: 0)
2019-4-5 14:51 上传
(图⽚7.png)
图⽚8.png (55.47 KB, 下载次数: 0)
2019-4-5 14:51 上传
图⽚9.png (57.12 KB, 下载次数: 0)
2019-4-5 14:51 上传
(图⽚8.png,图⽚9.png)
从图⽚8中可看出,v0_4是某⼀⽂件的具体⽂件名,且在图⽚9中对v0_4做了些坏事。那我就直接把图⽚9中相关的⽅法进⾏重命名反混淆,⽅便你们看,直接把相关的⽅法也贴出来,并做了些解释(图⽚10-14是相关⽅法的具体实现,图⽚15是图⽚9反混淆后的结果):
图⽚10.png (50.03 KB, 下载次数: 0)
2019-4-5 14:52 上传
图⽚11.png (50.56 KB, 下载次数: 0)
2019-4-5 14:52 上传
图⽚12.png (51.48 KB, 下载次数: 0)
2019-4-5 14:52 上传
图⽚13.png (59.38 KB, 下载次数: 1)
2019-4-5 14:52 上传
图⽚14.png (46.83 KB, 下载次数: 0)
2019-4-5 14:52 上传
(图⽚10、11、12、13、14)
其中:
图⽚12是⽤官⽅API进⾏加密操作。
图⽚13中看到,最多仅加密头1024个字节。
图⽚14中的pyOfRange(arg6,arg7,arg6.length)是对arg6进⾏复制,从arg7(如arg7等于0)的位置开始复制,直到复制完arg6结束。
图⽚14中的System.arraycopy(arg5,0,v0,0,arg5.length)是将arg5整个复制到v0中。
将图⽚9反混淆后的结果如下:
图⽚15.png (62.04 KB, 下载次数: 0)
2019-4-5 14:52 上传
(图⽚15.png)
反混淆后,整个代码结构更符合“⽂件---加密---解密”了呢,关键的操作流程已经到了呢,⾼兴得搓⼿⼿。
等等,是不是⾼兴得有点早了,这个f.m是个啥呀?那,动态调试吧?静态分析到这,可以先告⼀段落呢。
四、动态分析
1、感谢⼀下
丑⼩鸭⼤佬的学习贴:www.52pojie/thread-658865-1-1.html。感谢前辈~
2、⽬的
1.1、确定恶意软件的攻击⽬标的特性,也就是打算加密哪些类型的⽂件,doc、txt之类的?即,确定e.a(可疑字符串EA)的值。
java源代码加密
1.2、确定加密时所使⽤的密钥,从图12中可以看到与f.m有关。
3、操作思路
获取该软件的smali代码,放到Android Studio⾥,在e.a和f.m被赋值地⽅的smali代码处打断点,在模拟器上运⾏该软件,到Android Studio⾥开启debug模式,记录下这两个值。
4、动态起来~
4.1、获取smali代码。在终端中使⽤命令“apktool dRansom.apk”,其中Ransom.apk在这⾥是这个软件的名称79e6…a71f.apk,d 表⽰反编译(decode)。故这⾥的操作是对该软件进⾏反编译操作:
图⽚16.png (87.41 KB, 下载次数: 0)
2019-4-5 14:53 上传
(图⽚16.png)
反编译后,可在该软件所在⽬录下发现⼀个同名的⽂件夹:
图⽚17.png (22.24 KB, 下载次数: 0)
2019-4-5 14:53 上传
图⽚18.png (39.05 KB, 下载次数: 0)
2019-4-5 14:53 上传
(图⽚17、18)
看到smali⽂件夹了嘛,smali代码来得如此容易~美滋滋
4.2将smali代码放到Android Studio⾥。
具体操作:
4.2.1、在其他任意地⽅新建⼀个⽂件夹,并把图⽚18中的smali⽂件夹拷贝过去,并重命名为src:
图⽚19.png (12.06 KB, 下载次数: 0)
2019-4-5 14:53 上传
图⽚20.png (13.02 KB, 下载次数: 0)
2019-4-5 14:53 上传
(图⽚19、20)
4.2.2、运⾏Android Studio ,在⾸页选择“Open an existing Android Studio project”,选中图⽚20中的test⽂件夹,打开后记得选择为Project:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论