关于apk
apk,是Android应用程序包(Android application package),是一种压缩包,通过将应用程序所需的代码、程序配置文件和各种图片资源等打包,得到的一个文件,通过手机安装,所以是可以通过解压缩软件(如bandzip、winrar、360压缩等)进行解压,以获取内部文件。
对apk文件进行解压之后,常见组成文件包括:
G:\apk12345 的目录
2019/12/12 14:51 2,680 AndroidManifest.xml
2019/12/12 14:51 2,674,864 classes.dex
2019/12/27 17:29 <DIR> res
2019/12/12 14:51 253,136 resources.arsc
4 个文件 5,400,926 字节
3 个目录 176,297,152,512 可用字节
其中AndroidManifest.xml是程序配置文件,一个或多个classes.dex类似的dex文件,是通过对java文件编译两次(java --> class --> dex)获得,res文件夹用于储存图片、界面配置文件等,resources.arsc是aapt工具编译资源时生成的一个重要文件,App资源能根据配置的变化,索引到相应的资源都要依赖它。
反编译apk
这里涉及的是简单的apk,也就是没有加壳的普通apk,同时也没有将涉密代码剥离和封装到so(共享对象)文件中,所以不会涉及脱壳和动态调试解密so。
所以,基本就是针对dex文件的反汇编操作。
过程如下:
1、dex反编译为jar
使用 dex-tools-2.0 的bat脚本d2j-dex2jar.bat实现反编译
d2j-dex2jar.bat G:\apk12345\classes.dex -o G:\apk12345\classe1.jar
对classes.dex进行反编译,得到文件classe1.jar,如果不会报错,则一切顺利。
2、加载jar源码
使用jd-gui.exe 或者 jd-gui-1.4.0.jar 打开 classe1.jar,可以看到程序的Java所有或大部分源码(左边为class文件,右边为源码内容),进行后续的分析。
当然,也可以使用Android killer将上面的两个步骤合并,之间得到源码,但是有时候该工具不太灵活,出现报错等。
其他常用工具(忽略版本)软件:
jadx-gui-0.8.0.exe
smali-2.2.5.jar
baksmali-2.2.5.jar
apktool_2.3.4.jar
luyten-0.5.4.jar
APK 常用测试框架:
自动化测试:appium(Android、iOS均可)、Calabash(Android、iOS均可)、Instrumentation(Android)、UIAutomator(Android)、Frank(iOS)、XCTest(iOS)。
安全测试:frida、unidbg、unicorn,Drozer、MobSF