当前位置:首页 > 燃气灶 > 文章正文

若何检查手机上的 App 是不是正版?

编辑:[db:作者] 时间:2024-08-25 02:56:45

译者 | 苏本如,责编 | 郭芮

头图 | CSDN 下载自视觉中国

若何检查手机上的 App 是不是正版?

出品 | CSDN(ID:CSDNnews)

以下为译文:

仔细看看你的安卓手机上的运用程序,你如何确保它们都是正版的?也便是说,你如何确保你手机上的Instagram运用是正版程序,而不是复制的或假冒的。

当你在网上冲浪的时候,你可以考试测验找出一个网站是否是真实的。
对付网站而言,我们有证书、有安全锁标志、有完全的URL等等,这些可以帮助我们知道网站是真实的和安全的。
那么,对付所有的安卓运用程序而言,我们是否也有一个等效的、可以帮助我们识别的东西呢?

作为一个安卓手机的用户,当我转到“设置/运用程序信息”时,我只能看到下面这些:

你该当把稳到,没有一个直接的方法可以检讨运用程序的真实性。
对付从谷歌运用商店(Google play store)中安装的运用程序,我们确实可以看到一个链接指向该运用程序在谷歌运用商店的地址,但是除此以外,我们找不到任何其他信息或者一些有效性的证明。

那么,如何可靠地检讨运用程序的真实性呢?同时,安卓运用程序如何检讨同一设备上的、和它们协同事情或交流信息的其他运用程序的真实性呢?

答案是:署名证书信息。

出于安全方面的考虑,安卓系统上的所有运用程序在支配到运用商店之前都须要正式地署名。

以是,在理解了为什么我们须要运用程序的署名之后。
我们将在本文深入磋商下列问题:什么是运用程序署名?如何才能实现它?以及它如何担保运用程序的真实性?

什么是运用程序署名?

运用程序署名是在操作系统的最内部实现的。

根据安卓官方供应的文档:

“运用程序署名许可开拓职员识别运用程序的作者,并且许可他们在无需创建繁芜的接口和得到容许的情形下,更新其运用程序。
这样,开拓职员就知道他们的运用程序是未经修正地供应给安卓设备利用的;并且开拓职员可以对其运用程序的行为卖力。

在安卓系统上,运用程序署名是将运用程序放入其运用程序沙盒的第一步。
署名的运用程序证书定义了哪个用户ID与哪个运用程序干系联;不同的运用程序在不同的用户ID下运行。
运用程序署名确保一个运用程序不能访问任何其他运用程序,除非通过定义良好的IPC

如何实现运用程序署名?

安卓供应了利用自署名证书的代码署名方法,开拓职员可以在没有外部帮助或容许的情形下天生这些证书。
证书的申请不须要一个中心计心情构来签署批准。

安卓系统支持三种运用程序署名方案:

v1方案:基于 JAR 署名

这个方案是基于署名的JAR包。
这里要把稳的是:v1署名方案并不会保护APK内的所有文件,会存在一些例外部分,这些部分即便被修正也不会导致署名失落效,比如ZIP元数据。
APK验证器须要处理大量不受信赖(尚未验证)的数据构造,然后丢弃署名未涵盖的数据。
这供应了一个相称大的攻击面。
此外,APK验证器必须解压缩所有的压缩条款,从而花费更多的韶光和内存。
为理解决这些问题,安卓7.0引入了APK署名方案v2。

v2方案:亦即APK署名方案v2,在Android 7.0中引入。
v3方案:亦即APK署名方案v3,在Android 9中引入。

运行安卓7.0及更高版本的设备支持APK署名方案v2(亦即v2方案)和它的更高版本。
(在Android P中,v2方案被更新为v3方案,以支持在署名块中包含附加信息,但在其他情形下也一样。
)。
v2方案对APK的内容进行散列和署名,然后将天生的APK署名块插入APK中。

运用程序可以非常大略地通过Android Studio的选项或命令行进行署名。

打开Android Studio,进入Build > Generate Signed APK。

你可以按照下文中的步骤进行操作,来天生一个署名密钥:https://developer.android.com/studio/publish/app-signing#sign-apk。

当你可以选择谷歌运用商店对你的运用的每一个版本进行署名时,你有很多选择。
详情请参照上面的链接。

天生密钥并查看其内容的大略命令分别如下:

天生秘钥:

keytool -genkey -v -keystore <keystorealias> -storepass <keyStorePassword> -alias <keyAlias> -keypass <keyPassword> -keyalg RSA -keysize 2048 -validity 30000

查看秘钥:

keytool -list -v -keystore <keystorealias> -alias <keyAlias> -storepass <keyStorePassword> -keypass <keyPassword>

备注:你须要用实际值更换上面尖括号里的变量。
根据你的运用程序的实际须要,设置天生密钥、密钥大小和有效日期(以天为单位)的算法须要供应的值。

此外,还可以利用APKSigner和ZipAlign工具来检讨,这些工具很方便(本文将不谈论它们,但是它们非常值得磋商)。

如何通过代码检讨运用程序署名信息?

下面的代码可以用来检讨运用程序署名信息:

public boolean validateAppSignature(Context context) throws NameNotFoundException {PackageInfo packageInfo = context.getPackageManager.getPackageInfo(getPackageName, PackageManager.GET_SIGNATURES);//note sample just checks the first signaturefor (Signature signature : packageInfo.signatures) { // SHA1 the signatureString sha1 = getSHA1(signature.toByteArray);// check is matches hardcoded valuereturn APP_SIGNATURE.equals(sha1);}return false;}

当一个运用程序(APK文件)被安装到安卓设备上时,包管理器将验证APK文件是否已经利用该APK中包含的证书精确地署名。
如果证书(或者更准确地说,证书中的公钥)与用于在设备上签署任何其他APK的密钥匹配,则新APK可以在清单中指定它将与其他类似署名的APK共享UID。

如果设备上的私有署名密钥丢失,会涌现什么情形?

这将导致旧的运用程序无法更新!
这种情形下,它将天生一个新的包名&一个新的证书。
比如说:

Authenticator运用程序是一个身份验证程序,这个运用程序的一个私有运用程序署名密钥丢失或受损,由于在几年前的一次更新中,它的软件包名称从com.google.android.apps.authenticator被变动为com.google.android.apps.authenticator2。
由于此变动,所有后续的Authenticator运用程序更新只能以新的程序包名称发布,并且利用由新的专用署名密钥天生的新署名。

不过,最近谷歌公司也增加了对“rolling key”的支持,这可能会在有这种麻烦的情形下为开拓者节轻一点压力。

以上所有这些内容供你参考,希望你能从中得到一些帮助。
署名是一个至关主要的场景,须要深入理解才能理解安卓系统的整体安全状况。

原文:https://hackernoon.com/how-to-check-whether-the-mobile-app-on-your-phone-is-authentic-or-not-j9gt32lw

本文为 CSDN 翻译,转载请注明来源出处。

☞NB-IoT 连接数过亿,开拓者如何捉住新机遇?

☞华为云跻身Gartner报告中国三强,预示云打算市场的未来变局?

☞数据库激荡40年,深入解析PostgreSQL、NewSQL演进进程

☞黑客用上机器学习你慌不慌?这7种盗取数据的新手段快来认识一下!

☞超详细!
一文见告你SparkStreaming如何整合Kafka!
附代码可实践

☞Libra的Move措辞初探,10行代码实现你第一个智能合约

本站所发布的文字与图片素材为非商业目的改编或整理,版权归原作者所有,如侵权或涉及违法,请联系我们删除,如需转载请保留原文地址:http://www.baanla.com/rqz/89312.html

XML地图 | 自定链接

Copyright 2005-20203 www.baidu.com 版权所有 | 琼ICP备2023011765号-4 | 统计代码

声明:本站所有内容均只可用于学习参考,信息与图片素材来源于互联网,如内容侵权与违规,请与本站联系,将在三个工作日内处理,联系邮箱:123456789@qq.com