Внутренняя ошибка 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!
Надеюсь, эти ответы хорошо помогут другим людям.