APP漏洞(APK篡改)

漏洞简介

Android系统使用JAR包的签名机制对APK进行完整性保护,确保APK在不安全的网络传输时的完整性得到保护。但Android系统没有对数字签名的颁发者进行管理,任何人都可以生成数字签名,并使用该签名对APK包进行重新签名。如果App本身不对自身的签名来源进行有效的完整性检查,攻击者可以篡改应用(插入恶意代码、木马、后门、广告等),重新签名并且二次发布,导致应用程序完整性被破坏

漏洞利用过程

环境配置

  • java、android studio、apktool.jar、keytool、apksigner

编译与重打包

1.反编译apk

  • 使用apktool进行反编译
    java -jar D:\android\android\apktool.jar d app.apk -o app

APP漏洞(APK篡改)
在powershell当前目录就产生脱壳的后的文件

2.重打包生成apk

  • 使用apktool进行重打包
    java -jar D:\android\android\apktool.jar b app -o app.apk

APP漏洞(APK篡改)
发现在当前目录下,产生了app.apk文件

APP漏洞(APK篡改)
但是如果此时放在模拟器中,是无法安装的,会报错:没有签名证书

APP漏洞(APK篡改)

篡改文件签名

1.生成签名文件

  • 使用keytool生成签名文件
    keytool.exe -genkey -v -keystore debug,jks -keyalg RSA -keysize 2048 -validity 10000

APP漏洞(APK篡改)
在当前目录会生成一个debug.jks

2.使用生成的签名文件签名

  • 使用签名文件给文件apk签名
    java -jar .\apksigner.jar sign --ks D:\android\android\1签名解包\签名操作\debug.jksD:\android\android\1签名解包\签名操作\app.apk

这样就将app.apk成功添加上了签名

3.添加签名成功后,就可以在模拟器中正常安装

由于apk文件缺少自身签名完整性校验,所以我们可以篡改文件的签名。