【问题标题】:OpenSSL fingerprint embedding on Mac OS XMac OS X 上的 OpenSSL 指纹嵌入
【发布时间】:2013-06-07 16:22:27
【问题描述】:

我在 Mac OS X 上构建了一个动态库,一个 .dylib 文件,编译得很好。 为了使用 .dylib 运行应用程序,fips_premain.c 文件中的一些函数在“main”之前运行,以检查指纹是否正确嵌入到 .dylib 中。在静态库的情况下,只需在静态库上运行名为 incore_macho 的可执行文件,指纹就会被检出。在动态库的情况下,当我让 xcode 在 dylib 上运行 incore_macho 时出现故障,输出如下:

/User/.../Debug/libcompute-osx.dylib is not a mach-o executable file (filetype 6 should be 2)

有什么想法吗?

【问题讨论】:

    标签: xcode macos openssl dynamic-library


    【解决方案1】:

    在静态库的情况下,只需在静态库上运行名为 incore_macho 的可执行文件,指纹就会检出。

    这并不完全正确。您不能将 FIPS 指纹嵌入到静态库中,因为代码和数据将在最终链接到可执行文件期间重新定位。您可以在可执行程序或共享对象中嵌入指纹,因为它们已经执行了最终链接。


    在动态库的情况下,当我让 xcode 在 dylib 上运行 incore_macho 时失败,输出如下

    OpenSSL 基金会对此进行了修复。这是允许对 dylib 进行 incore 处理所需的更改。修改incore_macho.c如下:

    530 行附近:

    else if( !(header->filetype == MH_EXECUTE || header->filetype == MH_DYLIB) )
    {
        fprintf(stderr, "%s is not a mach-o executable file "
            "(filetype %d, should be MH_EXECUTE or MH_DYLIB)\n",
            inFile->filename, header->filetype);
        return -1;
    }
    

    第 690 行附近:

    else if( !(header->filetype == MH_EXECUTE || header->filetype == MH_DYLIB) )
    {
        fprintf(stderr, "%s is not a mach-o executable file "
            "(filetype %d should be MH_EXECUTE or MH_DYLIB)\n",
            inFile->filename, header->filetype );
    }
    

    就是这样...任何你找到MH_EXECUTE 测试的地方,也允许MH_DYLIB

    或者,从Github 下载更新的incore_macho.c。他们更新了 incore_macho.c 还包括对 ARMv7s 的支持。

    【讨论】:

      【解决方案2】:

      incore-macho 只能在类型 2 文件上运行(即 MH_EXECUTE from ,换句话说,可执行文件)。类型 6 是 MH_DYLIB(您正在检查的动态库)。这就是错误消息所说的。据它说,它只是不适合 dylibs。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-11-23
        • 2016-04-09
        • 2016-05-22
        • 1970-01-01
        • 2015-04-23
        • 2015-08-11
        相关资源
        最近更新 更多