原文链接:www.bigfog.info

1.smali文件格式

头部定义域定义函数定义
.class.field public.method
.super.field staticinstruction
.source.field private.endmethod

2.准备

Android studio(简称AS)
smalidea-0.05.zip(插件)
android killer(修改smali文件)
夜神模拟器
实验程序 crakme02.apk

2.1修改AndroidManifest.xml

使用apktool.jar反编译apk。命令:java -jar apktool.jar d -f xxx.apk
会生成xxx文件夹。动态调试需要在AndroidManifest.xml添加可调试属性android:debuggable="true"

xml表

修改后同样使用apktool.jar进行回编译。命令:java -jar apktool.jar b -f xxx.apk(未签名)>
打包后的apk并没有签名。可以使用jdk自带的keytool生成keystore,然后使用jarsigner进行签名。
以上过程可以使用一些工具来进行修改。反编译后的xxx文件夹是加载到android studio中的源代码。回编译的apk是安装在夜神模拟器中的。

2.2 AS安装smalidea插件

这里的smalidea-0.05.zip插件是下载好的。
依次点击File-->setting-->Plugins点击

安装选取

从磁盘安装后点击apply-->ok-->重启即可

2.3夜神模拟器连接DDMS

  1. 启动模拟器
  2. cd进入到夜神安装bin目录下,执行命令nox_adb.exe connect 127.0.0.1:62001
  3. 如果命令执行错误。可能是nox_adb.exe版本不对,下载相应版本的替换即可。
    我这里是配合了环境变量,并将nox_adb.exe connect 127.0.0.1:62001命令做成一个bat。直接运行图方便。

启动模拟器

模拟器启动后安装回编译并签名的apk

3调试

3.1导入源码

将反编译的xxx文件夹加载到AS,类似加载一个安卓工程(导入....)界面如下:

源码导入

3.2设置远程调试

打开AS,依次点击Run-->edit configurations如图示:

配置远程调试

点击+号,添加remote配置。

添加远程

项目名字随便填,其余地方已用箭头标记

配置端口

3.3打开 Android device Monitor

打开ddms

因为模拟器上没有运行什么应用,所以列表中并没有什么应用显示

程序列表显示

3.4下断点并开启调试

这是一个检测输入是否正确的apk,所以断点就下到checkSN函数处,在代码最左边单击即可。

下调试断点

打开cmd 输入 adb shell am start -D -n com.droider.crackme0201/.MainActivity(包名/启动主activity)
然后模拟器会显示等待调试的弹出框

启动调试

接下来就是在AS中启动程序了Run--->debug

运行程序

DDMS中也会显示调试程序包名

ddms显示

可以看到模拟器已经在程序中启动,而且ddms中红色的甲壳虫也变绿。

模拟器显示

接下来我们随意输入,将程序停在所下断点处。

断点处

可以看到断点已经停下。后续单步调试,查看变量等操作在这里就不介绍。

变量显示
个人总结过程,仅供参考。