. _ . _ -|-------------------------/-//--|- // / _______________ | __ _____ | \_ _/_ \_____·/ \/ \ | / / / /_ / _ / t e a m | -/-----/\________/ \__\___/--/- 5 3 | /____/\____\ --- | . | wPx _ | _ | \ \\ -|--\\-\-------------------------|- Tutorials . Pack . Number . #13 Исследование защиты xgrCrackme1 for PalmOS - Лирика. Итак, по просьбе трудящихся накатал небольшой тутор. На что-то серьезное он вряд ли тянет, но подтолкнуть к изучению защиты прог под ПалмОс, надеюсь, сможет. Сей крякми очень простой, специально для NB. - Теория. Что над понадобится? Как ни банален ответ, но нам потребуются тулзы =) А именно: " Эмулятор (POSE) " Дизассемблер (PilDis) " Дебаггер (Debuffer) " Prc2bin (чтоб разбить прогу на бинарники) " Хекс-редактор (Hiew или любой на выбор) " Либо сочетание этих инструментов в одном флаконе (PRCedit, palmdeMON) Но это, так сказать, общие утилиты. Для данного примера нам не понадобится ничего кроме PRCedit. (ну и эмуль есессно) Если кому не понятно - общий смысл ломки прог: грузим ее в эмуль, смотрим на нее, а дальше по обстоятельствам =)))) Я на полном серьезе, т.к. вариантов сделать прогу рабочей - дофига и больше. Кстати мой любимый способ - это просто убрать ограничения. Т.е. она остается незареганной, но ничем не отличается от "Registered". Разве что номер просит в форме регистрации ;-) но это никому не мешает. Вобщем хватит демагогии, айда к практике. - Практика Вы установили эмуль, скачали PRCedit и ждете дальнейших указаний? Их есть у меня. Запускайте эмулятор. Drag'n'drop'айте туда xgrCrackme1.prc и пытаемся зарегистрироваться. В ответ на это прога начинает обзываться: "You, son of a bitch, Buy my program!" Ну что ж, будем обучать ее хорошим манерам. Запускайте PRCedit, Open file - xgrCrackme1.prc, как бы вам это не казалось странным =) //Окошечко, которое нас обозвало матерным словом - это Alert. Как MessageBox в виндах. Обычно ограничениями служат именно алерты или формы (Forms). Отличить их очень легко: алерт представляет собой просто окно с сообщением и кнопкой(амии), в то время как форма чаще всего содержит в себе поля для ввода каких-либо данных. Раз это алерт, значит логичнее всего его искать в подкатегории Alerts. Там и находим, ресурс №1001. Жмем на крестик, слева от надписи - References и видим чёрт знает что: "0000043a" На самом деле это ни что иное, как ссылка на то место, где идет вызов функции неверном номере, (почему-то принято называть это окошко Bad_guy, не буду нарушать традиции =) Даблклик по ссылке и мы переходим в нужный нам кусок кода 00000436 b644 CMP.W D4,D3 00000438 66000010 BNE L26 0000043C 3f3c03ea MOVE.W #1002!$3ea,-(A7) 00000430 4e4f TRAP #15 00000432 a192 DC.W sysTrapFrmAlert 00000434 548f ADDQ.L #2,A7 00000436 6000000c BRA L27 0000043a 3f3c03e9 L26 MOVE.W #1001!$3e9,-(A7) 0000043e 4e4f TRAP #15 //Итак - самая важная часть моего повествования. Как расшифровать всю эту абру-кадабру. Первое что вы должны знать: переход на вызов той или иной функции в палмах осуществляется опкодом BEQ, BEN, BNE и тд. Существуют условные и безусловные переходы (условные переходы осуществляются при выполнении какого-либо условия (или не выполнения), а безусловные, соответственно безо всяких там условий.) Все они имеют одинаковую форму: 66000010 67000002 6517 6028 Исходя из этого, смотрим ещё раз на код. Зеленым выделена та, строка на которой идет вызов Bad guy (помните вы даблкликали по ссылке?) Видите L26? Это есть ни что иное как МЕТКА. (location) Существует именно для того, чтоб по легче было ссылаться. Раз по ней надо ссылаться, значит надо это место найти. Выделяем L26, правой кнопкой - Search up for L26. Опа, нас перенесли на другую строку. Если вы внимательны, то заметите переход, о котором я говорил раньше. В данном случае это "66000010 BNE L26". Вот теперь давайте немного подумаем…. Раз это переход на плохое окошко, которое нам не надо, значит нам и сам переход не нужен. Значит надо его убрать… Как? Делается это командой NOP. Опкод для этой команды - 4e71. Что мы делаем? Выделяем 66000010, правой кнопкой - Jump to a address 66000010 и переходим в Хекс-редактор на то самое место, где идет вызов плохого окошка. Вот теперь смело пишем 4e71. Save. Грузим в эмуль, пытаемся зарегить….. хм… облом - недопустимый опкод…. Ну да, правильно. Ведь мы убрали только часть перехода, а 0010 осталось. И поскольку это вообще ничего не значит - вот эмуль и ругается…. Исправляем ошибку (заменяем остаток вызова ещё раз 4e71). Сейв, грузим, регимся, нам говорят спасибо. Кул. Вот, собсно и все =) Но если вы были внимательны, то в окошке, где нас благодарят, автор пишет - теперь вы знаете дату моего рождения…. Но мы ж ее не знаем…. Отсюда Может напросится вопрос "КАК ТАК???" Просто. Я ведь говорил, что существует много способов сделать прогу рабочей - вот вам пример. Автор думал что мы будем искать серийник, а мы и без этого добра обошлись. 1 прога, 2 способа (скажу по секрету - там минимум ещё 1 есть ;-) Звиняйте за АшЫПки - писалось ночью….. Хех. V0land // TSRh