AndroidStudio 调试 smali 代码

本文详细介绍了如何在Android Studio中配置和使用Smaliidea插件进行Smali代码的调试。从调整插件文件类型,到反编译、回编、重新签名和对齐apk,再到安装调试版apk,最后在Android Studio中设置断点并进行调试,一步步带领读者掌握Smali代码的调试技巧。
摘要由CSDN通过智能技术生成

AndroidStudio 调试 smali 代码

调试环境

  • macOS Monterey 12.2
  • AndroidStudio 4.1.3
  • apktool 2.6.0
  • smalidea-0.06.zip
  • app-release.apk(未加固)

点击 smalidea-0.06.zip 进行下载

AndroidStudio 添加 smalidea 插件

将下载好的 smalidea-0.06.zip 插件存放在本地,在 AndroidStudio 执行本地插件安装,安装好后,如下图所示

在这里插入图片描述

调整 smalidea 插件关联的文件类型

安装好 smalidea 插件后,调整 filetype 的通配符,如下图所示:

注意这里的 Smali 文件类型有两个,橙色图标的是 AndroidStudio 自带的,黑色图标是 smalidea 插件识别的文件类型

在这里插入图片描述

选中橙色图标的 Smali 文件类型,删除 Registered patterns 中的 *.smali 模式

在这里插入图片描述

选中黑色图标的 Smail 文件类型,在 Registered patterns 下面添加 *.smali,点击 [OK],至此插件安装和文件类型的处理完成

反编译 app-release.apk

详细的反编译步骤请参考反编译 APK 的基本步骤

$ $ apktool d app-release.apk -o release-out

可以得到 release-out 的内部结构大致如下:

在这里插入图片描述

在 AndroidManifest.xml 添加 android:debuggable=“true” 并保存,保证该 app 能够被 debug

回编 app-release.app

$ apktool b -o repackaged.apk release-out

重新签名 apk 和对齐

$ keytool -genkey -v -keystore custom.keystore -alias mykeyaliasname -keyalg RSA -keysize 2048 -validity 10000

# 签名 apk
$ jarsigner -sigalg SHA1withRSA -digestalg SHA1 -keystore custom.keystore -storepass mystorepass repackaged.apk mykeyaliasname

# 校验你创建的 apk
$ jarsigner -verify repackaged.apk

# 对齐 apk
$ zipalign 4 repackaged.apk repackaged-final.apk

重新安装 apk 到你的设备

如果你设备里面有原来的 apk 安装,请卸载原来的 apk

$ adb install repackaged-final.apk

已调试的方式启动 app

# adb shell am start -D -n [your app package name]/[your app package name].MainActivity
# 例如:我的 app 的 package name 为 com.example.myapp
$ adb shell am start -D -n com.example.myapp/com.example.myapp.MainActivity

命令启动之后,可以在手机或这模拟器中得到如下图所示:

在这里插入图片描述

不要点击 [FORCE CLOSE] 按钮,这是在等待调试器来附加到该应用上

导入 smali 代码到 AndroidStudio

将反编译 app-release.apk 得到的 smali 目录已工程根目录的方式导入到 AndroidStudio 中,导入之后如下图所示

在这里插入图片描述

右键 smali 目录,然后 Mark Directory as Sources Root

在这里插入图片描述

点击 [Attach Debugger to Android Process]

在这里插入图片描述

勾选 Show all processes 复选框,找到你的 app package name,这里我的 app package name 为 com.example.myapp

在这里插入图片描述

点击 [OK],可以发现手机或者模拟器的 Waiting for debugger 提示框消失了

在这里插入图片描述

在 smali 文件中设置断点并调试

在这里插入图片描述

此处,我点击 [登录] 按钮,就回触法 check 方法的调用,程序会停在断点处,如下图所示:

在这里插入图片描述

至此,可以愉快的使用 AndroidStudio 进行 smali 代码的调试了😊

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GettingReal

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值