如何验证代码中的二进制签名证书?

时间:2013-01-03 17:25:39

标签: objective-c ios security

我正在尝试找到一种方法来验证代码中二进制文件的签名证书。例如,如果您运行命令:“codesign -vvvvd / YourApp / Executable”,您可能会收到输出:“Authority:Apple Root CA”等。我正在寻找在代码中执行此操作的方法。任何正确方向的推动或推动都会很突出。

谢谢!

2 个答案:

答案 0 :(得分:5)

在Mac上,SecStaticCodeSecCode提供代码签名和验证功能。具体来说,SecCodeCopySelf()SecCodeCheckValidityWithErrors()将用于检查当前应用程序的代码签名。

请注意,已经修改并重新签名(具有相同证书或任何其他证书)的应用程序实际上无法检测到,因为任何能够修改应用程序并使其退出的应用程序都可能存根或以其他方式破坏您的验证代码。上面提到的功能充其量只是一种保持诚实的人诚实的解决方案。

在iOS上,Apple的官方立场是你不应该尝试越狱检测或类似,并且应该相信操作系统能够做到正确。由于您无法运行动态加载的代码或读取其他应用程序的二进制数据,因此能够验证该平台上的代码签名并不是非常有用。 (Apple的官方立场是否对您有用是另一个完全的讨论。)

答案 1 :(得分:1)

使用Code Signing ServicesOle Begemann's code的OS X应用程序可以实现这一点,但iOS似乎无法实现。