执行已签名代码的动态验证。
验证静态代码对象。
此函数获取并验证指定代码上的签名 由代码对象。它检查所有密封组件的有效性, 包括资源(如果有的话)。它根据代码验证代码 如果指定了一个要求。如果所有这些,呼叫成功 条件令人满意。只有代码,此调用才是安全的 不受同时修改,结果只有效 只要代码保持不变。如果是底层文件系统 具有动态特性,例如网络文件系统,联合 mount或FUSE,您必须考虑代码的安全性 验证后修改。
因此,鉴于此对Apple的文档进行协调处理的描述,目前尚不清楚它们是什么意思"动态特征"这里。
答案 0 :(得分:0)
SecStaticCodeCheckValidity
验证应用是否为磁盘。相比之下,SecCodeCheckValidity
会在运行时针对相同的要求验证应用程序内存中。
尝试通过检查是否仍使用有效签名进行代码签名来阻止通过劫持,注入或其他传统方法来修改内存中代码进行修改。
我记得在WWDC '09期间听到过这种区别,如果我错了,请纠正我。
如果要检查某些运行代码是否由Apple签名而不是程序员指定的某些指定要求,您需要:
SecRequirementCreateWithString(CFSTR("anchor apple"), ...)
然后将结果从SecRequirementRef
传递给SecCodeCheckValidity
。在这种情况下,没有必要与指定的要求进行交互,因为您已经确定了您可以接受的代码,这是Apple签署的任何代码。
在生产代码中,您可以使用csreq(1)
编译“锚苹果”的二进制版本,并使用SecRequirementCreateWithData
代替SecRequirementCreateWithString
,这样会更快。