是否可以反编译 已签名的apk (例如,使用keystore A
签名),修改其代码使用不同的密钥库(例如,keystore B
)重新编译并签名?
这样的apk会在设备上安装并运行吗?
答案 0 :(得分:7)
是的,这是可能的,这正是将应用程序投放到黑市时会发生的情况。当然,这尤其适用于那些不关心保护他们的apk
的人我会按照你的步骤逐点给你一个亮点,但你完全有责任最终完成所有这些工作
1)反编译已签名的apk
此步骤通常集中在原始apk上应用apktool命令:
apktool d app_to_tamper.apk
这会生成一个文件夹,比如app_to_tamper_folder
2)修改其代码 - >我不会在这里添加任何东西
3)重新编译
这一步通常集中在修改后的apk [实际上在其文件夹上]应用下一个apktool命令:
apktool b app_to_tamper_folder
从上一个命令中,您将获得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
所以例如[这里我用debug.keystore签名]:
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore debug.keystore tampered_app.apk androiddebugkey
您可以选择验证apk
jarsigner -verify -verbose -certs $UNSIGN-APK-PATH
5)优化它
此步骤基于名为zipalign
的工具和以下命令:
zipalign -v 4 $UNSIGN-APK-PATH $OUTPUT-APK-PATH
所以例如:
zipalign -v 4 tampered_app.apk final_tampered_app.apk
基本上它会对齐APK中的所有未压缩数据,例如图像或原始文件。这将减少运行应用程序时消耗的RAM量。有关详细信息,请参阅Android官方文档here。请注意,根据您选择签名的工具,您可能必须使用不同的时间轴
来应用此命令此时您已准备好安装final_tampered_app.apk
并在手机上运行
6)奖金
正如我所说,这种情况特别发生在那些甚至不想保护apk的人身上。 Android Studio原生支持一种工具 - ProGuard - 能够提供基本的混淆。这不足以让你免受攻击者的伤害,正如我在another post中广泛展示的那样,但肯定会让应用程序立即篡改更加困难
为了获得更强大的保护,请使用一些付费工具,尤其是当应用包含敏感数据时[例如医疗保健,金融科技等]。这样可以防止您/您公司/您的应用程序出现不良信誉,从而提高用户的信任度和安全性。比抱歉更安全,特别是现在