我正在寻找一种对共享库进行数字签名的方法,以便可以验证所述库的真实性。我提出的解决方案是对库进行哈希处理,并将其存储在加载并调用该库的Java文件中,但问题是,如果将来对库进行更新,则此操作将失败(除非所有使用该库的应用程序也都进行了更新)。
我在想,可能有可能将已经用私钥签名的库的哈希插入例如.so文件的末尾,以便可以信任此签名的哈希,而不必将其存储在主叫应用程序中进行验证。Android API是否对此提供任何支持,并且将以这种方式将数据插入到库中可能会导致库加载器出现问题吗?
如果您的库未安装在中/system/lib
,则通常由一个应用程序使用-将库打包到其APK中的一个应用程序,并且典型的更新过程将涉及C ++库和Java应用程序。因此,您的验证不需要保留更新。
另一方面,标准身份验证技术也适用于库签名。例如,添加一个新的API“ GetVersion(int salt)”,该API将返回共享的秘密(可能是同一文件的哈希),并使用随机输入对其“加盐”。现在,您将使签名的逆向工程变得更加困难,因为没有中间人分析无法提供线索。
这可能比在库文件的固定偏移量处寻找签名更容易实现,并且更难解决。
无论如何,在共享对象的末尾附加任意blob不会导致加载程序出现问题。您可以在Android.mk文件中添加修改.so文件的自定义步骤。您必须在步骤中或步骤之后执行此步骤,该步骤将从库中剥离调试信息。install
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句