Smalidea无源码调试 android 应用

author:瘦蛟舞

smalidea是一款 IntelliJ IDEA/Android Studio的 smali 插件

已有功能

  • 语法高亮/错误提示
  • 字节码级别调试
    • 断点
    • 单步调试
    • 寄存器查看
    • 本地窗口 java 语法支持,debug 模式下同样支持
  • 支持跳转,方便追踪变量/函数/类.(Xref也支持)
  • 查找用法
  • 重命名
  • 从 java 代码引用 smali 类
  • 错误反馈...

安装

  • 下载插件smalidea
  • 进入IntelliJ IDEA/Android Studio开始安装插件,进入Settings->Plugins点击Install plugin from disk选中下载好的压缩包.
  • 点击apply

开启应用调试

要调试一个apk里面的dex代码,必须满足以下两个条件中的任何一个:

  • apk中的AndroidManifest.xml文件中的Application标签包含属性android:debuggable=”true”
  • /default.prop中ro.debuggable的值为1

可选方案:

  • apktool 反编译app 后在AndroidManifest.xml文件中插入android:debuggable=”true”
  • hook system debug (Xinstaller)
  • 修改boot.img

个人觉得改 boot.img和二次打包比较麻烦,所以这里采用 hook 方式达到开启所有应用调试的目的,xposed 插件代码如下

效果如下图

如果遇到如下错误

可以使用重启 adb server 来解决

如果调试中遇到如下错误,确保关闭了其他 IDE 或者 DDMS,解除端口占用

调试应用

注意:IDEA 14.1及以上版本才支持单步调试

  • 使用 baksmali 反编译应用

  • 转到 IDEA 中,导入新工程,选中之前的目录

  • 导入时选择Create project from existing sources

  • 成功导入工程后右键点击 src 目录,设定Mark Directory As->Sources Root

  • 打开Module setting设置对应的 JDK

  • 安装debug应用

  • 找到debug应用进程,启动应用

    如果不用 ddms 可以使用如下步骤:

  • 在 IDEA 配置远程调试(Run->Edit Configurations),更改debug端口为8700

  • Run->Debug

    Connected to the target VM, address: 'localhost:8700', transport: 'socket'

  • 断点触发后就可以单步调试

reference

http://www.kanxue.com/bbs/showthread.php?p=1338639

https://github.com/JesusFreke/smali/wiki/smalidea

https://github.com/pylerSM/XInstaller

评论

soFree2016-06-02 19:19:33

@mark 你debug启动apk后,在idea或android Studio右下角会有一个Watches窗口,选择“+”,添加你想监控的接触器和其他变量:p0-pN,v0-vN(注意大小写敏感)
继续调试,Watches窗口中的监控数据会实时更新

Mark2016-04-27 16:58:12

请问如何查看到寄存器的值?

大和尚2016-03-15 16:23:18

呵呵呵呵呵呵,xposed框架里面的Process应该指定为android.os.Process.class;否则会默认为java.lang.Process.class;代码执行就达不到修改ro.debuggable的效果啦!
幸亏看了下android源代码,否则上当了还。

imesong2016-02-04 09:35:06

不使用 smaliidea ,IDEA也支持 断点调试吧?

瘦蛟舞2015-07-27 18:24:52

@MayIKissYou 这个爱心捐赠有些坑....没有一个长期的项目...都是募集到一定金额就关闭了.

MayIKissYou2015-07-27 18:18:22

打赏扫出来竟然是爱心捐助 你也是人才

MayIKissYou2015-07-27 18:13:28

啧啧 终于搞定了 用起来还不错哦

瘦蛟舞2015-07-23 16:45:52

@SADASD 没遇到过,有 crash 日志么

qhwlpg2015-07-22 22:43:52

明日试试

瘦蛟舞2015-07-22 22:02:07

@夸父追日 正准备洗了~

夸父追日2015-07-22 20:46:20

洗干净了么?瘦瘦

从容2015-07-22 19:14:28

mark 感谢楼主