Мини reverse engineering и модификация Windows Phone приложений

в 7:58, , рубрики: reflector, windows phone, windows phone 7, WP7, разработка под windows phone, метки: , ,

Здравствуйте!

Несколько дней назад мне попалась на глаза забавная игра, в которой необходимо на мотоцикле объезжать препятствия и за это получать очки, и мы с друзьями начали меряться количеством набранных очков немного увлеклись. Немного подумав, я решил покопаться в коде игры и добавить небольшой хак для очков. Итак, о том, как разобрать Windows Phone приложение, изменить в нем что-то и собрать это все обратно:

Для начала определимся со всем необходимым:

  • Разлоченое Windows Phone устройство (эмулятор тоже подойдет, но нет удовольствия от игры).
  • Установленный WP7.1 SDK или любая альтернатива для установки .xap на устройство.
  • .NET Reflector для декомпиляции/компиляции сборок.
  • Reflexil для сохранения сборок
  • HxD для редактирования HEX значений
  • Phone7Market для выкачивания .xap из маркета

Моих познаний быдлохакера в рефлекторе/hex-редакторе хватает как раз на замену простых значений.
Для начала выкачиваем приложение из маркета с помощью Phone7Market. Находим игру поиском, нажимаем правой кнопкой и сохраняем в необходимую директорию на диске.

Мини reverse engineering и модификация Windows Phone приложений

Теперь копируем наш .xap файл и переименовываем копию в .zip и распаковываем в папку. Например, у меня после операций папка выглядит примерно так:

Мини reverse engineering и модификация Windows Phone приложений

Теперь приступим к самому интересному. Распаковываем reflexil и копируем путь к нему. Теперь запускаем ReShrper и заходим в Tools -> Add-Ins… нажимаем Add и вставляем путь к Reflexil.Reflector.dll в папке с reflexil. Эта штуковина нужна в рефлекторе для того, чтобы редактировать и пересобрать сборки.
Открываем в рефлекторе наш ранее распакованный архив. Быстро пробежавшись по списку библиотек, открываем ту, у которой, название похоже на приложение. Скорее всего, это и есть основной проект.

Мини reverse engineering и модификация Windows Phone приложений

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

Мини reverse engineering и модификация Windows Phone приложений

Открываем HxD и выбираем нашу библиотеку ThreeDMoto.dll.

Мини reverse engineering и модификация Windows Phone приложений

Немного пугает, но просто все понять. Находим строчку, которую будем изменять.

public static readonly float[] TIMESPAN_OF_SHIFT = new float[] { 0.5f, 1f, 3f, 5f };

Итак, у нас есть значения 0.5, 1, 3, 5. Возвращаемся в HxD и жмем поиск. Искать будем по числу 3.

Мини reverse engineering и модификация Windows Phone приложений

нашлось несколько значений. Теперь ищем 5. Их всего 2. Теперь необходимо найти то место где 3 и 5 стоят рядом:

Мини reverse engineering и модификация Windows Phone приложений

Отлично. Убеждаемся что там именно те числа и заменяем все 4 на 0,1

Мини reverse engineering и модификация Windows Phone приложений

Жмем сохранить и переключаемся в рефлектор. Чтобы убедиться что мы сделали все правильно. Удаляем из рефлектора библиотеку и подключаем ее снова. Заходим в конфиг и находим нужную строку:

 public static readonly float[] TIMESPAN_OF_SHIFT = new float[] { 0.1f, 0.1f, 0.1f, 0.1f };

Итак, сборка изменилась. Теперь в проводнике перетягиваем dll на zip и подтверждаем замену. Переименовываем .zip в .xap и выгружаем приложение на устройство.

Мини reverse engineering и модификация Windows Phone приложений

И получаем первую ошибку. Эта ошибка возникает из-за того, что в .xap пакете находится файл с контрольной суммой приложения WMAppPRHeader.xml. Удаляем файл из архива и пробуем снова:

Мини reverse engineering и модификация Windows Phone приложений

Телефон выдает странную штуку. Если подумать, то это может возникнуть только из-за редактирования библиотеки без перекомпиляции. Итак, снова открываем рефлектор с библиотекой и сохраняем нашу библиотеку.

Мини reverse engineering и модификация Windows Phone приложений

Снова выполняем действие с переименованием и перетягиваем и выгружаем проект на устройство. Заработало. Теперь разгон происходит за четверть секунды, и очки умножаются в 4 раза почти мгновенно. Теперь отредактируем количество очков за объезд препятствия и вероятность появления препятствий на дороге.

Мини reverse engineering и модификация Windows Phone приложений

Заменяем все на:

Мини reverse engineering и модификация Windows Phone приложений

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

Оригинал приложения.
Редактированное приложение.

Итак, подведем итог

При разработке игр и приложений на Windows Phone разработчикам не следует забывать о том, что их код можно будет просмотреть и после компиляции. Чтобы усложнить жизнь тем, кто будет его смотреть или редактировать – можно воспользоваться удобными и простыми средствами для обфускации кода и подписи сборок. Это создаст несколько проблем. Из-за подписи сборку будет сложнее отредактировать, а из-за обфускации будет совершенно не ясно, что редактировать. Ведь описанным способом можно не только редактировать безобидные значения, а и снимать триалы с приложений и даже дописывать собственные методы и классы и переписывать существующие.

Автор: polhovskiy

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js