激活无代码DEXT后获取OSSystemExtensionErrorCodeSignatureInvalid



我构建了一个无代码的DEXT来取代一个正在工作的无代码KEXT-将一个无编码的KEXT迁移到一个无码的DEXT。我引用了一些网站和GitHub存储库来将其整合在一起,并得到了其他SO用户的帮助。

我在关闭SIP的情况下运行,开发者模式打开(系统扩展sctl开发者打开(。我遵循这里概述的建议https://github.com/knightsc/USBApp/issues/1用于对应用程序和dext进行签名。

当我运行嵌入其中的应用程序并请求激活扩展时,函数似乎成功了。然而,我接到一个电话-

request:didFailWithError:

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

通过搜索和苹果的来源,我了解到OSSystemExtensionErrorCodeSignatureInvalid与授权和签名有关。当我运行systemextensionsctl列表时,我得到-

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]

当我运行代码签名-d-vvv-权利:-时,我得到-

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>

因此,扩展似乎处于活动状态并已启用,但在验证过程中出现了故障。

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

更新:

只是笑笑,我运行了我的生产应用程序,但它没有安装系统扩展,看看它是否会导致我的硬件匹配。由于安装了驱动程序,它确实安装了。然而,当我试图访问该设备时,我崩溃了。这似乎仍然是一个进步。

经过一周的假期,我完全没有考虑工作,我解决了这个问题!我重读了如何设置"com.apple.developer.deriverkit.transport.usb'权限?"中的信息?并意识到我的权益文件格式不正确。

这是我的旧文件,在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编辑器正常工作,或者只是我没有正确使用它,有什么想法吗?

最新更新