【问题标题】:Getting OSSystemExtensionErrorCodeSignatureInvalid After Codeless DEXT is Activated激活无代码 DEXT 后获取 OSSystemExtensionErrorCodeSignatureInvalid
【发布时间】:2020-11-27 00:51:58
【问题描述】:

我构建了一个无代码 DEXT 来替换一个有效的无代码 KEXT - Migrating a codeless KEXT to a codeless DEXT。我参考了一些网站和 GitHub 存储库将其组合在一起,并得到了其他 SO 用户的帮助。

我在 SIP 关闭的情况下运行,开发人员模式已打开(systemextensionsctl 开发人员打开)。我正在遵循https://github.com/knightsc/USBApp/issues/1 此处概述的建议来签署应用程序和 dext。

当我运行它嵌入的应用程序并请求激活扩展时,该功能似乎成功了。但是,然后我接到了一个电话 -

request:didFailWithError:

当工作队列线程启动时,在我的 OSSystemExtensionRequestDelegate 派生请求对象上。错误是 OSSystemExtensionErrorCodeSignatureInvalid。我假设该线程与我用来构造 OSSystemExtensionRequest 的 dispatch_queue_t 相关。

通过搜索和 Apple 来源,我了解到 OSSystemExtensionErrorCodeSignatureInvalid 与权利和签名有关。当我运行 systemextensionsctl list 我得到 -

1 extension(s)
--- com.apple.system_extension.driver_extension
enabled active  teamID  bundleID (version)  name    [state]
*   *   <REDACTED>  Home.MyUsbDrver (1.0/1) Home.MyUsbDrver [activated enabled]

当我运行 codesign -d -vvv --entitlements :- 时,我得到 -

Executable=/Users/.../TestDequeueApp.app/Contents/MacOS/TestDequeueApp
Identifier=Home.TestDequeueApp
Format=app bundle with Mach-O thin (x86_64)
CodeDirectory v=20500 size=1055 flags=0x10000(runtime) hashes=24+5 location=embedded
Hash type=sha256 size=32
CandidateCDHash sha256=HASH
CandidateCDHashFull sha256=LONG HASH
Hash choices=sha256
CMSDigest=DIGEST
CMSDigestType=2
CDHash=HASH
Signature size=4745
Authority=Apple Development: MY Apple ID STUFF
Authority=Apple Worldwide Developer Relations Certification Authority
Authority=Apple Root CA
Signed Time=Aug 6, 2020 at 10:51:41 AM
Info.plist entries=23
TeamIdentifier=TEAM ID
Runtime Version=10.15.6
Sealed Resources version=2 rules=13 files=7
Internal requirements count=1 size=188
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>com.apple.security.app-sandbox</key>
    <true/>
    <key>com.apple.security.files.user-selected.read-only</key>
    <true/>
    <key>com.apple.developer.system-extension.install</key>
    <true/>
    <key>com.apple.developer.system-extension.uninstall</key>
    <true/>
</dict>
</plist>

不确定我在那里看到任何错误,并且代码签名脚本似乎运行正确。这是我的 DEXT 授权文件,其中 com.apple.developer.driverkit.transport.usb 为旧设备设置(与我的 DEXT info.plist 的 IOKitPersonalities 部分中列出的相同设备)-

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>com.apple.developer.driverkit</key>
    <true/>
    <key>com.apple.developer.driverkit.transport.usb</key>
    <array>
        <dict>
            <key>idVendor</key>
            <integer>5843</integer>
            <key>idProduct</key>
            <integer>33</integer>
        </dict>
    </array>
    <key>com.apple.security.app-sandbox</key>
    <true/>
</dict>
</plist>

看来扩展程序已激活并已启用,但在验证过程中出现故障。

对于这个问题的任何帮助或意见将不胜感激。

更新:

只是为了笑,我运行了未安装系统扩展的生产应用程序,看看它是否会导致我的硬件匹配。自从安装了驱动程序,它就做到了。但是,当我尝试访问该设备时,我遇到了崩溃。这似乎仍然是一个进步。

【问题讨论】:

    标签: objective-c macos kernel-extension code-signing-entitlements driverkit


    【解决方案1】:

    一个星期的假期根本没有考虑工作,我发现了这个问题!我重新阅读了How to set `com.apple.developer.driverkit.transport.usb` entitlement? 中的信息,发现我的权利文件格式不正确。

    这是我在 Xcode 的编辑器中创建的旧文件:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
        <key>com.apple.developer.driverkit</key>
        <true/>
        <key>com.apple.developer.driverkit.transport.usb</key>
        <array>
            <dict>
                <key>idVendor</key>
                <integer>VID0</integer>
                <key>idProductArray</key>
                <array/>
                <key>item 0</key>
                <integer>PID0</integer>
                <key>item 1</key>
                <integer>PID1</integer>
                <key>item 2</key>
                <integer>PID2</integer>
                <key>item 3</key>
                <integer>PID3</integer>
                <key>item 4</key>
                <integer>PID4</integer>
            </dict>
        </array>
        <key>com.apple.security.app-sandbox</key>
        <true/>
    </dict>
    </plist>
    

    由于某种原因,数组元素坚持使用键/值格式。查看帖子中的示例以及有关 plist 文件的其他信息,我对此进行了手动编辑:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
        <key>com.apple.developer.driverkit</key>
        <true/>
        <key>com.apple.developer.driverkit.transport.usb</key>
        <array>
            <dict>
                <key>idVendor</key>
                <integer>VID0</integer>
                <key>idProductArray</key>
                <array>
                    <integer>PID0</integer>
                    <integer>PID1</integer>
                    <integer>PID2</integer>
                    <integer>PID3</integer>
                    <integer>PID4</integer>
                </array>
            </dict>
        </array>
        <key>com.apple.security.app-sandbox</key>
        <true/>
    </dict>
    </plist>
    

    现在数组元素看起来正确,驱动程序加载并运行,以便我可以从我的设备读取数据。

    关于如何使 Xcode 编辑器正常运行的任何想法,还是只是我没有正确使用它?

    【讨论】:

      猜你喜欢
      • 2020-11-22
      • 2020-08-21
      • 1970-01-01
      • 1970-01-01
      • 2014-12-12
      • 1970-01-01
      • 1970-01-01
      • 2019-06-15
      • 1970-01-01
      相关资源
      最近更新 更多