android - 盗版,盗版,盗版。我能做些什么?

标签 android piracy

我刚刚发布了一个应用程序,一个付费应用程序,4 天后一位用户告诉我在中国有另一个网站托管我的应用程序。我从那里下载了它,它在我的设备上运行良好!

这里有帖子说人们可以更改包名称并重新发布 apk。但这不是我的情况,破解版仍然使用相同的包名。我在程序中使用了Android Vending Licensing,但是破解版根本不做授权检查。我使用 ProGuard 对其进行了混淆,但这并不能阻止黑客。

问题 #1:我按照 Google 的说明签署了 apk 文件。但是,他们仍然修改了代码并取出了许可检查部分。签署 apk 文件是为了防止人们篡改文件内容,我错了吗?

问题 #2:对于 Win32 .exe 程序,我曾经使用校验和来确定文件是否已被更改。它是这样工作的:创建 .exe 时,我使用一个工具来计算文件字节内容的总和,然后将其填充到文件中的某个位置,例如,文本模式“我的签名”之后的 4 个字节.然后在运行时,程序打开.exe文件,计算字节总和,与签名后的整数进行比较。

有人在 apk 文件上尝试过这种方法吗?愿意分享您的经验吗?

最佳答案

最终,Android 中应用程序的内置保护非常差。以下是您的最佳做法。

1) 是的 Google 建议使用代码混淆、签名编码,并且他们的许可证验证服务器旨在防止软件盗窃。然而,它们的实现存在很大缺陷。 APK 必须运行的唯一要求是对其进行签名。不管是谁签的都无所谓。没有检查您的签名是与它签署的那个。因此,要破解它,您只需删除许可证检查并使用您想要的任何证书重新签名。然后用户可以在选中“允许非市场应用”的情况下将其加载到手机上。

不要按原样使用 Google 许可。大量修改代码。添加一些新参数以在生成 key 时使用。移动代码/重新架构它。不要将 Google 许可库作为库项目包含在内。将其直接放入您的代码中。使代码尽可能细长和笨拙。添加不执行任何操作但动态修改值的函数。稍后制作其他功能将它们转换回来。在整个代码库中传播许可证验证。

如果您不执行这些步骤,则可以自动破解代码。通过执行这些步骤,至少破解者需要花时间手动破解它。这可能最多只需要几个小时。但是几个小时比立即破解标准的谷歌许可层要多得多。有些破解工具实际上只会自动下载新发布的 android 软件包,如果他们使用标准的 android 许可,则破解它们并将破解的 APK 上传到这些类型的网站。通过使您的实现而不是普通实现,您会使事情变得更加困难,而您只需花费几个小时的努力。

2) 这是一种常见的防破解技术。如果需要,您可以在 Android 上执行此操作。但它可以在大约5分钟内破解。如果你谷歌有关于如何破解这个特定技术的教程。基本上你只需在代码中查找 CRC 调用,然后在 CRC 返回后删除检查。

Android 没有固有的安全性。您可以root任何手机并下载APK。您可以轻松破解 APK 以启用调试,并且只需单步执行代码即可查看您存储在代码中的任何 key 。所以最后我不会花太多时间在这上面。保护 Android 应用程序是不可能的。我会按照上面列表中的常识进行操作,然后继续。

3) 如果您真的很偏执,您可以在自己的许可服务器上实现您自己的许可。这是我采用的方法,但不是为了保护应用程序免遭盗窃,而是为我提供了一种机制,可以直接从我的网站销售应用程序,这样没有 Google Play 的用户仍然可以购买我的应用程序。

关于android - 盗版,盗版,盗版。我能做些什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8611960/

相关文章:

javascript - 有什么方法可以防止人们让我的网页游戏离线可用吗?

android - Google Play 控制台崩溃报告 java.lang.OutOfMemoryError

java - 从方法中取消定时器

copy-protection - 如何阻止海盗?有人已经取消并盗版了我的脚本 :(

android - 我应该如何编码来抵抗 "one-click piracy"?

javascript - HTML5 App反盗版技巧?

android - 旋转矩形并计算旋转后所需的额外空间

java - 将curl命令翻译成java/android

android - 来自 MediaMetadataRetriever 的 getScaledFrameAtTime 太慢而无法在 Android 10 中返回位图