一、前言
今天是端午节,然而小编不能吃粽子了,只能继续破解之路,今天我们来看一下在了解了破解三部曲之后,如何开始脱掉各个市场中的apk壳,关于破解三部曲在之前已经介绍了:
第一篇:Android中使用Eclipse动态调试smali源码
第三篇:Android中破解加固的apk
在看完这三篇文章之后,我们开始操作如何破解市场中的加壳方案,现在市场中比较流行的加壳平台就那么几个:爱加密,梆梆加固,360加固,腾讯加固等,所以后面会一一介绍如何脱掉这些平台的壳。之前也说过现在加固的方案大体思路都是:把源apk进行加密拆分处理,然后在套一个外部的壳Application做一些初始化操作:比如解密apk,动态加载运行即可。但是我们已经知道了如何去破解那些加固的apk了,就是使用IDA给dvmDexFileOpenPartial函数下断点,然后dump出内存中的dex数据即可。因为内存中的dex肯定是解密之后的,所以大体思路知道了,但是这些加固平台也有对策,他们会把做一些反调试操作,对so文件进行混淆加密等,让我们的调试变得比较困难。这才是我们脱壳的阻碍地方。
二、案例分析
好了,说了这么多,下面我们就开始脱壳第一站:爱加密家的壳
为了脱掉他家的壳,我们得首先有一个案例程序,这个比较简单,我们自己弄一个demo程序,然后去他家的网站上加固一下,得到加固之后的apk,然后这时候我们开始破解了,按照惯例:
第一步:解压apk,看看大体的目录,得到classes.dex文件,然后用dex2jar+jd-gui得到Java源码
看到,这里只有Application的壳,而且这个是爱加密加固之后的特点,都是这两个Application的。
第二步:使用apktool来反编译apk,获取资源文件信息
分析一下爱加密的加密流程
也是国际惯例,爱加密把我们的源程序进行加密操作然后隐藏到了一个地方,在之前破解加固apk的那篇文章中也说过了,隐藏的地方就那么几个:assets目录、libs目录、自己的dex文件中
这里我们直接看assets目录:
多了这个东东,猜想这个可能就是处理之后的源apk了。我们在AndroidManifest.xml中看到了入口的Application类,先来看这个类
下面我们来分析一下这个SuperApplication类:
这里一般都是在attachBaseContext这个方法中进行操作的,这里的时机比较早,我们看到首先会调用loadLibs方法进行加载libs:
这里区分不同的平台,然后进行拷贝不同的so文件,继续看copyLib方法:
这里我们可以看到了,从assets目录下把爱加密增加的两个so文件:libexec.so和libexecmain.so拷贝到应用程序的files目录下,我们可以去看看assets/ijm_lib目录下的so文件:
到这里loadLibs方法就执行完了,下面就开始调用NativeApplication的load方法进行加载数据,继续看NativeApplication类:
这里会开始从应用程序的files目录中加载这两个so文件,而且load方法也是一个native方法,我们继续看看这两个so文件内容:
我们首先用IDA打开libexecmain.so文件,但是发现,他里面并没有什么重要信息,连JNI_OnLoad函数都没有东东
我们继续在查看libexec.so文件:
擦,可惜的是,打开提示so文件格式错误,到这里,我们就猜到了,这个so可能被加密处理了,elf格式改了,关于so如何进行加密操作的,不了解的同学可以看这里:Android中如何对so文件进行加密 那么这里我们点击Yes继续强制打开之后,在使用Ctrl+S查看so的各个段信息:
现在可以百分百的确定,这个so文件被处理了,段格式被修改了。我们没办法分析so文件了,当然这里我们可以在dump出内存中的so文件,然后在分析的,但是这个不是今天讲解的重点。我们先分析到这里ÿ