Android反编译系统应用

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

一.找到系统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取出来:java

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文件:android

java -jar baksmali.jar deodex Launcher.odex
复制代码

上面命令执行后通常都会失败,通常都会报错说找不到其余oat文件,如:markdown

Cannot find dependency boot-telephony-ext.oat in null
复制代码

通常系统APK都会依赖framwork层一些公共功能库,这样能够防止系统APK被盗运行在其余ROM上,须要到framwork层取到对应oat文件便可:app

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便可。oop

四.反编译dex

这里直接使用jadx打开class.dex便可 。优化

五.总结

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

相关文章
相关标签/搜索