Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #96, ДЕКАБРЬ 2006 г.

Карманное рукоприкладство

goabruce & porosenok

Хакер, номер #096, стр. 096-076-2


2. Тебе обязательно надо знать описание команд условных и безусловных переходов: B (0xEAxxxxxx) - Безусловный переход; BL (0xEBxxxxxx) - Вызов функции; BNE (0x1Axxxxxx) - Переход, если в результате сравнения получили неравенство; BEQ (0x0Axxxxxx) - Переход, если в результате сравнения получили равенство.

3. При вызове функции адрес возврата записывается не в стек, а в регистр LR.

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

Теперь поговорим непосредственно про программы. В настоящее время для мобильных окон есть 2 типа приложений: приложение формата Portable executable и тот же PE для .net Framework. Оба типа представляют из себя exe-файлы - тот же заголовок, те же секции и таблицы импорта. Обычный юзер никогда не заметит между ними разницы, но разница есть. Первый тип будет запускаться только на КПК, второй может так же успешно работать и на PC. Это связано со следующим. В программах первого типа в секции кода находятся непосредственно команды процессора. В большинстве случаев это описанные выше ARM-инструкции, но не всегда, так как не все мобильные устройства работают на ARM-процессорах, есть и другие платформы. А вот в программах для .net секция кода представляет собой некоторый объектный код, который называется MSIL. При запуске они, якобы, компилируются в привычный для процессора код и выполняются уже на конкретной платформе. В связи с тем, что одна и та же программа будет работать как на КПК, так и на PC, такая технология дает большие возможности для разработчиков. Но также она дает их для крякеров, так как позволяет полностью восстановить исходный код программы!!! Кажется невероятным? Но это так! Не буду томить и сразу перейду к паре примеров для .net Framework. А потом рассмотрим обычные portable executable.

Подопытный № 1 (patch)

Программы под .net Framework включают в себя метаданные. В них содержится вся информация о классах, свойствах и методах, а также поля, имеющие оригинальное название. Именно поэтому .net-программы хорошо поддаются декомпиляции. Давай рассмотрим пару прог: одну я пропатчу, а для второй напишу кейген. Названия программ не привожу для того, чтобы бросать тень на авторов и не подставляться самому, но я думаю, ты их узнаешь. Итак, поехали. Ты, наверное, уже догадываешься, что это приложение написано под .net. Поэтому мне будет нужен дизассемблер. Я буду использовать ildasm, ilasm и Reflector. С помощью первых двух можно дизассемблировать исходную программу в il-инструкции, поправить ее и затем заново откомпилировать. Мне они понадобятся для определения местоположения интересующих меня команд, просмотра их опкодов и шестнадцатеричных значений. Также я буду использовать Reflector, он способен восстановить исходный код приложения на любом из языков, позволяющих писать под .net, а именно VC++,C#,Visual Basic,Delphi и IL. Возможно, кто-то скажет, что это лишняя работа и можно обойтись одним рефлектором. Пусть этот кто-то идет лесом - это обучалка, а не мастер-класс. Чтобы не путаться в куче проводов, все свои опыты я буду проводить на эмуляторе PocketPC. Когда будешь химичить сам, помимо эмулятора, не забудь установить Microsoft ActiveSync. Для того чтобы связать эти две программы вместе, необходимо выполнить следующие действия:

Назад на стр. 096-076-1  Содержание  Вперед на стр. 096-076-3