反编译一个签名的apk,修改和重新编译使用不同于原始签名apk的密钥库?

Aay*_*eja 1 security android android-keystore

是否可以反编译签名的apk(例如,签名keystore A),修改其代码,使用不同的密钥库重新编译签名(比方说)?keystore B

将这样的apk安装并在设备上运行吗?

Ant*_*ino 9

是的,这是可能的,这正是当应用程序被投放到黑市时会发生什么.当然,这尤其发生在那些不关心保护他们的apk的人身上

我会按照你的步骤逐点给你一个亮点,但你完全有责任完成所有这些工作

1)反编译一个签名的apk

此步骤通常集中在原始apk 上应用apktool命令:

apktool d app_to_tamper.apk
Run Code Online (Sandbox Code Playgroud)

这将生成一个文件夹,比如说 app_to_tamper_folder

2)修改它的代码 - >我不会在这里添加任何东西

3)重新编译

此步骤通常集中在修改后的apk [实际上在其文件夹]上应用下一个apktool命令:

apktool b app_to_tamper_folder
Run Code Online (Sandbox Code Playgroud)

从最后一个命令,您将获得一个未签名的tampered_app.apk生成app_to_tamper_folder/dist directory

4)签名

首先你必须签名,tampered_app.apk或者一旦你试图在手机上运行它,它将无法正常工作.至少有两种方法可以做到这一点.最常见的是基于此命令:

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore $YOUR-KEY-STORE-PATH  $UNSIGN-APK-PATH $ALIAS-NAME
Run Code Online (Sandbox Code Playgroud)

所以例如[这里我用debug.keystore签名]:

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore debug.keystore tampered_app.apk androiddebugkey
Run Code Online (Sandbox Code Playgroud)

您可以选择验证apk

jarsigner -verify -verbose -certs $UNSIGN-APK-PATH
Run Code Online (Sandbox Code Playgroud)

5)优化它

此步骤基于调用的工具zipalign和以下命令:

zipalign -v 4 $UNSIGN-APK-PATH $OUTPUT-APK-PATH
Run Code Online (Sandbox Code Playgroud)

例如:

zipalign -v 4 tampered_app.apk final_tampered_app.apk
Run Code Online (Sandbox Code Playgroud)

基本上它会对齐APK中的所有未压缩数据,例如图像或原始文件.这将减少运行应用程序时消耗的RAM量.更多信息可以在Android官方文档中找到.请注意,根据您选择签名的工具,您可能必须使用不同的时间轴应用此命令

此时,您final_tampered_app.apk已准备好安装并在手机上运行


6)奖金

正如我所说,这尤其发生在那些甚至不试图保护apk的人身上.Android Studio原生支持一种工具 - ProGuard - 能够提供基本的混淆.这不足以让你免受攻击者的伤害,因为我在我的另一篇文章中广泛展示但是肯定会让app立即篡改更加困难

为了获得更强大的保护,请使用一些付费工具,尤其是当应用程序包含敏感数据[例如医疗保健,金融科技等]时.这样可以防止您/您公司/您的应用程序出现不良信誉,从而提高用户的信任度和安全性.比抱歉更安全,特别是现在