Android应用程序如何计算自己的MD5校验和

6

已经安装的Android应用程序如何计算自身的MD5校验和?尝试过搜索,但所有结果都是关于另一个应用程序计算其他应用程序校验和的内容。


你可以为每个用户提供一个独特的软件版本...但为什么不开发一个文件类型管理器,它可以加密头部并与自己的文件空间服务器查找智能地损坏文件。 - Ember Leona
1个回答

9
如何使用?为了进行比较,期望的校验和需要在APK中。但是如果有人更改了您的APK(重新打包等),他们也可以轻松地更改期望值。您可以从服务器获取它,但是如果他们正在处理您的软件包,则禁用它也不太困难。此外,某些工具将直接修补Dalvik缓存中的代码,从而改变您的应用程序的功能,而无需触及APK。

通常,您只需获取APK路径,以二进制形式读取并使用MessageDigest进行计算。您可以使用PackageManager获取应用程序信息,然后ApplicationInfo#sourceDir提供软件包的位置。顺便说一句,在JB(4.1及更高版本)上的付费应用程序中,这可能无法正常工作,因为您没有权限读取实际的APK(这是“向前锁定”或“应用程序加密”的结果)。


1
嗯,我对为我正在开发的一堆应用程序编写一个库很感兴趣,该库基本上会调用主页进行许可证验证等操作。它将传递IMEI、应用程序ID、应用程序版本、APK校验和等信息,这些信息在初始化Activity时都会传递给类。然后,Web端将比较传递的校验和与预期版本的校验和是否相符。如果不匹配,则可以认为该软件包已被篡改(也许是盗版?) - WhiskeyTangoFoxtrot
我可以被盗版而不被篡改。也可以在不更改APK的情况下进行修补(参见Lucky Patcher)。那么你如何知道IMEI呢?如果设备只支持WiFi怎么办?总的来说这不是一件容易的事情。你可能需要研究一下谷歌的LVL,尽管它也有自己的问题。 - Nikolay Elenkov
2
正如Whiskey所提到的,它确实可以很有用。对于想要遏制在线排行榜作弊的开发人员来说,除了推送分数之外,让应用程序向服务器发送哈希值意味着这是一种防止apk篡改的可靠方法,即使它仍然会受到动态攻击的影响。 - Mark

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接