【问题标题】:Protecting Apk File保护 Apk 文件
【发布时间】:2014-09-23 17:28:19
【问题描述】:

我为 android 开发了一个应用程序,我想在 google play 上发布它。 我想在发布之前将 apk 文件发送给其他人。

我的问题是,什么可以保护我的 apk 不被其他人自己发布?

我可以在调试中编译应用程序,所以 google play 不例外。 我可以使用私钥编译发布的应用程序,但如果包名从未 已经上传到google play,其他开发者账号可以直接上传为自己的应用,不是吗?

我所理解的是,如果他没有密钥,私钥会保护应用程序免受使用相同包名的其他人的影响。但是,如果当时还没有上传 apk,什么可以保护它不被上传?此外,逆向工程 apk(签名或调试签名)是否复杂,只需更改包名称。这样,任何人都可以在他的帐户中将任何应用作为“新”应用发布。

也许有人可以把事情弄清楚一点。

提前谢谢

【问题讨论】:

    标签: android apk google-play


    【解决方案1】:

    为防止您的测试人员将您的 apk 上传到应用商店,您可以在 Beta 或 Alpha 阶段将其私下发布到 Play 商店。您可以控制谁可以查看和下载您的应用。不用担心,您不会将其公开。见Use alpha/beta testing & staged rollouts。现在,您可以使用该包名称在 Playstore 上使用它,但仅对测试人员可见性有限。

    为防止有人对您的应用进行逆向工程、更改包名称并在商店中重新发布,正如其他人所提到的,您可以混淆您的代码以使逆向工程更加困难。那里有很多工具。有些是免费的,有些是付费的,但当然还有更多功能,如防篡改等。有关更多详细信息,请参阅How to avoid reverse engineering of an APK file? 问题。

    【讨论】:

    • 我确实把它上传到了google play,但没有发布。所以我想,现在它可以防止其他人上传它,因为包名称已注册到我的开发帐户?到目前为止,我还没有使用 SafeGuard。您认为在上传 apk 时始终使用它很重要吗?如果从 apk 中获取包名并更改它很容易,那是个大问题...
    • 您可以在 15 分钟内使用免费工具从安装在设备上的 apk 获取所有代码、资产、资源文件等,如果您知道正确的工具,可能更快。有一些可以使用的免费调试器。然而,一些付费调试器擅长对 Java 代码进行逆向工程。所以,这取决于你在代码中有多少重要的业务逻辑等。你可以通过混淆来让任何人都变得更难。然而,它仍然不是充分的证据。只是更改包名称并再次上传应用程序并不容易。不过也不是不可能。
    • 您先声明包名的想法很好,但混淆不会本身防止盲目重命名。
    • @ChrisStratton 感谢您的评论。所以你的意思是说可以很容易地更改清单中的包名称,而无需实际对 apk 进行逆向工程并使代码处于可编译状态?我知道混淆不会阻止它,但是对于试图在 Play 商店中使用另一个包名称上传它的人来说,这不会让事情变得困难吗?如果可能的话,还有什么其他方法可以让它变得更难或阻止它)。再次感谢分享。
    • 混淆不能改变任何需要/需要与android平台交互的东西——比如包名。所以他们不需要扭转混淆来改变它。如果有人未经授权通过合法渠道分发您的受版权保护的作品,您有多种可用的法律补救措施。
    【解决方案2】:

    基本上,如果您的 apk 未签名,则无法将其部署到 googlePlay。更多信息here

    您可以使用 proguard 混淆 apk 代码,这使得您的 apk 难以逆向工程。

    【讨论】:

    • 但是我无法在发布模式下编译而不提供签名密钥...我也认为,必须对应用程序进行签名,否则 android 不会安装它。
    • 对,它在调试模式下签名:在调试模式下,您使用 Android SDK 工具生成的调试证书对您的应用进行签名。 这意味着如果您的应用处于调试状态模式没有人不能释放它。否则,如果您在发布模式下登录它是可能的,但没有签名密钥库他们无法更新应用程序。
    • 他们可以用发布密钥轻松地重新签名。
    【解决方案3】:

    我可以在调试中编译应用程序,所以 google play 没有。

    这是真的,Play 不包括未签名的应用程序。但是,逆向工程是一个问题。

    我可以使用私钥编译发布的应用程序,但如果 包名从未上传到google play,另一个开发者 帐户可以将其作为他的应用上传,不是吗?

    这也是事实。没有您的密钥库,他永远无法更新它,但他可以将其上传到 Google Play。当我发送应用程序进行测试时,我从不签署应用程序。

    幸运的是,有一个名为Proguard 的工具可以停止,或者至少让某人很难进行逆向工程。 Proguard 做了很多很酷的事情,但重要的是它通过重命名每个类、方法、字段等来保护你的代码。所以如果你有一个类 MyActivity 有一个方法 doSomething,我现在将是(例如)类 A 方法乙等

    【讨论】:

    • 您无法安装未签名的应用程序,即使是作为测试人员 - 调试应用程序已签名,仅使用调试密钥。并且 proguard 绝不会防止有人完整地分发您的应用程序 - 充其量,它可以保护 other 一些旨在限制未经授权使用的其他机制,防止 最微不足道的尝试禁用它。
    • 当我说未签名时,我实际上是指使用调试密钥签名(当您从 IDE 运行或调试项目时,这会在调试模式下自动完成)。而且,如果您的应用程序使用调试密钥签名并且您确实运行了 proguard,那么没有人可以在 Play 上部署完整的应用程序,并且代码很难进行逆向工程。
    • 您无需对代码进行逆向工程即可使用发布密钥对其进行重新签名。
    猜你喜欢
    • 2013-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-16
    相关资源
    最近更新 更多