文章目录

  • 一、前言
  • 二、问题分析
  • 三、问题解决
  • 四、延伸阅读
  • 五、拓展阅读


一、前言

在应用RN改造好系统功能进行功能验证阶段,发现使用梆梆加固对APP进行加固、签名后点击APP图标无法打开应用,且移动设备处于卡死状态。

应用未进行加固签名的APP,应用可正常打开,且功能正常。故问题出在加固或签名环节。

且通过 keytool -v -list -keystore android.keystore 查看签名命令可知签名证书在有效期内。

加固阶段,更换不同加固策略,发现应用策略A加固、签名后的应用图标无法正常打开,应用策略B加固、签名后的应用功能正常,故可将问题定位在加固环节中的加固策略A,签名环节应该无问题。

通过对比加固策略A、B,发现主要在【so文件加密】部分加密的so文件存在差异,策略A加密的so文件列表如下:

lib/*/libSecCryptor.so
lib/*/libSipCryptor.so
lib/*/libmencrypt.so
lib/*/libp2pencry.so

策略B加密的so文件列表如下:

lib/*/libSipCryptor.so
lib/*/libSecCryptor.so

继续深究下2个加固策略之间的差异性。

二、问题分析

首先,尝试通过查看应用日志查看错误原因。

apksigner签名

apksigner sign --ks android.jks --ks-key-alias android --out signed.apk unsigned.apk

查看签名文件

keytool -v -list -keystore xxx.jks

查看apk 签名

keytool -printcert -jarfile ./weixin806android1900_arm64.apk

签名策略校验

apksigner verify --verbose signed.apk

查看apk的基本配置信息(packageName、versionCode等info)

aapt dump badging test.apk

三、问题解决

四、延伸阅读

在Android开发中,每个应用程序都需要进行签名才能在设备上安装和运行,以确保它是由可信的开发者创建的,并且没有被篡改或被恶意软件替代。签名是一种安全机制,用于验证应用程序的来源和完整性。

在安卓系统中,签名是使用公钥/私钥加密技术来完成的。开发者首先生成一对密钥,其中包含一个私钥和一个公钥。私钥用于对应用进行签名,而公钥嵌入在应用中。当用户安装应用时,系统会验证应用的签名,并使用公钥来解密签名以验证应用的完整性。

安卓应用签名的过程如下:

  1. 首先,开发者使用一个称为"keytool"的工具生成一个密钥库文件(.keystore)。该文件包含私钥和与之关联的证书信息。
  2. 接下来,开发者使用另一个工具称为"jarsigner"来使用私钥对应用进行签名。签名的结果将会与应用的内容一起创建一个新的APK文件。
  3. 最后,开发者可以使用"zipalign"工具对APK文件进行优化,以提高应用的性能。

当用户下载并安装应用时,安卓系统将会在安装过程中验证应用的签名,以确保应用的来源和完整性。如果签名验证失败,系统会发出一个警告并阻止安装应用。

如果在签名后,安装的应用程序打不开,可能有以下几个原因:

  1. 错误的签名配置:在Android开发中,应用程序的签名配置是通过在项目的build.gradle文件中指定的。安卓系统首先会验证应用的签名,并根据签名的结果来决定是否允许应用的安装。如果签名的配置不正确,会导致签名过程出错,从而无法正常打开应用程序。当遇到此问题时,应检查签名配置的准确性,并确保正确地使用签名文件和密码。
  2. 签名文件损坏:签名文件通常是以.keystore.jks为扩展名的文件,用于存储签名密钥。如果签名文件损坏或丢失,就无法验证应用程序的完整性,从而导致无法打开应用程序。解决方法是重新生成签名文件,并确保备份签名文件以防止损坏或丢失。
  3. 签名过期或无效:签名证书有一个有效期限,通常为1到2年。如果签名证书过期或被撤销,可能会导致应用无法打开。此外,如果签名证书被篡改或无效,系统也会拒绝应用的打开。
  4. 受信任证书列表:安卓系统会维护一个受信任的证书列表,用于验证应用的签名。如果开发者使用了一个不在列表中的证书签名应用,系统可能会警告用户并拒绝打开应用。
  5. 第三方应用限制:某些安卓设备或ROM可能设置了限制,只允许安装和打开特定来源或经过验证的应用。如果您尝试打开未经验证或不受支持的应用,可能会遇到问题。
  6. 签名密钥不匹配:在签名应用程序时,使用的签名密钥必须与之前用于签署应用程序的密钥匹配。如果使用了不匹配的签名密钥,安装的应用程序将无法验证其正确性。解决方法是确保使用正确的签名密钥进行签名。
  7. 卸载后未清除缓存:有时,即使卸载了应用程序,其缓存仍然存在,可能导致重复安装的应用程序无法打开。解决方法是在卸载应用程序后,手动清除其缓存,并重新安装应用程序。

要解决签名无法打开的问题,可以尝试以下几个步骤:

  1. 检查签名证书是否有效:开发者应该确保使用的签名证书是有效的,并且在有效期内。如果证书已过期或被撤销,需要重新生成并使用新的签名证书。
  2. 检查系统信任证书列表:开发者应该确保使用的证书在安卓系统的信任列表中。如果证书不被信任,系统可能会拒绝打开应用。可以尝试更新系统的证书列表或与设备制造商联系以获得支持。
  3. 检查设备限制设置:如果您无法打开来自非官方来源的应用,可能是因为设备设置了限制。您可以尝试打开设备设置,检查是否存在安全设置或应用安装设置中的限制。
  4. 重新安装应用:如果应用的签名被篡改或失效,可能需要重新下载并安装应用。确保从可信的来源下载应用,并确保安装前进行签名验证。

总结起来,签名是安卓应用程序的重要标识和保护机制,通过确保应用的完整性和来源可信性,帮助用户减少受到恶意软件攻击的风险。解决Android应用程序签名后无法打开的问题,需要检查签名配置签名证书有效性签名文件的完整性签名密钥的匹配性,并确保应用程序的缓存被清除及设备设置没有限制应用安装来源。在遇到问题时,可以通过检查错误日志和重新签名等方法来定位和解决问题。