知识背景
- dex
- odex
dex文件
xxx.java->xxx.class->classes.dex
拿一个apk解压后你会看到一个classes.dex文件,我们逆的目标就是他,也就是apk中的源码都在classes.dex文件中。
odex文件
odex是安卓上的应用程序apk中提取出来的可运行文件,即将APK中的classes.dex文件通过dex优化过程将其优化生成一个odex文件单独存放,原APK中的classes.dex文件会保留的。
获取dex文件
由于小米系统Settings.apk解压后没有类似classes.dex文件,我们得想办法获取。基本思路就是odex文件通过工具来获取dex文件。
从rom固件中获取system系统文件
MIUI官网下载固件
提取system文件
由于rom下载解压后的文件目录是这样的
其中并没有找到system目录,从android 5.0开始,升级包中就不包含system目录了,而是用system.new.dat代替,那么我们就得解压该文件来获取system目录文件。解压 system.new.dat文件请参考亲测Android 7.0可用 system.new.dat 解包 打包工具汉化修改版
解压完之后会在相应的目录生成system.img镜像文件我们得到system.img就相当于得到了system文件目录了。然后网上自行搜索下载一个 system.img解压工具即可解压system.img得到system文件。
获取dex文件
odex文件路径:system/priv-app/Settings/oat/arm64/Settings.odex
baksmali.jar
baksmali.jar 用于将odex解析成dex的工具。
下载地址baksmali.jar
命令行:java -jar baksmali.jar de Settings.odex
如果成功,将会在当前目录生成一个out目录文件,如果不成功,那么比较遗憾,我们只能通过其他手段来获取。一般失败的log如下:
log提示缺少boot.oat boot-core-libart.oat 等文件。那么这些文件在哪里呢?找啊,找,终于在
那么很简单,我们直接把Settings.odex文件copy到该目录下,然后在进行解压,ok,好了,生成了out目录文件了。smali文件转换成dex文件
工具smali.jar 将smali文件转出成dex文件
下载地址smali.jar 下载地址
命令:java -jar smali.jar a out -o Settings.dex
最终我们获得Settings.dex文件,但是dex文件还是不能直接查看,我们得将它转出成.jar文件查看。
dex文件转出成.jar文件
工具dex2jar 将dex文件转换成jar文件便于查看
下载地址dex2jar下载地址
命令:java d2j-dex2jar.bat Settings.dex
最终会生成Settings-dex2jar.jar文件。jd-jui工具查看jar文件
下载地址:jd-jui工具下载地址
最终效果图:
总结
逆向最重要是工具的使用,其实按照步骤来,还是没有啥困难的。
步骤:
- 下载官方rom
- 生成system.img镜像文件
- 提取system文件
- 提取apk.odex文件
- 有odex文件生成smali文件
- 有smali文件生成dex文件
- 有dex文件生成jar文件
过程使用到的工具:
- 解压缩system.new.dat 工具 请参考亲测Android 7.0可用 system.new.dat 解包 打包工具汉化修改版
- 解压缩system.img工具 Ext2explore工具 下载地址:Ext2explore
- 生成smali问工具 baksmali.jar 下载地址:baksmali.jar
- 生成dex文件工具 下载地址 smali.jar
- 生成jar文件工具 下载地址 dex2jar
- 查看jar文件工具 下载地址 jd-jui
参考博客