在反编译 App 分析加密字段生成逻辑时,可能会遇到一些参数,参与了加密字段的生成,但是不能在代码或是请求头中觅得踪迹,这时便需要通过断点调试代码,获取所需参数。

所需工具

  • ApkTool:A tool for reverse engineering 3rd party, closed, binary Android apps. It can decode resources to nearly original form and rebuild them after making some modifications.(摘自官网)
  • Android Studio:Android Studio 是谷歌推出的一个Android集成开发工具。
  • Genymotion:一款安卓虚拟机。

使用 ApkTool 反编译 APK

按照官网教程下载好 ApkTool 之后,将 APK 拷贝到 ApkTool 的文件夹中,执行以下命令进行反编译,以 lianjia_test.apk 为例:

1
apktool d lianjia_test.apk

Android Studio 及 Genymotion 相关配置

安装 smalidea 插件

下载 smalidea-0.05.zip,选择从磁盘安装插件。

安装 Genymotion 插件

Browse Repositories中搜索Genymotion插件并安装。 在设置中配置 Genymotion 应用位置:

View/Toolbar中开启工具栏,然后可以看到 Genymotion Device Manager 的图标。

Run/Debug Configurations里面的配置文件,添加Remote

Genymotion 安装 Genymotion-ARM-Translation

由于Genymotion是基于X86的,不支持ARM架构,有些基于ARM架构编译的应用便无法安装。下载ARM转换器 Genymotion-ARM-Translation 使模拟器可以正常安装应用。
此处需要注意的是,不同的模拟器版本对应不同的ARM转换器版本。下载好对应版本之后,直接拖拽到模拟器中安装,然后重启模拟器。

开启 APK 调试

首先将 lianjia_test 文件夹作为项目导入,并设置项目SDK。
有两种方法开启 APP 调试:

  • AndroidMainfest.xml 文件添加 android:debuggable="true"并重新打包
  • 安卓系统中 ro.debuggable 的值设为1

以下分别记录两种操作方法,推荐第二种:

文件AndroidMainfest.xml中,在application中加上:

android:debuggable="true”

重新打包APK,执行以下命令,新的 APK 会在 lianjia_test/dist 文件夹下生成

1
apktool b lianjia_test

对反编译后的 APK 签名

未签名的APK会安装失败,此时需要使用自签名证书对APK签名。

  • 生成RSA密钥对
1
2
keytool -genkeypair -alias lianjia_keypair -keyalg RSA -validity 300 -keystore lianjia.keystore

-genkeypair 生成密钥对
-alias 密钥对的别名
-keyalg 密钥对算法,这里选择RSA
-validity 密钥对的有效期,单位为天
-keystore 生成密钥对的文件名

  • 对未签名的 APK 进行签名
1
jarsigner -verbose -keystore lianjia.keystore -signedjar lianjia_signed.apk lianjia_test.apk lianjia_keypair

-verbose 输出签名详细信息
-keystore 指定密钥对的存储路径
-signedjar 后面三个参数分别是 签名后的APK包 未签名的APK包 密钥对的别名

安装打包好的 APK

安卓系统中 ro.debuggable 的值设为1

​ 在安卓系统 /default.prop 文件中,设置 ro.debuggable=1

使用这种方法,不用对原生 APK 更改即可调试,且操作简单,推荐!

使用 Android Studio 调试

打开安装好的可调试 APP,在终端执行adb shell "dumpsys activity top | grep --color=always ACTIVITY"可以看到当前 activity 及进程号。

执行命令 adb forward tcp:debug端口号 jdwp:apk进程号 ,建立调试通道。

在 Android Studio 中定位变量位置,打断点。

开启 Debug ,获取变量值。