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

时间:2018-06-10 11:56:44

标签: android security android-keystore

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

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

1 个答案:

答案 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中广泛展示的那样,但肯定会让应用程序立即篡改更加困难

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