Получение OSSystemExtensionErrorCodeSignatureInvalid после активации бескодового DEXT - PullRequest
0 голосов
/ 06 августа 2020

Я создал DEXT без кода для замены работающего KEXT без кода - Миграция KEXT без кода на DEXT без кода . Я сослался на несколько сайтов и репозиториев GitHub, чтобы собрать его вместе, и получил помощь от других пользователей SO.

Я работаю с отключенным SIP, включен режим разработчика (разработчик systemextensionsctl включен). Я следую приведенному здесь совету https://github.com/knightsc/USBApp/issues/1 для подписи приложения и декста.

Когда я запускаю приложение, в которое оно встроено, и запрашиваю активацию расширения, эта функция кажется успешным. Однако затем я получаю вызов -

request:didFailWithError:

в моем объекте запроса, производном от OSSystemExtensionRequestDelegate, когда запускается поток рабочей очереди. Ошибка - OSSystemExtensionErrorCodeSignatureInvalid. Я предполагаю, что этот поток связан с dispatch_queue_t, который я использовал для создания OSSystemExtensionRequest.

Из поиска по источникам Apple я понимаю, что 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]

Когда я запускаю codeign -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, установленным для устаревшего устройства (то же устройство, которое указано в разделе IOKitPersonalities моего DEXT info.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>5843</integer>
            <key>idProduct</key>
            <integer>33</integer>
        </dict>
    </array>
    <key>com.apple.security.app-sandbox</key>
    <true/>
</dict>
</plist>

Итак, это Кажется, что расширение активно и включено, но что-то не получается во время проверки.

Любая помощь или информация по этой проблеме приветствуются.

Обновление:

Просто для улыбки, Я запустил свое производственное приложение, которое не устанавливает расширение системы, чтобы проверить, приведет ли оно к совпадению моего оборудования. Поскольку драйвер был установлен, так и было. Однако при попытке доступа к устройству я получил ошибку sh. Это все еще кажется прогрессом.

1 Ответ

0 голосов
/ 18 августа 2020

После недели отпуска, совсем не думая о работе, я решил эту проблему! Я перечитал информацию в Как установить полномочия `com.apple.developer.driverkit.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 работать, или это просто я не использую его правильно?

...