关于app的背景
这是记录去年这个时期的工作,当时做过一段时间的安卓逆向。特此记录一下当时破解的流程。希望对大家有一定的帮助,这也是我所希望的。当时的app环境是一个下层带有so的动态库文件,它将classes.dex加密并转移了。所以我们分析的重点在于so文件。最后找到突破点实现了app的逆向工程。
使用的工具以及环境
该实验是在Linux环境和Windows环境下同时进行的。使用的是Ubuntu 12.04和Windows 7操作系统,主要工具是还有就是签名工具,安卓助手等。Linux上面主要使用的是一些辅助命令工具,如file、readelf、nm、C++filt、strings。在Windows环境下面主要使用的工具是IDA-Pro工具,做这个的都知道,这个工具是很强大的。
面临的难题
- arm汇编语言的不熟悉
- so动态库中的调试符号被删除,函数不好确定。
Linux环境搭建
扣app数据
这里使用coredump方法对手机里面的app扣出来,这里能扣出来是因为android的app在手机内存里面是连续存放的,而不是分段存在不同的地方。这里用的手机最好是使用的是源谷歌版的android系统,而不是经过修改过的系统,如米系统等。
步骤如下图所示:
分析扣出来的数据
在Linux环境下,使用strings -t命令,可以通过string字符串的偏移找到我们要截取的开始部分,通过计算得到整个app的大小,在classes.dex的头部已经给出了各个参数的意义以及值。
分析:
取代码:
总结
扣取整体步骤
问题
手机选取的问题:
如果遇到so文件里面有MD5校验和的对比,导致不能继续进行。这时使用IDA分析大概条件判断的位置,将有条件跳转修改成无条件跳转。修改方法是使用编辑器,直接暴力破解,跳过这个步骤。