错误?在codesign中 - 删除签名功能

时间:2011-09-21 13:15:15

标签: macos digital-signature

我想从已使用codesign签名的Mac应用中删除数字签名。有一个未记录的选项来编码, - 删除签名,它的名字似乎就是我所需要的。但是,我无法让它发挥作用。我意识到它没有记录,但我真的可以使用这个功能。也许我做错了什么?

 codesign -s MyIdentity foo.app

正常工作,签署应用

 codesign --remove-signature foo.app

执行磁盘活动几秒钟,然后说

 foo.app: invalid format for signature

和foo.app已经增长到1.9 GB! (具体来说,它是foo.app/Contents/Resources/MacOS中的可执行文件,从1.1 MB增加到1.9 GB。)

当我尝试签名/取消签名二进制支持工具而不是.app。

时,会发生同样的事情

有什么想法吗?


背景:这是我自己的应用;我不是要试图打败版权保护或类似的东西。

我想分发已签名的应用,以便每次更新应用都不需要用户批准来读取/写入应用在钥匙串中的条目。但是,有些人需要通过将自己的文件夹添加到/ Resources来修改应用程序。如果他们这样做,签名就会失效,并且应用程序无法使用自己的Keychain条目。

该应用程序可以轻松检测是否发生了这种情况。如果应用程序可以删除它的签名,一切都会好的。那些进行此修改的人需要使用已修改的,现在未签名的应用程序来使用Keychain,但这对我来说没问题。

6 个答案:

答案 0 :(得分:8)

有点晚了,但我更新了一个名为unsign的公共域工具,它修改了可执行文件以清除签名。

https://github.com/steakknife/unsign

答案 1 :(得分:2)

codesign的{​​{3}}列出了所有选项,包括命令行-h和手册页未涵盖的选项。

此外,Here's the source

答案 2 :(得分:0)

我同意你做--remove-signature时会发生一些奇怪的事情。

但是,您应该更改用户在Resources中添加额外文件的方式,而不是尝试取消代码签名。相反,指定一个特定的路径,通常是

~/Library/Application Support/Name_Of_Your_App/

或者

~/Library/Application Support/Name_Of_Your_App/Resources/

并要求用户在那里放置额外的文件。然后,在您的代码中,除了需要读取文件的Resources中的文件外,还要检查目录。

答案 3 :(得分:0)

我今天遇到了这个问题。我可以确认,苹果公司--remove-signature的{​​{1}}选项是(并在OP提出此问题六年后仍然存在)严重错误。

从某种程度上讲,Xcode(和Apple的命令行开发人员工具)包括codesign实用程序,但没有包括用于删除签名的工具。但是,由于在某些情况下需要经常执行此操作,因此包含一个完全未记录的选项:

codesign(假设没有文档的话)应该很不言自明,但不幸的是,它很少能够按预期工作,而无需付出任何努力。因此,我最终编写了一个脚本,该脚本应解决OP的问题,我的问题以及类似问题。如果有足够的人在这里找到它并觉得有用,请告诉我,并将其放在GitHub上。


codesign --remove-signature

答案 4 :(得分:0)

在对该问题进行二读时,又有另一种想法:也许实现该问题最终目标的更好方法不是删除签名,而是让用户(通过脚本/透明)重新-修改后使用临时签名对应用进行签名。我相信codesign -fs - [app]。参见https://apple.stackexchange.com/questions/105588/anyone-with-experience-in-hacking-the-codesigning-on-os-x

答案 5 :(得分:-2)

我相信您只需删除App包中的_CodeSignature文件夹即可删除签名。