Статьи

Пиратство на Windows Phone 7 — повод для беспокойства

Я уже некоторое время играю с Windows Phone 7 SDK, однако мне повезло, что у меня все еще есть ежедневная работа, и я не получаю основной доход от продаж на рынке WP7. Есть другие, которые не имеют такой же роскоши, как я, и на сегодняшний день поставили значительное количество своего времени на платформу. Независимо от того, знают ли эти разработчики об этом или нет, они ведут молчаливую битву, которую я хочу донести до сознания — проблема, с которой сталкивалась каждая экосистема смартфонов на сегодняшний день: пиратство.

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

ПРИМЕЧАНИЕ:
я должен быть очень ясным, прежде чем начать. Этот пост не пропагандирует пиратство на платформе Windows Phone 7. Я лично разрабатываю приложения для Windows Phone 7 и очень заинтересован в успехе платформы. Сокрытие общедоступных фактов не увеличивает это поведение, но оно определенно выводит его из тени на всеобщее обозрение (и вносит изменения).

Что я имею в попытке сделать это поднять тему, которая не является новой для Windows Phone , но , как представляется, были не уделяется корпорацией Майкрософт , так как 2010 . Эта проблема не может исчезнуть, пока в этой области не будут предприняты дополнительные усилия, или проблема только ухудшится с течением времени .

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

О чем пойдет этот пост:

  • Пиратство на Windows Phone 7: существует, и этому нужно уделять больше внимания.
  • Как пиратское приложение для Windows Phone 7.
  • Рассмотрим подробнее, как работает пиратское приложение, которое я использую.
  • Что вы, как разработчик, можете сделать с этой проблемой в своих приложениях.

Пиратство на Windows Phone 7

Все смартфоны «огороженные сады» имеют одну общую черту: пиратство. Apple является лидером в этой области с платформой iOS и знает это лучше, чем любой из нас; Люди годами занимались пиратством игр для iPhone, причем некоторые статистические данные показывают, что на каждое проданное приложение еще 10 пиратских на платформе IOS.

Windows Phone 7 не было другой, с WP Central отчетности , что пиратство было легко достижимо еще в 2010 году Там было много таких отчетов , так как тогда . По-прежнему мало или совсем нет блоков для чьей-либо возможности: сначала легко загружать приложения на устройства (будь то пиратские или нет), или, что еще более неприятно, просто перехватывать трафик Zune и затем загружать XAP напрямую из Microsoft. Прошло почти два года с тех пор, как эта новость впервые появилась, и, похоже, мало что изменилось; до сих пор существуют приложения, которые позволяют обычным непрофессионалам легко проводить такие же взломы.

Мое большое беспокойство по этому поводу вызывает двойная ошибка Piracy на WP7 — приложения для iOS встроены в цель-c, которая не делает приложения iOS невосприимчивыми к декомпиляции ; это делает процесс декомпиляции намного более сложным для любого пирата.

Приложения Windows Phone 7 не имеют такого уровня сложности, когда дело доходит до декомпиляции исходного кода и ресурсов, из которых сделана игра или приложение. Мы создаем наши приложения, используя .Net Framework на любом из поддерживаемых языков, который, в свою очередь, компилируется в промежуточный язык (MSIL), который по своей природе является мощным, поскольку он не является низким уровнем.

Я уверен , что вы все знаете, если вы получите основы сборки .NET (DLL) и запастись на из множества из декомпиляторов на открытой сети, вы очень скоро читаемую копию исходного кода в бинарной.

Если вы являетесь разработчиком Windows Phone 7, это немного расстраивает, если учесть, сколько времени и усилий вы вложили в свое приложение.

Присмотревшись к фактам:

  1. Владельцы устройств могут легко разблокировать свои телефоны, чтобы получить удовольствие от боковой загрузки как на законных основаниях, так и с помощью хаков (даже если на законных основаниях это сделано с помощью чего-то вроде ChevronWP7 ).
  2. Получение подлинной копии XAP-файла приложения или игры тривиально (подробнее об этом через секунду).
  3. Когда у каждого есть XAP для вашего приложения, он может легко получить ваш исходный код и ресурсы, что позволит им делать с ним все, что ему хочется. Загрузите его бесплатно или извлеките ресурсы вашего приложения для гнусных целей.

Моя обеспокоенность возрастает, когда я считаю, что в прошлом году были случаи, когда пираты загружали XAP приложения с рынка Windows Phone 7, создавали учетную запись разработчика и сами представляли то же приложение (с одобрением Microsoft). Также был случай, когда пираты загрузили приложение, скопировали его содержимое и создали конкурирующее приложение с оригинальными ресурсами разработчиков (в данном случае их видеоконтент с Yoga, созданный их женой…).

Мы мало что можем сделать с первым или третьим шагом, упомянутым выше, но я думаю, что Microsoft может сделать больше со вторым пунктом — простотой получения пакета приложений.

Это действительно проблема?

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

В одном комментарии от Джастина Ангела (главный инженер Nokia по WP7) говорится следующее:

образ

Хотя я должен извиниться перед тем, как продолжить в ответ на комментарий Джастина, поскольку я не бьюсь с ним лично, точка зрения, которую он упоминает о пиратстве как «Докажи, что это проблема» для относительно новой платформы, такой как Windows Phone, совершенно неверна.

Если как разработчики мы вкладываем часть своей жизни в создание приложений для платформы смартфонов, мы часто предпочитаем делать это вместо другой. Если есть ощущение, что создатели выбранной вами платформы мало заботятся о безопасности вашей интеллектуальной собственности, это довольно веская причина не беспокоиться об этом. Это особенно актуально для Windows Phone, где так легко перепроектировать приложение для получения IP-адреса приложения.

Позиция Джастина не делает ничего, чтобы поддержать выбор разработчиков для Windows Phone 7 или развеять любые опасения нынешних разработчиков на платформе.

Если я могу скачать XAP своего приложения и открыть его в виде zip-файла, это то, что я вижу:

образ

если я затем декомпилирую один из этих двоичных файлов, это то, что я вижу… реальный код (если вы не запутали код своего приложения):

namespace InTheKnow.PhoneApplication
{
  public class MainViewModel : INotifyPropertyChanged
  {
    private PropertyChangedEventHandler PropertyChanged;

    public ObservableCollection<GoogleAnalyticsAccount> Accounts { get; private set; }

    public bool IsDataLoaded { get; set; }

    public bool IsFirstTimeLoad { get; set; }
  }

Это означает, что любой, кто получает мое приложение, потенциально имеет мой IP — независимо от того, высока ли сегодня доля пиратства, это проблема.

Что плохие парни держат на низком уровне 

Если вы выполните поиск в Google в поисках пиратской версии Windows Phone 7, вы скоро столкнетесь с несколькими приложениями для рабочего стола Windows, которые делают этот процесс тривиальным. Я не буду называть их имена или ссылки на них, но я проведу вас через один из них, чтобы загрузить мое лично разработанное приложение Google Analytics InTheKnow .

Я скачал приложение, которое, как я обнаружил, называет себя универсальным магазином для Windows Phone 7. Он загружает, удаляет безопасность и боковые нагрузки все в одном.

Я заблокировал любой брендинг на скриншоте ниже, чтобы затруднить начинающим пиратам, читающим этот пост, найти его, но по его интерфейсу видно, что когда я ищу свое приложение, оно предлагает тот же опыт, что и на Zune Marketplace. клиент (я могу только предположить, что он использует те же конечные точки веб-службы).

образ

После того, как я ищу свое приложение и нашел нужную версию, для его загрузки достаточно простого двойного щелчка.

В этот момент я решил немного покопаться, чтобы посмотреть, что делают создатели этого приложения, и это было достаточно волшебно, чтобы обойти моё представление о безопасности, которую Microsoft поставила бы для рынка.

Взглянув на это путешествие пользователя с помощью Fiddler , я очень заинтересовался.

образ

Ни один из входящих или исходящих трафика не проходил через HTTPS, и ни один из них не состоял ни из чего, кроме простых ванильных вызовов Http GET.

Приложение запрашивает хранилище Zune с помощью поискового URL, который, в свою очередь, возвращает GUID вместе со всеми сведениями о хранилище для приложения.

образ

Затем он запрашивает другой URL-адрес, используя возвращенный GUID приложения, который возвращает XML, содержащий URL-адрес загрузки для пакета приложения.

образ

Если вы копируете и вставляете этот последний необработанный URL-адрес в только что запущенный веб-браузер (то есть без сеанса, без специальных заголовков), он загружается без колебаний . Это просто старый URL — вы можете отправить его по электронной почте или поделиться им тем же.

Загружаемый вами XAP имеет только одну защиту — файл XML, который содержит подпись подписи. То, что вы можете найти легкий способ обойти с помощью другого поиска Google — черт, инструмент пиратства рынка, который я использовал, чтобы написать этот пост, даже исправит это для вас после загрузки! Как удобно …! *сарказм*

Еще раз, чтобы повторить, все простые вещи, которые Microsoft могла бы сделать:

Аутентификация не происходит.

SSL не используется.

Никаких специальных заголовков или трюков HTTP не используется.

И это было это. Теперь у меня был файл XAP для моего приложения, без оплаты. И как только беглый поиск в Google скажет вам, XAP не сложно получить содержимое — это просто zip-файлы.

Но вы все равно должны положить его на свой телефон, верно?

На данный момент, несмотря на тот факт, что у меня теперь есть двоичные файлы и ресурсы для моего приложения (т.е. все, что есть в моем приложении), если бы мне пришлось загружать это приложение на свой телефон, мне все равно нужно было бы иметь зарегистрированный телефон разработчика Так что это препятствие, верно?

образ

Неправильно — приложение, которое я использовал, любезно поставлялось с загрузчиком XAP, который работает с разблокированными устройствами, не являющимися разработчиками. Еще два клика, и я сделал.

Это отстой! Что я делаю, чтобы защитить свои приложения

Таким образом , Microsoft может не иметь ответов на проблему пиратства, но есть вещи , которые вы можете сделать , чтобы попытаться минимизировать ущерб.

Запутать ваш код

Microsoft объединилась с PreEmptive Solutions для комплектации Community Edition своего инструмента обфускации кода « DotFuscator » с Visual Studio. Pref emptive также выпустила полную версию Windows Phone, которая также бесплатна и может быть загружена отсюда , включая поддержку обфускации Silverlight XAML.

Эти инструменты запутывают код в ваших двоичных файлах, так что, как только злоумышленники получат ваш XAP-файл, им будет сложнее понять любой код, который они декомпилируют — любые ресурсы, такие как видео или изображения, все равно останутся свободными для копирования или редактирования, хотя оставьте это в уме.

Стоит отметить, что некоторые инструменты запутывания часто могут замедлять работу вашего приложения.

Пример вашего кода до обфускации:

private void CalcPayroll(SpecialList employeeGroup) {
    while (employeeGroup.HasMore()) {
        var employee = employeeGroup.GetNext(true);
        employee.UpdateSalary();
        DistributeCheck(employee);
    }
}

Пример вашего кода после использования Dotfuscator :

private void a(a b)
{
    while (b.a())
    {
        a = b.a(true);
        a.a();
        a(a);
    }
}

Мой совет: запутывайте каждое приложение, которое вы отправляете на рынок.

образ

Проверка кода

Некоторые разработчики используют код, который ищет наличие файлов DRM в каталоге приложения и, в случае его отсутствия, запускает рынок для покупки.

public static bool IsHacked()
{
    try
    {
        #if DEBUG
                return false;
        #endif
 
        //scramble WMAppPRHeader.xml file name to make life a little harder in case of reverse engineering
        string fl = "xxxWxxxxMxxxxAxxxxpxxxpxxxPxRxxxxxHxxxxxxxexxxxxxaxxxxdxxxxxxxxerxxxxx";
        fl = fl.Replace("x", string.Empty) + ".xml";
        XDocument doc = XDocument.Load(fl); //is hacked, this file is missing or empty!!!
        return false;
    }
    catch (Exception)
    {
        MessageBox.Show("This app was pirated and is not safe to use, please download the original one from Marketplace.");
        var marketplaceDetailTask = new MarketplaceDetailTask
                                        {
                                            ContentIdentifier =
                                                PhoneHelper.GetAppAttribute("ProductID").Replace("{", string.Empty).
                                                Replace("}", string.Empty).Trim(),
                                            ContentType = MarketplaceContentType.Applications
                                        };
        //ProcutdID will be changed after AppHub certification, so has to be read from manifest!

        //download Coding4Fun toolkit for this helper
        marketplaceDetailTask.Show();
  
        return true;
     }
}

Вы можете подумать о реализации этих методов, но имейте в виду: это может быть просто, если вы рискуете сделать ваше приложение неработоспособным, если Microsoft изменит свои функции DRM, или что-то необычное произойдет при законном развертывании вашего приложения.

Резюме

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

Веб-сервис, похожий на предложенный здесь , был бы отличным методом активной валидации, который должен ограничивать количество усилий, прилагаемых командой WP7.

Если Microsoft хочет, чтобы разработчики вкладывали время и деньги в создание приложений для своей платформы, у них должна быть хорошая история, когда речь идет о пиратстве — в настоящее время это не так.