文章目录
  1. 1. 前言
  2. 2. 准备工作
  3. 3. 重打包apk
  4. 4. 调试环境设置
  5. 5. 调试实战

前言

本文用eclipse主要是调试smali代码,不涉及原生程序,原生程序可以使用ida进行调试。

准备工作

1.crackeme02.apk(一个用于调试的app)
2.eclipse
3.apktool
4.signapk(用于签名重打包的apk)
5.相关环境(如jdk,模拟器或手机等等)

重打包apk

1.反编译apk

1
apktool d -d crackme02.apk

此处使用-d参数,因为这样反编译出来的文件后缀是.java,而java文件才能被eclipse识别并调试。

2.首先到反编译输出的文件夹中的AndroidManifest.xml文件中,将android:debuggable属性设置为true

3.接着在MainActivity的OnCreate方法中添加调试等待,在onCreate方法下面一行添加:

1
a=0;// invoke-static {}, Landroid/os/Debug;->waitForDebugger()V

4.保存修改的文件,重新打包,并签名。

1
apktool b -d crackme02.apk

调试环境设置

1.在手机或模拟器上安装刚刚修改打包好的apk

2.将修改的源码导入eclipse中

3.以crackeme02.apk为例,

(1)在MainActivity.java的311行(即刚刚添加调试等待代码的那一行)设置断点

(2)在MainActivity$1.java的43行和51行设置断点(即onclick方法下面)

4.在DDMS窗口查看可调试程序的端口号,即最后一栏显示的端口号。

5.接下来将代码和调试程序关联。
Debug Configuration->Remote Java Application->Port 填刚刚看到的端口号。

调试实战

1.若ecplise的Debug窗口的内容都是Dalvik VM的内容,则退出app再重新进入,直到有显示MainActivity->onCreate的内容,这样才可以正常调试。

2.程序的简单功能是匹配用户名和注册码,我们想要做的就是破解注册码。运行调试(F8),填写用户名和随便写一个注册码,点击注册。

3.这时候程序会开始运行,跳转。接着可以单步跟踪,并且利用设置断点,让程序运行到我们想要到达的位置然后停下来,在窗口右边我们可以观察寄存器的数值。我们想要的注册码的值就可以通过调试观察得到。

文章目录
  1. 1. 前言
  2. 2. 准备工作
  3. 3. 重打包apk
  4. 4. 调试环境设置
  5. 5. 调试实战