我需要获得包签名。所以我使用这段代码得到它:
Signature[] sigs = c.getPackageManager().getPackageInfo(c.getPackageName(),
PackageManager.GET_SIGNATURES).signatures;
但Android Studio给了我这个警告:
从getPackageInfo读取应用程序签名:如果未正确验证,应用程序签名可能被利用;请参阅问题说明了解详情。
应用程序签名的不正确验证可能会导致恶意应用程序使用其真实证书和虚假证书向Play商店提交自身的问题,并且可以访问由于其他应用程序而无法访问的功能或信息检查假证书并忽略其余的证书。请确保验证此方法返回的所有签名。
在这种情况下验证签名是什么意思?我要检查服务器的签名以确保它们匹配,这是什么意思?
在本地测试后,所有输出都是单个否定Integer
,而不是代码所拥有的array
。
答案 0 :(得分:12)
跟踪弹出文本会导致Android Studio this source code fragment。
在同一文件中,a line包含指向outern资源的链接。
进一步跟踪导致this presentation关于"假ID"漏洞。
问题在于,当Android构建信任链时,验证过程仅比较“主题”,而不是将实际密钥与证书签名者详细信息中提供的密钥进行比较。结果,攻击者可以修改信任链并声称由一方签名 - 没有该方实际签名。
由于此错误,会生成错误的证书链,并且可能包含合法证书,这些证书嵌入在APK中但未用于实际签署该应用程序。
以下是the commit Android源代码,可防止使用此漏洞。 这意味着如果该设备具有Android 4.4,则问题不会发生。运行较低级别的Android API设备时,可能会造成伤害。