教我兄弟学Android逆向04-课后作业

《教我兄弟学Android逆向》04的课后作业。

教程笔记

将apk反编译成smali文件

AndroidKiller

使用AndroidKiller分析apk,然后按照如下图所示操作,即可获取apk反编译之后的smali文件。

apktool

使用命令apktool d xxx.apk即可反编译apk并获得其smali代码。

在Android Studio中打开DDMS

AS3.0之后,在菜单栏的tools下就没有Android这个选项了,也就没法很快捷的打开DDMS工具,google官方文档对于此种情况下打开DDMS的方式的说明如下。

Start Android Device Monitor
To start the standalone Device Monitor application, enter the following on the command line in the android-sdk/tools/ directory:monitor.

也就是可通过以下方式打开DDMS。

  1. 找到AndroidStudio配置的SDK路径,如下图;
  2. 在SDK的android-sdk/tools/路径下找到批处理文件monitor.bat
  3. 双击monitor.bat即可打开DDMS。

利用AS动态调试smali代码

调试前提

在要调试的apk的AndroidManifest.xml文件的application标签里要有android:debuggable="true"这句代码,没有是不能调试的。

所需工具

  • Android Studio
  • AndroidKiller
  • DDMS
  • adb
  • Android设备/模拟器
  • ……

基本步骤

  1. 获取apk的smali代码,并且打开DDMS。
  2. 找到要调试APK的包名和入口的Activity(可以利用工具AndroidKiller查看)。

  1. 安装要调试的apk到手机中,并用数据线连接手机,打开USB调试模式。打开命令行,输入命令 adb shell am start -D -n hfdcxy.com.myapplication/hfdcxy.com.myapplication.MainActivity 对apk进行动态调试。这条命令运行后手机屏幕将会进入到调试界面。(如果手机屏幕没有进入到调试界面说明USB没有连接好手机、或者USB调试模式没有打开、或者其他原因。)
  2. 查看Android Device Monitor(DDMS),记住下图圈起来的两个值 然后把DDMS关掉。(这里一定要关掉,因为它会占用8700端口,导致后面转发端口失败。)

  1. 打开命令行窗口,输入命令 adb forward tcp:8700 jdwp:19509转发8700端口。 (这里jdwp是自己Android Device Monitor中要调试app的Online值 )
  2. 打开AS,加载smali代码。如下图,对src文件夹右键–>Make Directory As —>Source Root

  1. 配置远程调试的选项,选择Run–>Edit Configurations并增加一个Remote调试的调试选项,端口选择:8700
  2. 选择File–>Project Structure 配置SDK。

  1. 在Smali中下好断点,下好断点之后Run–>Debug’smali’,这里的smali是我们之前配置好的调试选项,此时运行手机上的程序,就可以开始调试了。

课后练习

在第一次按照教程进行尝试时,进行到第9步时,并没有成功启动debugger,而是出现了如下图所示的报错,提示8700端口无法连接,于是重新进行端口转发(应该是等待调试的时间太长,手机与电脑的连接断开了),就可以成功调试了。

在自己尝试动态调试的过程中发现,debug窗口中的变量的具体值是可以通过点击下图所示选项进行修改的,但是watches窗口中的寄存器的具体值是没法修改的。

总结

在第一次完整的配置之后,对于同一个要调试的apk,动态调试的步骤可以简化为——3——>5——>在Android Studio中加载smali代码,然后下断点run debug进行调试

参考资料

AndroidStudio 3.0中之后无法打开DDMS问题