Android反编译系统应用

5,455 阅读2分钟

在日常开发中,有的时候需要获取系统APK学(po)习(jie),这里主要记录一下获取系统APK流程,该流程在Android 8.0以下已经验证过。

一.找到系统APK odex 文件

系统APK安装的时候会将dex从APK中提取出来并且进行一波优化生成odex文件,dex文件转化为odex文件主要的原因为优化和提前验证dex文件以提高应用运行速度。系统APK保存在/system/app目录中,直接到该目录下找对应APK,这里举例Launcher,进入Launcher目录下,有如下文件:Launcher.apk和oat文件夹,其中Launcher.apk文件中只有资源文件,没有dex文件,dex文件被优化为odex文件保存在oat目录中,将Launcher.apk和odex取出来:

adb pull /system/app/Launcher/Launcher.apk
adb pull /system/app/Launcher/oat/arm64/Launcher.odex

二.odex转dex

odex转为dex需要2个工具jar:smali.jar 和 baksmali.jar:
  • smali.jar:smali文件转为dex文件
  • baksmali.jar:odex文件转为smali文件

首先需要将odex文件转为smali文件:

java -jar baksmali.jar deodex Launcher.odex

上面命令执行后一般都会失败,一般都会报错说找不到其他oat文件,如:

Cannot find dependency boot-telephony-ext.oat in null

一般系统APK都会依赖framwork层一些公共功能库,这样可以防止系统APK被盗运行在其他ROM上,需要到framwork层取到对应oat文件即可:

adb pull /system/framework/arm64/boot-telephony.ext.oat
当获取所有需要的oat文件后,再次执行命令,反编译成功后会生成out目录,目录中均是smali文件。
将smali文件转为dex文件:
java -jar smali-2.2.6.jar assemble out/ -o class.dex

执行上述命令后就可以得到dex文件了,这样就完成了将系统odex文件转化为dex文件的过程了。

三.oat转dex

oat转dex有一个oat2dex的jar包,这个jar包总是不稳定,容易出现奇奇怪怪的问题,后面找了好久,发现一个可以直接提取出来的库,地址为newandroidbook.com/tools/dextr…, 提取dex直接执行如下命令:dextra -dextract XXX.oat即可。

四.反编译dex

这里直接使用jadx打开class.dex即可 。

五.总结

目前厂商会定制各种应用,其中最让人吐槽的就是自定义权限功能,无法通过API来获取某一自定义权限的状态,通过反编译系统APK看看能不能找到漏洞来判断,下一篇将会介绍实际破解过程。