android反编译系统应用

因为工作需要,需要看看某个系统apk是怎么实现特定的功能的。 看看有没有可以利用的地方

  1. 获取到应用的包名

    • 打开应用的某个页面
    • 进入adb shell
    • shell里面 dumpsys activity|grep ACTIVITY 获取到包名
  2. 根据包名查看应用的信息

    • 获取apk的路径 adb shell pm path {包名}
  3. 把apk拉到本地

    • adb pull {remote path} {local path}
  4. 一键查看应用

    • 下载jadx ,通过这个应用打开.apk

正常的应用到这里就结束了。

但是 What The Fuck !!! apk里面classes.dex没有,是空的,并没有任何的class 文件

  1. 再次获取应用的信息信息

    • adb shell dumpsys package {包名},可以看到codePath
  2. dump所有的code到本地

    • adb pull {remote code path} {local path}
  3. emm… 可以看到有个arm的文件夹,里面有个xxx.odex
    在有的系统,提取做了优化,把里面.dex转换成了.odex提前进行存储

  4. 把xx.odex转换为 dex

    • 准备工作 下载baksmali, smali, oat3dex.jar
    • 把系统的framework拉到本地来 adb pull /system/framework .
    • 从framework中找到 boot.oat, 我试验的机器是在framework/arm的目录下
    • 执行java -jar oat2dex.jar boot boot.oat ,这里会在boot.oat的同级目录下生产dex odex两个子目录
    • 执行 java -jar oat2dex.jar xxx.odex /framework/arm/dex/ (后面的目录是上一步生产的文件夹)
    • 执行java -jar baksmali.jar -a 22 -b -s xxx.dex -o test; (22代表着系统api等级)
    • 执行 java -jar smali.jar -a 22 -j 1 -o classes.dex test;
    • 如果不出意外的话,这里就有一个classes.dex
  5. 再次通过jadx打开classes.dex文件

  6. 完美收工

你可能感兴趣的:(Android)