Поиск на сайте: Расширенный поиск


Новые программы oszone.net Читать ленту новостей RSS
CheckBootSpeed - это диагностический пакет на основе скриптов PowerShell, создающий отчет о скорости загрузки Windows 7 ...
Вы когда-нибудь хотели создать установочный диск Windows, который бы автоматически установил систему, не задавая вопросо...
Если после установки Windows XP у вас перестала загружаться Windows Vista или Windows 7, вам необходимо восстановить заг...
Программа подготовки документов и ведения учетных и отчетных данных по командировкам. Используются формы, утвержденные п...
Red Button – это мощная утилита для оптимизации и очистки всех актуальных клиентских версий операционной системы Windows...
OSzone.net Microsoft Разработка приложений Windows (до Windows 10) Законный backdoor в распространении корпоративных приложений для Windows Store RSS

Законный backdoor в распространении корпоративных приложений для Windows Store

Текущий рейтинг: 4 (проголосовало 1)
 Посетителей: 727 | Просмотров: 808 (сегодня 0)  Шрифт: - +

В этой статье мы делимся опытом по распространению корпоративного приложения для Windows Storе. 

Есть у нас клиент. Отличный клиент, для которого мы создали, внедрили и продолжаем развивать большое портальное решение по дистанционному обслуживанию агентов. Примерно год назад было принято решение о создании мобильного рабочего места сотрудника на базе планшетов Windows 8.

Но создать приложение — это лишь одна задача. Необходимо было продумать следующий шаг: оно должно быть установлено на планшеты компании-заказчика и разойтись по России, потому что конечные пользователи — это представители компании в различных регионах. При этом должен присутствовать механизм обновления приложений, так как без него, сами понимаете, никуда.

На этапе тестирования можно пользоваться приложением в течение одного месяца, установив лицензию разработчика, что мы и делали ( ссылка). Но когда-то приходит время запускать приложение в жизнь. Мы рассмотрели различные варианты:

  1. Распространение через магазин приложений.
    Способ кажется заманчивым: выпускаем приложение, в котором функционал «для своих» защищён паролем, и использовать приложение по назначению смогут только сотрудники. Но такое распространение нарушает правила публикации в магазине приложений. Есть большая вероятность получить в ответ следующий отзыв (как это уже бывало с iOS приложениями):
    2.12 We found that your app is intended for a very limited, or niche, set of users — your company.
  2. Использование программ управления компьютерами организации, такими как Windows Intune ( ссылка), Air-Watch ( ссылка).
    Это серьёзные решения, требующие дополнительных затрат на приобретение и настройку; кроме того, их должны взять в эксплуатацию IT-службы компании. Использование этих систем, бесспорно, решает практически все проблемы по удалённому управлению и мониторингу устройств, но на текущий момент заказчик не был готов настраивать и использовать эти системы.
  3. Как во многих случаях есть свой путь, только надо немного поискать

Установщик обновлений

Мы решили попробовать справиться с задачей самостоятельно и изобрести велосипед создать программу, которая помогает настраивать OC перед установкой приложения, непосредственно устанавливать и обновлять наше приложение c интерфейсом Modern UI.

Дело в том, что корпоративные планшеты, которые используют в компании, были x86 с установленной Windows 8 Professional. Такая архитектура позволяет запускать не только приложения из магазина, но и «старые добрые» программы.

Итак, алгоритм, казалось бы, стандартен:

  1. Пользователь получает инсталлятор и устанавливает классическую программу-«обновлялку».
  2. Программа проверяет доступность новой версии приложения, и если таковая имеется – скачивает готовый пакет.
  3. Программа разворачивает пакет и запускает установочный скрипт.
  4. И вот приложение установлено/обновлено.

Sideloading

Но, как водится, не всё так гладко – есть нюансы. Есть еще одна трудность, которую нам создал Microsoft и которую надо было обходить, - на некоторых конфигурациях системы установка приложений вообще заблокирована. Приложения нельзя установить, если в настройках групповой политики не установлено значение «Allow trusted apps to install». При этом сама настройка недоступна для некоторых платформ. Детали механизма sideloading здесь.

Установка приложений доступна, если:

для операционной системы Windows 8 Enterprise, Windows 8 Professional:

  • компьютер находится в домене,
  • в настройках групповой политики установлено значение «Allow trusted apps to install».

для операционных систем Windows 8 Enterprise, Windows 8 Professional, Windows RT:

  • на компьютере должен быть активирован специальный ключ (sideloading key). Sideloading key — это 25-значный ключ (похож на ключ активации для Windows),
  • в настройках групповой политики установлено значение «Allow trusted apps to install».

В варианте с добавлением компьютеров в домен нам было отказано, но ключ для активации sideloading предоставили.

Как же выглядит установка ключа и настройка политики для пользователя? Может быть, присланная инструкция по установке вместе с ключом решает проблему?

  1. Для начала установите sideloading key. Откройте командную строку от имени администратора и введите команды:
    slmgr /ipk <sideloding key is here...>
    slmgr /ato ec67814b-30e6-4a50-bf7b-d55daf729d1e
  2. Откройте редактор локальной групповой политики (Пуск -> gpedit.msc). Найдите папку N и поменяйте значение Х.

В общем, процесс для неискушенного пользователя выглядит нетривиально, с этим надо что-то делать. Поэтому попробуем использовать наш установщик и автоматизировать процесс.

Собираем всё вместе

Итак, предложенное решение — программа-установщик — работает следующим образом: распространяется в виде файла .msi (почтовой рассылкой среди сотрудников), устанавливается в систему и работает по следующему алгоритму:

*

После установки программа сворачивается в трэй и сразу же запускает автоматическую проверку обновлений. Если приложение не установлено, в трее появляется вот такое сообщение:

*

Нажимаем на него, появляется сама форма, на которой есть краткое описание приложения, информационное окно, прогресс-бар и кнопки. В информационном окне могут быть надписи типа: «Доступно обновление…», «Установка приложения…» и т.п.

*
*
*

После установки приложение находится в трее и периодически (несколько раз в сутки) запрашивает сервер на предмет обновлений. Если обновления имеются, приложение оповещает об этом пользователя.

Есть смысл немного заострить внимание на технической реализации некоторых частей программы.

Примеры кода

Настройка групповой политики

public static void SetGroupPolicy()
{
    var key = Registry.LocalMachine.CreateSubKey(@"Software\Policies\Microsoft\Windows\Appx");
    //…проверки…
    key.SetValue("AllowAllTrustedApps", 1, Microsoft.Win32.RegistryValueKind.DWord);
}

Установка Sideloading Key

public static void InstallSideloadingKey()
{
    // Проверить, установлен или нет sideloading key
    if (IsSideloadKeyInstalled())
        return;

    Process p = new Process() {
        StartInfo = new ProcessStartInfo() {
            FileName = @"C:\Windows\System32\slmgr.vbs",
        },
    };

    // Установить ключ
    p.StartInfo.Arguments = "/ipk " + _sideloadingKey;
    p.Start();
    p.SuppressPopups();
    p.Close();

    // Активировать ключ
    p.StartInfo.Arguments = "/ato ec67814b-30e6-4a50-bf7b-d55daf729d1e";
    p.Start();
    p.SuppressPopups();
    p.Close();
}

Проверка, что ключ установлен

private static bool IsSideloadKeyInstalled()
{
    // Проверяем, какие ключи установлены в системе и есть ли среди них
    // наш sideloading key.
    bool result = false;

    Process p = new Process() {
        StartInfo = new ProcessStartInfo() {
                    FileName = @"C:\Windows\System32\slmgr.vbs",
        },
    };

p.StartInfo.Arguments = "/dlv";

// Команда выводит список всех ключей в системе в отдельном окне.
p.Start();

for (int i = 0; (i < 10) && (!p.HasExited); i++)
{
    p.Refresh();

    if (p.MainWindowHandle.ToInt32() != 0)
    {
        var list = WindowsHelper.GetChildWindows(p.MainWindowHandle);
        foreach(var ptr in list)
        {
            string windowText = WindowsHelper.GetText(ptr);
            if(windowText.Contains("APPXLOB") && windowText.Contains(_sideloadingKeyPart))
            {
                result = true;
            }
        }

     // Закрываем окно с информацией о ключах
        WindowsHelper.CloseWindow(p.MainWindowHandle);

        Thread.Sleep(1000);
    }

    p.Close();

    return result;
}

Установка пакета приложения

public static void UpdateApp(string appxPath)
{
    if (String.IsNullOrEmpty(appxPath))
    {
        // Не найден файл .appxbundle"
        return;
    }

    //
    // Сформировать команду
    string command = @"/C powershell Add-AppxPackage ";
    command += appxPath;

    // Обновить приложение или установить с нуля?
    var package = PackageHelper.GetPackage();
    if (package != null) {
        // Приложение уже установлено - надо обновлять
        command += " -Update";
    }

    Process p = new Process() {
        StartInfo = new ProcessStartInfo() {
            WorkingDirectory = @"C:\",
            FileName = "cmd.exe",
            Arguments = command,
            RedirectStandardOutput = true,
            UseShellExecute = false,
        },
        EnableRaisingEvents = true,
    };

    p.Exited += (s, e) =>
    {
         // Проверить результат процесса установки
        var pr = s as Process;
        string text = pr.StandardOutput.ReadToEnd();
        if (String.IsNullOrEmpty(text)) {
            // Приложение установлено успешно. Уведомить об этом пользователя.

        else
            // В процессе установки произошла ошибка.
    };


    p.Start(); // Start process
    p.WaitForExit();
}

Заключение

Описанный способ распространения, конечно, весьма запутанный. Есть методы для распространения приложений Windows 8 гораздо более правильные и удобные. Но условия, в которые мы были поставлены, заставили нас решить задачу именно таким образом. При таком решении вам и заказчику не придется покупать и настраивать какие-либо сторонние системы; вы не будете грузить пользователя сложными алгоритмами установки приложения; у вас не будет поводов опасаться, что приложение не пройдет сертификацию.

Иcточник: msdn.microsoft.com  •  Опубликована: 09.12.2014
Нашли ошибку в тексте? Сообщите о ней автору: выделите мышкой и нажмите CTRL + ENTER
Теги:   backdoor.


Оценить статью:
Вверх
Комментарии посетителей
Комментарии отключены. С вопросами по статьям обращайтесь в форум.