2011-09-21 58 views
5

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

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。)

当我尝试签署/取消签名二进制支持工具而不是。应用程序。

任何想法?


背景:这是我自己的应用程序;我并没有试图打败复制保护或类似的东西。

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

该应用程序可以很容易地检测到这种情况是否发生。如果应用程序可以删除它的签名,一切都会好起来的。那些进行这种修改的人需要给已修改的,现在未签名的应用程序权限来使用钥匙串,但这对我来说很好。

回答

0

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

但是,您应该改变用户在Resources中放置额外文件的方式,而不是尝试解除代码签名。相反,指定某个路径,通常

~/Library/Application Support/Name_Of_Your_App/ 

也许

~/Library/Application Support/Name_Of_Your_App/Resources/ 

,并要求用户把多余的文件存在。然后,在您的代码中,当您需要读取文件时,除了Resources中的文件外,还要检查目录。

+0

的用户可能具有不同的额外文件的应用程序的多个副本,并且可以四处移动应用程序。如果他们的额外文件在应用程序中,则一切正常。否则,我必须以某种方式跟踪基于应用程序位置的不同文件,然后如果应用程序移动它停止工作。一塌糊涂。 – user532477

-2

我相信你可以通过简单地删除应用程序包中的_CodeSignature文件夹来删除签名。

+0

不仅仅是,二进制文件也被签名 – dreamlab

8

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

https://github.com/steakknife/unsign

+1

只要你清楚地详细说明OP如何使用它来完成他们正在尝试做的事情,那么你创作的代码(甚至是部分代码)是很好的。否则,它被认为是垃圾邮件。 – Louis