Pull to refresh

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

Reading time3 min
Views5.3K
Здравствуйте!

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

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

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



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



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



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



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



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

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

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



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



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



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

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

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



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



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



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



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



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

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

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


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

Articles