Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 通过代码验证应用程序的签名_Objective C_C_Macos_Cocoa_Digital Signature - Fatal编程技术网

Objective c 通过代码验证应用程序的签名

Objective c 通过代码验证应用程序的签名,objective-c,c,macos,cocoa,digital-signature,Objective C,C,Macos,Cocoa,Digital Signature,我已经签署了应用程序。我创建了一个身份,并使用codesign按照苹果的标准为我的应用程序签名 现在,我如何从我的应用程序中检查签名 我需要在Cocoa apps Objective-C和用C编写的应用程序上验证这一点。在iOS上实现签名验证的方式是,当启动应用程序时,启动守护程序使用该设备的特定私钥解密二进制文件。这就是为什么你不能只反编译应用程序或将它们从一个设备复制粘贴到另一个设备,如果解密失败,应用程序将无法启动 由于iOS沙盒,执行此操作的本机工具在应用程序中不可用 如果您只是试图跟踪

我已经签署了应用程序。我创建了一个身份,并使用codesign按照苹果的标准为我的应用程序签名

现在,我如何从我的应用程序中检查签名


我需要在Cocoa apps Objective-C和用C编写的应用程序上验证这一点。

在iOS上实现签名验证的方式是,当启动应用程序时,启动守护程序使用该设备的特定私钥解密二进制文件。这就是为什么你不能只反编译应用程序或将它们从一个设备复制粘贴到另一个设备,如果解密失败,应用程序将无法启动

由于iOS沙盒,执行此操作的本机工具在应用程序中不可用

如果您只是试图跟踪是否有人修改了您的二进制文件,您可以对其执行MD5或SHA1哈希,将其存储在NSUserDefaults中,并在每个应用程序启动时进行比较。如果哈希值在执行之间发生变化,则您知道它可能已被合法的应用程序更新或恶意修改

下面介绍如何获取NSData的哈希

您正在查找的二进制文件是:AppName.app/AppName

您可以使用NSTask并运行codesign-验证并检查退出状态。当然,如果程序被修改了,它可以被修改以删除支票,所以我不确定这会给你带来什么

如果您不担心定向篡改,比如可能会删除签名检查的那种,您可以使用codesign kill选项,如果只是执行,则表示签名至少对迄今为止已执行的所有页面有效……但如果尚未驻留的页面被篡改,则无论如何读入该页面时,您都将被杀死

如果您能解释一下为什么要验证签名,可能会得到更好的答案。

注意:目前MacOS X在执行之前不验证签名代码。这可能与沙盒代码不同,而且似乎很明智,否则任何人都可以编辑授权

要从应用程序本身中检查应用程序签名,请使用。特别是看seccodecheckvality。执行检查的代码并不长,但有很多地方需要理解,因此我不会给出代码示例-您需要阅读和理解文档


通过检查签名,您的应用程序可以检测其代码和资源的更改,并报告它可能已损坏,但并非所有更改都是恶意的并拒绝运行。添加这样的代码当然不能保证您的代码不会被损坏,但它确实提高了防止故意损坏的门槛,如果MacOS X开始自己进行检查,那将是一个巨大的胜利。

我不想阻止任何事情,我只想在应用程序中验证我的中奖签名。我不确定我是否理解你的问题。我只需要检查应用程序中的签名。我不在乎那张支票会发生什么,我只需要核实一下。如果您知道如何做,我将非常感谢您的帮助。@sosborn,因为这是我正在编写的代码的要求。很多人问了很多问题,但没有给出任何解决方案,这只会增加问题的噪音,所以我尽量避免回答那些无关的问题。我问的问题很直接,很容易理解。我可以在这里发布我正在编写的代码的要求,但这不会给你我已经说过的更多信息。那么一直问为什么的意义是什么呢。thanks@MrAleph,我知道当人们问为什么时听起来有点屈尊俯就,但我们看到很多问题,如果在原始问题中正确地回答了为什么,那么答案将采取不同的方法,实际上解决了海报的问题。Ben S只是想给你省点麻烦。在你的情况下,这是一个要求,所以没有其他需要说的,因为你没有太多的选择。这是一个Mac OS X应用程序,而不是iOS。谢谢你的帮助。我需要验证应用程序上的签名,不仅仅是CRC,这也适用于iOS。.app格式在两者之间共享。如果您希望严格验证与codesign工具一起创建和使用的签名,这是不可能的。但是,在Mac上,二进制文件实际上是AppName.app/Contents/MacOS/AppName。这是否适用于启用了位代码的应用程序?谢谢,但我宁愿运行代码而不是运行外部应用程序。非常感谢。我一直在尝试使用SecStaticCodeCheckValidity,但是您提到的函数更有意义。我的问题是理解我是否需要在我的应用程序中保留一份证书副本来验证它。一段代码会有所帮助