IT学习网 - 爱学习 - 最具影响力综合资讯网站 -- 中国IT界的领航者!
热门关键字:      88888  as  xxx
站外
广告
站外
广告

Android程序反混淆利器——Simplify工具

发布时间:2017-02-11 16:53文章来源:互联网文章作者: 佚名点击次数:
问题背景 Android程序代码混淆是Android开发者经常用来防止app被反编译之后迅速被分析的常见手法。在没有混淆的代码中,被反编译的Android程序极其容易被分析与逆向,分析利器JEB就是一个很好的工具。但是加了混淆之后,函数、变量的名称将被毫无意义的字母

问题背景
Android程序代码混淆是Android开发者经常用来防止app被反编译之后迅速被分析的常见手法。在没有混淆的代码中,被反编译的Android程序极其容易被分析与逆向,分析利器JEB就是一个很好的工具。但是加了混淆之后,函数、变量的名称将被毫无意义的字母替代,这将大大提高分析的难度。有的甚至会增加一些冗余代码,比如下面的例子:
public void doBadStuff() {
int x;
int y;
x = Integer.valueOf("5")
y = Integer.valueOf("10")
x = x * y;
x += 5;
x /= 3;
hackYourPhoneLOL("backdoor");
x = y;
y = x + 10;
y /= 2;
}
该函数的实际意图其实就是执行hackYourPhoneLOL("backdoor");,但是通过代码混淆,增加很多冗余的代码, 使得实际分析的时候工作量增加。对于代码混淆,其实一直并没有一个比较好的思路,也没有万能的工具来解混淆,最常见的方式就是用Android gradle proguard 去尝试那些用Android gradle proguard混淆过的代码,但是成功率极其低(比如对于用DexGuard混淆过的代码)。
public void doBadStuff() {
hackYourPhoneLOL("backdoor");
}
今天要介绍的工具,就是一个通用的Android程序反混淆工具,虽然在执行效率上不是很高,但是思路清晰,代码风格好,值得深入学习与优化。下图是在使用该工具前后,反编译代码的对比图。


图1:代码解混淆之前

图2:代码解混淆之后
可以发现,在代码解混淆之后,关键函数名称、正则表达式等等字符串都能够解析出来了,这样的反编译结果将非常适合分析人员进一步分析恶意代码的功能。
这是github地址:https://github.com/CalebFenton/simplify
该工具的核心思路,就是自己模拟的Dalvik虚拟机执行的方式,将待反编译的代码执行一遍,获知其功能后,将反编译之后的代码简化成分析人员便于理解的形式。
安装方式
由于该项目包含Android框架的子模块,因此用以下两种方式获取代码:
git clone --recursive https://github.com/CalebFenton/simplify.git
or
git submodule update --init --recursive
接着,使用gradlew编译jar文件,当然前提是系统里面安装过了gradlew

./gradlew fatjar
在成功执行之后,Simplify.jar 应该出现在simplify/build/libs/simplify.jar这里,接着你可以使用以下命令行测试Simplify.jar是否安装成功

java -jar simplify/build/libs/simplify.jar -it 'org/cf' simplify/obfuscated-example
注:安装可能出现的问题
由于该工具还在前期开发阶段,因此作者也提出该工具不是很稳定,因此可以尝试使用下面的方式反复尝试是否成功。
1. 首先,确定分析的smali文件包含不多的method或者classes的时候,可以使用-it命令。
2. 如果因此超过了最大的地址访问长度、函数调用分析深度、最大的方法遍历次数等,可以通过改变参数 --max-address-visits, --max-call-depth, --max-method-visits.来修正。
3. 如果实在不行,就是用-v参数来报告问题吧。
完整的使用命令在github中有,这里不再赘述。
例子分析
这里以github里面的一个引导性的例子为切入,来介绍该工具是如何工作的。在介绍该工具如何工作之前,首先简单介绍一下该项目里面包含的模块。
1. smalivm: 该模块是Dalvik虚拟机的模拟器模块,主要用来模块Dalvik虚拟机的执行。它能够根据输入的smali文件返回所有可能的执行路径以及对应的路径得到的寄存器的值。该模拟器能够在不知道一个函数参数的情况下进一步分析,它的方式就是将函数中存在分支的所有结果模拟执行一遍,在完全执行完毕之后,该工具会返回程序执行的每条路径的寄存器的结果,从而便于simplify模块进一步分析,简化混淆的代码。
Android程序反混淆利器——Simplify工具
本文由 IT学习网 整理,转载请注明“转自IT学习网”,并附上链接。
原文链接:http://www.ourlove520.com/Article/netsafe/gongju/729852.html

标签分类:

上一篇:上一篇:工具篇:如何分析恶意文档
下一篇: 下一篇:没有了
无觅关联推荐,快速提升流量