验证Android应用程序未被重新打包?

22

我想提高我的安卓应用程序的安全性,以便在.apk文件被提取、修改、重新打包和重签名时发出警报。这里是Zdnet的一篇文章,指出了这个问题link1

问题在于,如果黑客针对该应用程序,他们可以添加恶意代码并上传到另一个应用程序商店,欺骗用户下载它。

所以,我想编写代码来验证apk或签名证书的校验和?

我知道谷歌Play商店许可模块提供了类似的功能,但我正在寻找非付费应用程序和其他/非市场的解决方案。


这是一个旧问题,但我已经进行了研究,并最近撰写了一篇博客文章,其中包括签名验证 https://www.airpair.com/android/posts/adding-tampering-detection-to-your-android-app - scottyab
请问如何验证我下载的 APK 文件的真实性? - Ciro Santilli OurBigBook.com
3个回答

3

我最终使用了Dexguard(Android付费混淆器)。它提供了一个模块来执行apk验证。它易于实现,并提供了比平均水平更好的保护。

以下是进行检查的代码:

dexguard.util.TamperDetection.checkApk(context)

主要问题在于存储apk的校验和以进行验证,因为它可能会被替换。 Dexguard的做法是在本地检查它,但使用其他功能(如类/字符串加密和API隐藏)会模糊这个调用。

3
可能的另一个问题是黑客在重新打包应用之前替换或删除DexGuard检查。 - jackmis
我即使将DexGuard添加到我的应用程序中,仍然无法看到tamperDetection,我是否需要添加任何库?谢谢。 - Alireza Rabiei

2

谢谢,这些文章指出了如何从PackageManager获取应用程序的签名。但是并没有指出如何验证它是否正确(我可能忽略了一些非常明显的东西)。 - scottyab

0

使用Google许可证服务,它将每隔几天连接到Play商店,以确保用户购买了应用程序(您可以设置数量)。此外,请查看ProGuard。它会剥离代码中的所有类、方法和变量名称,使得一旦反编译后很难理解。


谢谢,我知道许可证服务,但对于非付费应用程序来说不太好,我已经更新了问题。此外,混淆是一个很好的开始,但不能防止反编译,虽然它确实使它更难。 - scottyab
这对于付费应用程序也不够好。在Aptoide上上传的几个应用程序已经破解了Google许可证。 - beetree

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