gpt4 book ai didi

java - 检查 Android Assets 完整性

转载 作者:搜寻专家 更新时间:2023-10-30 19:45:17 27 4
gpt4 key购买 nike

在我的文件夹 assets/data 中,有很多包含我的应用静态数据的 XML 文件。

对于某人来说,检索 APK、修改其中的一部分并安装到设备上真的很容易。

我想通过检查我的 assets/data 文件夹的完整性来防止用户更改我的静态数据。

最初我考虑使用 MD5 checksum , 但对于我要拥有的文件数量 (50-100) 来说,它可能太慢了。

你有什么建议吗?

编辑:

此应用是一款游戏,其中包含描述每个级别的 XML 文件。

最佳答案

我将描述如何有效地防止修改和重新打包,而不是如何保护 Assets 本身,尽管您最终可以应用相同的技术来加密它们。它不完美,但您可以使修改变得更加困难。

您使用证书签署应用程序。尽管他们可以删除您的证书,但其他人无法在将证书放回原处时出示相同的证书。因此,您可以在运行时检查应用程序的签名,以确保它符合您的预期。

这里有一些廉价而讨厌的代码来做到这一点:

   PackageManager pm = context.getPackageManager();

PackageInfo info = pm.getPackageInfo( context.getPackageName(), PackageManager.GET_SIGNATURES );

if ( info.signatures[ 0 ].toCharsString().equals( YOUR_SIGNATURE ) )
{
//signature is OK
}

其中 YOUR_SIGNATURE 是一个常量,通过在已签名的应用程序上运行此代码获得。

现在,还有两个您已经暗示过的问题:

  1. 您如何才能阻止某人修改源代码中的常量以匹配他们的证书,然后重新打包并重新签署应用程序?

  2. 您如何阻止某人找到检查方法并将其删除?

两者的答案:你不能,不是绝对,但你可以通过混淆来做得很好。免费的 Proguard,但更有用的商业版 Dexguard,是执行此操作的工具。您可能会对后者目前 350 欧元的成本犹豫不决;另一方面,我曾尝试对受此类保护的应用程序进行逆向工程,除非风险非常高,否则不值得麻烦。

在某种程度上,您也可以为 (1) 自己进行混淆;通过一些难以查找和替换的复杂编程方法在运行时组装签名“常量”。

(2) 确实是一个软件设计问题;使取消支票变得非常复杂或烦人。混淆只会让一开始就更难找到。

作为进一步说明,您可能想看看是否有像 Google Licensing 这样的东西在这方面给你任何保护。不过我对此没有任何经验,所以你只能靠自己了。

关于java - 检查 Android Assets 完整性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14575597/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com