基于 Smali 文件 Android Studio 动态调试 APP

  • 如果评论区没有及时回复,欢迎来公众号:ByteCode 咨询
  • 公众号:ByteCode。致力于分享最新技术原创文章,涉及 Kotlin、Jetpack、算法、译文、系统源码相关的文章

最近在研究动态调试技术,网上关于基于 Smali 动态调试App的教程很多,很多细节都没有贴出来,走了很多弯路,将调研结果分享一下,如果有写的不好地方,欢迎指正

Github:https://github.com/hi-dhl/DebugApkSmali

准备工作

  • 一部 Root 过的 Android 手机,打开开发者模式
  • Xposed 的运行的环境
  • 安装 smalidea 插件,点击这里下载
  • 安装 BDOpener.apk 或者 XDebug.apk

反编译 Apk(apktool)

点击 这里下载 最新的 apktool , 并配置好环境(不同环境配置的方式不同,参考 官网

下载你需要反编译的 Apk 文件,执行

apktool d 反编译Apk名字.apk

如果反编译出来多个smali文件夹,可以用ant写个脚本,多个文件夹合并成一个

smalidea

AndroidStudio 如果要调试smali代码,需要安装第三方插件: smalidea

AS中【Android Studio–>Preferences–>Plugins–>Install plugin from desk…】,安装插件

Android Studio 导入 smali

  • 新疆一个 Android 工程项目(ps: 一定要新建Android项目,否则可能会找不到 “Attach debuger to Android Process”)删掉自动创建的资源和代码文件

  • 复制反编译好的 smali 文件, 到新建 Android 项目 java 文件夹下

PS: 也可以使用我配置好的项目 “ApkSampleSmali” , 需要安装提供的 Sample.apk进行测试

Android Studio 动态调试配置

新建调试配置,【Run–>Edit Configurations–> + –>Remote】,name 随意,端口 8700

动态调试

  • 在 smali 代码中打入断点,如下图标记1

  • 然后点击 “Attach debuger to Android Process” ,如下图标记2

  • 选择你要调试的进程,手动进入对应功能, 即进入断点动态调试(ps: 如果你想要的进程没有展示出来,请重新勾选 xposed module(BDOpener), 重启手机)

运行环境信息

  • Xposed Version90-beta3
  • BDOpener 1.0
  • AndoridStudio 3.3.2
  • smalidea 0.0.5
  • apktool 2.4.0

致力于分享一系列 Android 系统源码、逆向分析、算法、翻译、Jetpack 源码相关的文章,在技术的道路上一起前进

Android10 源码分析

正在写一系列的 Android 10 源码分析的文章,了解系统源码,不仅有助于分析问题,在面试过程中,对我们也是非常有帮助的,如果你同我一样喜欢研究 Android 源码,可以关注我 GitHub 上的 Android10-Source-Analysis

算法题库的归纳和总结

由于 LeetCode 的题库庞大,每个分类都能筛选出数百道题,由于每个人的精力有限,不可能刷完所有题目,因此我按照经典类型题目去分类、和题目的难易程度去排序。

  • 数据结构: 数组、栈、队列、字符串、链表、树……
  • 算法: 查找算法、搜索算法、位运算、排序、数学、……

每道题目都会用 Java 和 kotlin 去实现,并且每道题目都有解题思路,如果你同我一样喜欢算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:Leetcode-Solutions-with-Java-And-Kotlin

精选国外的技术文章

目前正在整理和翻译一系列精选国外的技术文章,不仅仅是翻译,很多优秀的英文技术文章提供了很好思路和方法,每篇文章都会有译者思考部分,对原文的更加深入的解读,可以关注我 GitHub 上的 Technical-Article-Translation

评论