Клонируем UWP-приложения – проще чем кажется

от автора

Предисловие

Ни для кого не секрет, что на смартфонах под управлением операционной системы Android можно клонировать приложения. Иногда этот функционал даже встроен в систему. Один из примеров тому – (не) всеми любимая MIUI, которая, начиная с двенадцатой версии, уже умела создавать дубликаты приложений.

Однако если речь идёт о Windows 10/11, то я не встречал решений для клонирования UWP-приложений. Давайте попробуем это исправить!

Подготовка

Итак, что же нам понадобится:

  • Прямые руки, немного терпения

  • Устройство под управлением Windows 10/11

  • Пакет SDK для Windows (доступен для загрузки здесь)

Если вы уверены, что всё, перечисленное выше, у вас имеется – можно двигаться дальше.

Приступим к действиям

Первым делом нам необходимо выбрать приложение, которые мы будем клонировать. В качестве подопытного я выбрал Unigram – клиент для мессенджера Telegram. Дальнейшие действия буду показывать на этом примере.

Открываем PowerShell от имени администратора. Вводим следующую команду:

Get-AppxPackage

Эта команда покажет нам список всех установленных приложений. Среди всего списка находим то, которое мы собираемся клонировать. Выглядит это примерно следующим образом:

Name              : 38833FF26BA1D.UnigramPreview Publisher         : CN=D89C87B4-2758-402A-8F40-3571D00882AB Architecture      : X64 ResourceId        : Version           : 11.3.3.0 PackageFullName   : 38833FF26BA1D.UnigramPreview_11.3.3.0_x64__g9c9v27vpyspw InstallLocation   : C:\Program Files\WindowsApps\38833FF26BA1D.UnigramPreview_11.3.3.0_x64__g9c9v27vpyspw IsFramework       : False PackageFamilyName : 38833FF26BA1D.UnigramPreview_g9c9v27vpyspw PublisherId       : g9c9v27vpyspw IsResourcePackage : False IsBundle          : False IsDevelopmentMode : False NonRemovable      : False Dependencies      : {Microsoft.UI.Xaml.2.8_8.2310.30001.0_x64__8wekyb3d8bbwe, Microsoft.NET.Native.Framework.2.2_2.2.29                     512.0_x64__8wekyb3d8bbwe, Microsoft.NET.Native.Runtime.2.2_2.2.28604.0_x64__8wekyb3d8bbwe, Microsof                     t.VCLibs.140.00_14.0.33519.0_x64__8wekyb3d8bbwe...} IsPartiallyStaged : False SignatureKind     : Store Status            : Ok

Из всей этой кучи нам пригодится параметр Name. Запоминаем его.

Теперь экспортируем его куда-нибудь:

Get-AppxPackage -Name "ИМЯ_ПРИЛОЖЕНИЯ" | ForEach-Object {  Copy-Item -Path $_.InstallLocation -Recurse -Destination "ПУТЬ\$($_.Name)" }

Имя приложения – это то самый параметр Name. Также необходимо указать путь, куда именно будет происходить экспорт.

В итоге у нас должно получиться что-то подобное:

Куча файлов, о назначении которых нам знать не обязательно

Куча файлов, о назначении которых нам знать не обязательно

Среди этой кучи файлов должен быть AppxManifest.xml. Нам необходимо немного его отредактировать. Открываем его и находим строчку Identity. Меняем значение Name и Publisher на свои. Вот как это получилось у меня:

<Identity Name="CLONE_Unigram" Publisher="CN=WHO_AM_I" Version="11.3.3.0" ProcessorArchitecture="x64" />

Теперь приступим к сборке appx-пакета. Открываем Developer Command Prompt for Visual Studio. Вводим следующее:

MakeAppx pack /d "ПУТЬ_ДО_ФАЙЛОВ_ЭКСПОРТА" /p "ПУТЬ_ГДЕ_БУДЕТ_ЛЕЖАТЬ_ПАКЕТ\Clone.appx"

Убеждаемся, что пакет успешно собрался:

И что, это всё? О нет, если вы попробуете установить его – вы столкнётесь с проблемой. Для UWP приложения по-хорошему нужен сертификат. Ну ладно — слепим его сами! В консоли PowerShell вводим следующее:

New-SelfSignedCertificate -Type Custom -Subject "CN=WHO_AM_I" -KeyUsage DigitalSignature -FriendlyName "MyAppCertificate" -CertStoreLocation "Cert:\CurrentUser\My" -KeyLength 2048

Теперь необходимо экспортировать полученный сертификат в формате .pfx. Для этого открываем certmgr.msc. Идём в Личное > Сертификаты и находим наш сертификат. Нажимаем на него правой кнопкой мыши, затем Все задачи > Экспорт.

Выбираем «Экспортировать закрытый ключ«. В процессе нужно будет ввести пароль. Вводим его и запоминаем. Далее по подсказкам. Сохраняем сертификат туда, где он не потеряется.

Сертификат на месте? Отлично! Подпишем пакет нашим сертификатом в консоли Developer Command Prompt for Visual Studio:

SignTool sign /fd SHA256 /a /f "ПУТЬ_К_СЕРТИФИКАТУ.pfx" /p "ПАРОЛЬ_СЕРТИФИКАТА" "ПУТЬ_ДО_APPX"

Далее – немного хитрости. ПКМ по нашему файлу appx > Цифровые подписи > В списке подписей выбираем нашу подпись > Сведения > Просмотр сертификата > Установить сертификат > Локальный компьютер > Поместить в следующее хранилище > Обзор > Устанавливаем его в Доверенные лица.

Открываем APPX. Нажимаем установить…

Ошибка об отсутствии сертификата ушла и приложение успешно установилось. Мы счастливы. Открываем меню Пуск и в списке приложений нас встречают два приложения:

И да, наш клон успешно открывается и функционирует:

Что ещё?

Об этом я забыл упомянуть. Наверное по хорошему в манифесте можно поменять его имя. И вообще в ресурсах поменять иконку чтобы различать оригинал и копию. Я надеюсь, это не будет проблемой для вас.


ссылка на оригинал статьи https://habr.com/ru/articles/859762/