apk 在混淆了之后我们通过静态分析有时候是远远不够的,就需要动态调试 smali 语言了,在以前我们用的都是 eclipse 配合 apktool 动态调试 apk,如今 android studio 如此普及,我们可以用 IDEA 调试。
注意:idea 推荐用 14,不推荐用最新的 android studio,因为本人测试,最新的 android studio 装上 smalidea0.03 后打不上断点
使用 apktools 拆包,执行命令
- apktool d mytestapp.apk
然后我们进入 mytestapp 文件夹,编辑 AndroidManifest.xml,在 Application 标签里面加上
,这样我们再回编译的时候就可以调试了,由于我的 apk 是 debug 版本所以会默认带
- android:debuggable="true"
修改完之后我们执行指令回编译,如图
- apktool b mytestapp
执行完成我们进入 mytestapp\dist 文件夹,对我们编译好的文件进行签名,把我的签名文件 MartinHan.jks (
下载地址然后安装签名后 app 到手机
) 拷贝到当前文件夹,密码输入:111111。
- jarsigner - verbose - sigalg SHA1withRSA - digestalg SHA1 - keystore "MartinHan.jks" - signedjar _signed.apk "mytestapp.apk""111111"
- adb install _signed.apk
我们安装好 IDEA,然后准备安装 smalidea 插件 File -> Settings -> Plugins 然后点击 Install plugin from disk 如图
然后安装完成了之后我们重启 IDEA。编译器就配置好了
我们打开 IDEA,File -> Open,然后选择我们 mytestapp 文件夹,就是我们执行 apktool d mytestapp 后生成的文件夹。 点击 OK,用 IDEA 将这个文件夹当成一个项目打开。
点击 Run -> Edit Configurations 打开如图所示对话框,点击绿色加号,选择 Remote
接下来把端口改成 8700,如图
点击 ok 确定,远程调试我们就配置好了,动手开始调试。
我们首先在手机端打开 mytestapp,如图
打开 ddms 我们就看到回编译的程序了,并且是可调式状态,我们鼠标选中这个进程
然后我们点击 IDEA 的调试,按钮,如图
然后我们的 IDEA 出现了连接上了,表示现在已经可以动态调试了
根据静态分析, 我们分析到了 MainActivity$1 的 onClick 方法就是我们点击 Button 以后触发的事件,我们打好断点,我在 MainActivity$1 的第 54 行打好断点,如图
此时我们点击 Button, 发现断点断到了这里,如图
至此,用 IDEA 动态调试 android apk 成功
这个 apk 是我写的一个 apk,在真正的动态调试中,很有可能,开发人员在程序中加入了检测调试器的代码,还需要自己鉴别代码,并且注释掉,或者更改掉。
还有的 apk 进行了加壳,需要首先脱壳。
个人博客: MartinHan 的小站
博客网站: hanhan12312 的专栏
知乎: MartinHan01
来源: https://juejin.im/post/5a31f385f265da43346fed48