xcode - Mac OS X 代码签名和可执行文件验证

标签 xcode macos code-signing pki

我在一个垂直市场的 Mac 应用程序上工作,该应用程序使用 USB 加密狗来确保用户付费。它的成本足够高,而且需求也足够大,以至于“黑帽”试图破解加密狗方案,因此应用程序在运行时检查可执行文件和关键资源文件,如果有东西被篡改,程序将无法运行。

随着基于 PKI(公钥基础设施)的代码签名在 Mac 世界中变得越来越普遍,我正在考虑改用它来进行运行时验证,这将产生让 Gatekeeper 满意的良好副作用。

但是,Apple 的兴趣与我的兴趣大不相同。他们的重点是让用户满意,所以如果一个应用程序的签名不正确,Mac OS X 会简单地询问用户是否要运行它。我的重点是阻止破解者,所以如果我的应用程序的签名不正确,我根本不希望它做任何对最终用户有用的事情。

所以我希望我的应用程序能够在运行时使用 Apple 的签名验证它自己的可执行文件和资源。

此外,根据我对提供 Mac OS X 进行验证的库的阅读,它们只是对验证可执行文件的请求给出"is"或“否”的答案。令我震惊的是,这很容易以多种方式受到“黑帽”攻击 - 例如,可以简单地用总是说“是的,这是有效的”的工具替换 Apple 的工具,无论是在系统目录中还是通过更改这些工具的搜索路径。所以我认为将完整的签名验证代码集构建到我的应用程序中可能是一个好主意。

所以我有几个问题:

  • 哪些 PKI 库/API 可用于让应用验证其自己的可执行文件和已使用 Apple 的协同设计系统签名的资源?
  • 这些库有可用的源代码吗?
  • 我对使用 Apple 随 Mac OS X 提供的 PKI 库的安全问题是否有效,或者它们是否比我想象的更安全?
  • 有没有人愿意分享这种事情的经验?还有其他陷阱或提示吗?

  • 提前感谢您对此的任何帮助。

    最佳答案

    为了回答上面的 #1 和 #2,Apple 已将其用于创建和验证数字签名的代码开源为 libsecurity_codesigning。因此,开发人员可以将其构建到他们的应用程序中,让它验证自己的签名。

    或者,这个库的 MacOS 版本可以由应用程序使用 - 但 API 是私有(private)的,所以这是一个陷阱。有一个brief discussion at this link .

    关于xcode - Mac OS X 代码签名和可执行文件验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13695466/

    相关文章:

    macos - osx 提示应用程序来自身份不明的开发人员,尽管它通过了所有验证

    iphone - 从命令行确定代码签名身份?

    ios - Xcode DEBUG 模式 - 什么时候开/关?

    objective-c - videoMinFrameDuration 已弃用

    iphone - 项目中的 Xcode 项目

    macos - 执行选择器 : afterDelay: not being called until mouse up

    c++ - 全局 namespace 中没有名为 'isinf'的成员

    python - 错误 : Could not find a version that satisfies the requirement webdriver (from versions: )

    objective-c - 如何使用代码读取协同设计信息

    ios - 如何在 SpriteKit 中制作响应式 Controller ?