1. 问题说明

APK 应用完整性即移动客户端程序安装后,在每次启动时都会对自身文件进行完整性进行校验。防止攻击者通过反编译的方法在客户端程序中植入自己的木马,客户端程序如果没有自校验机制的话,攻击者可能会通过篡改客户端程序窃取手机用户的隐私信息。

2. 测试步骤

2.1 使用 Apktools 反编译 APK 文件

在公众号后台回复「0206」获取 Apktool 工具。

进入 apktool 文件夹下,输入以下命令,反编译 APK 文件:

  1. apktool d xxxxx.apk

应用完整性校验 - 图1

反编译结果,生成同名文件夹。
应用完整性校验 - 图2

2.2 修改编译后的文件

这里可以选择修改 smali 文件或者修改图片内容,这里选择修改 smail 文件。

  1. 修改图片:可以替换图片、修改图片内容,但是要保持后缀名相同
  2. 修改 Smail 文件:添加 Smail 代码,例如静态变量、函数等等,或者修改原有的 Smail 代码,但是要注意修改的内容

这里我们打开res/values/strings.xml文件,修改app的名字
应用完整性校验 - 图3

2.3 重新打包

如果出现下面这种情况,则说明打包失败,该 APP 存在完整性校验,如果打包完成则需要跟进一步的测试来确定是否真的存在完整性问题。

  1. apktool b xxxx-release -o xxxx-release.apk

应用完整性校验 - 图4

2.4 签名

如果打包成功了,接下来我们就对 APK 文件进行签名。

同样在公众号后台回复「0206」获取 APK 签名工具。
应用完整性校验 - 图5

创建自己的证书。

  1. keytool -genkeypair -keystore 密钥库名 -alias 密钥别名 -validity 天数 -keyalg RSA

应用完整性校验 - 图6

查看证书信息。

  1. keytool -list -v keystore 证书名字

应用完整性校验 - 图7

使用签名工具将刚才我们自己创建的证书对修改后的 APK 文件进行签名。
应用完整性校验 - 图8

签名成功。
应用完整性校验 - 图9

3. 修复建议

在 Android 模拟器或者安卓手机上面安装打包后的 APP,看是否可以成功安装,如果可以成功安装则说明存在「完整性校验问题」,如果不能安装成功,则说明不存在「完整性问题」。