激活 Codeless DEXT 后获取 OSSystemExtensionErrorCodeSignatureInvalid
Getting OSSystemExtensionErrorCodeSignatureInvalid After Codeless DEXT is Activated
我构建了一个无代码 DEXT 来替换一个可用的无代码 KEXT - 。我参考了一些网站和 GitHub 存储库将其放在一起并得到了其他 SO 用户的帮助。
我运行 SIP 关闭,开发者模式打开(systemextensionsctl developer on)。我遵循此处列出的建议 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>
所以看起来扩展是活动的并且启用了,但是在验证过程中出现了一些错误。
任何有关此问题的帮助或意见将不胜感激。
更新:
只是为了笑,我 运行 我的生产应用程序没有安装系统扩展,看看它是否会导致我的硬件匹配。由于安装了驱动程序,它做到了。但是,当我尝试访问该设备时,我遇到了崩溃。这似乎仍然是进步。
休假一个星期完全不考虑工作,我想通了这个问题!我 re-read 中的信息并意识到我的权利文件格式不正确。
这是我在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>
出于某种原因,数组元素坚持采用 key/value 格式。查看来自 post 的示例以及有关 plist 文件的其他信息,我 hand-edited 对此:
<?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 编辑器正常运行的任何想法,或者只是我没有正确使用它?
我构建了一个无代码 DEXT 来替换一个可用的无代码 KEXT -
我运行 SIP 关闭,开发者模式打开(systemextensionsctl developer on)。我遵循此处列出的建议 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>
所以看起来扩展是活动的并且启用了,但是在验证过程中出现了一些错误。
任何有关此问题的帮助或意见将不胜感激。
更新:
只是为了笑,我 运行 我的生产应用程序没有安装系统扩展,看看它是否会导致我的硬件匹配。由于安装了驱动程序,它做到了。但是,当我尝试访问该设备时,我遇到了崩溃。这似乎仍然是进步。
休假一个星期完全不考虑工作,我想通了这个问题!我 re-read
这是我在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>
出于某种原因,数组元素坚持采用 key/value 格式。查看来自 post 的示例以及有关 plist 文件的其他信息,我 hand-edited 对此:
<?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 编辑器正常运行的任何想法,或者只是我没有正确使用它?