目标:加载已经过验证签名(或根据任意算法进行验证)的.so / .bundle。
我希望能够使用OSX的内置二进制签名工具或一些自定义算法验证.so / .bundle,然后使用dlopen加载.so / .bundle ...
这里的扳手是,似乎没有编程方式来检查然后加载。可以手动检查文件,然后加载它。但是有一个机会窗口,有人可以将该文件替换为另一个文件。
由于文件系统锁在OSX中是建议性的,因此它们对于此目的并不那么有用。
答案 0 :(得分:1)
您可以在签名中存储* .so或* .dylib文件的sha256sum。验证证书后,可以将* .so或* .dylib复制到随机临时位置,然后验证复制的* .so或* .dylib是否具有给定的校验和。如果是,则可以动态加载副本。可能仍有一小段机会覆盖随机临时文件,但我想它会非常小。我想你可以在调用dlopen之后但在调用dlsym之前重新验证校验和。如果校验和不匹配,则可以调用dlcose卸载库,而不执行其中的任何函数。