Внутренняя ошибка SignTool при попытке переупаковки пакета APPX?

Я анализирую существующие приложения Windows Store и изменяю их, чтобы убедиться, что с ним работает obfuscator.

Я столкнулся с проблемой, хотя это все-таки проблема. Я могу достаточно быстро собрать пакет APPX из магазина (требуется, чтобы Fiddler получил URL-адрес). Затем я могу использовать любую программу распаковки для извлечения appx в папку. Затем я могу собрать сборки в APPX и немного модифицировать IL. Затем я переделаю и подпишу пакет:

makeappx pack /d "mypackage" /p "mypackage.appx"
signtool sign /fd sha256 /f temporarykey.pfx mypackage.appx

Затем я получаю сообщение об ошибке с помощью signtool:

SignTool Error: An unexpected internal error has occured
Error information: "Error: SignerSign() failed." (-2147024885/0x800700b)

И затем, конечно, получите сообщение об ошибке при попытке установить его со стандартным файлом powerscript, созданным Visual Studio для установки/удаления загружаемого пакета APPX.

Found package: C:\....mypackage.appx 
Error: The package is not digitally signed or its signature is corrupted

Я использовал этот точный процесс для пакетов, созданных в Visual Studio. Временные ключи привязаны к определенному пакету или что-то еще? Что мне не хватает? Это ошибка в signtool?

Ответ 1

По-видимому, вы не можете просто взять временный ключ и подписать APPX вместе с ним. В частности, строки темы сертификата должны совпадать ( "имя издателя" ). Я не знаю, как лучше определить, что тема темы на самом деле так голая со мной. Сначала попробуйте использовать signtool и подпишите APPX файл с любым временным ключом. Теперь перейдите в Event Viewer. Затем к приложениям и службам, а затем к Microsoft, а затем к Windows, а затем к AppxPackaging и, наконец, к Microsoft-Windows-AppxPackages/Operational. Должно быть событие ошибки, которое только что произошло из этой сборки. Проверь это. Он должен сказать что-то вроде

Error 0x800700B: The app manifest publisher name (CN=random-hex-number) must match the subject name of the signing certificate (CN=MyWrongName)

Итак, теперь обязательно держитесь за этот случайный шестнадцатеричный номер. Это должна быть строка темы сертификата и является причиной ошибки. Чтобы создать рабочий сертификат:

makecert.exe mycert.cer -r -n "CN=random-hex-number" -$ individual  -sv private.pkv -pe -cy end
pvk2pfx -pvk private.pkv -spc mycert.cer -pfx mytemporarykey.pfx

Теперь, наконец, у вас должен быть временный ключ, который будет работать с signtool!

Надеюсь, эти ответы хорошо помогут другим людям.