Алгоритм действий при взломе ShareWare программы, защищённой паролем

{codecitation class=»brush: pascal; gutter: false;» width=»600px»}

Автор: Bad_guy

WEB сайт: http://cracklab.narod.ru

1. Исследуем язык, на котором написана программа. Я обычно использую Restorator 2.50 [1024 Kb], либо Exescope’ом [409 Kb] можно посмотреть. Сразу же узнаём запакована программа или нет.

1.1 Тип языка я определяю по размеру файла и по ресурсам:

Assembler — размер файла меньше 40 Kb (если не использует картинок), присутствует раздел Dialog в ресурсах. На ассемблере обычно пишут перцы, так что шанс взломать резко снижается (скорее будет патч, нежели подбор номера).

Visual C — размер файла — разный, если меньше 40 Kb и файл импортирует функции из модуля MFC42.DLL или больше 40 присутствуют ресурсы Dialog, тогда это С , по моему опыту ломается лучше всего, так как структура программы более менее линейна (наглядна) запрашиваются WinAPI функции, на которые всегда можно поставить брейкпойнт.

Delphi — определется легче всего — в ресурсах присутствует раздел «RCDATA» или «DATA» — кто как показывает, в котором обязательно есть ресурс PACKAGEINFO почти всегда ресурс типа TFORM1 (или другой, но обязательно с буквы T). Ломаются такие программы не очень сложно, учитывая то, что множество программистов Delphi — любители (новички), однако сам код, откомпилированный в Дельфе очень не нагляден — бесконечные джампы и процедуры не используютcя «наши» API функции (но зато железно работает hmemcpy)

Visual Basic — что касается самого Бэсика, так я его не уважаю, потому что программы работают только при наличии VBRUNxxx.DLL или другой (в зависимости от версии) ботвы в системных папках (в PATH-папках) код не скомпилирован по человечески (до версии 5) и можно ломать только декомпилятором. Начиная с версии 5 стал создаваться некоторый скомпилированный код (вообщем SoftIce’ом можно поломать). Отличить VB программу от других легко — открываем в Exescope и видим, что импортируется библиотека вида VB######.dll или MSVBVM##.dll.

1.2 Запакована или нет?

Самый простой способ это проверить — открыть программу в Restorator’e и посмотреть все ресурсы, если вместо ресурсов высвечивается надпись «Ресурс повреждён» — значит файл пожат, а это в свою очередь означает, что путь патча нам уже закрыт.

Комментарий от 22 мая 2002 года: наконец-то до меня дошла (или я дошёл) версия компрессора UPX (1.20) [117 Kb], которая может разжимать сжатые любыми версиями UPX программы, теперь бы ещё распаковщик Aspack’а…

Комментарий от 17 августа 2002 года: Распаковшик AsPack тоже был найден, может быть скоро можно будет его здесь скачать (называется AspackDie у меня — v1.4).

Также нашёлся распаковщик PECompact (моего любимого) — называется UnPECompact 1.31 (написал тот же чувак, что и AspackDie).

2. Ищем в программе куда нужно вводить код (ну, я думаю сами найдёте).

3. Вводим код в соответствующее окно и, не нажимая Enter, вызываем SoftIce и ставим брейкпойнты bpx getdlgitemtexta, bpx windowtexta — для любой программы bpx hmemcpy — для Delphi- программы, затем нажимаем на «ОК»-кнопку и мы должны попасть в SofIce по одному из этих брейкпойнтов.

4. Что же далее: вот мы в SoftIce’е, я обычно первый раз гоню программу по F10, смотрю и запоминаю, пока не вылезет окно сообщения о неправильном рег. номере (назовём его окно «обломис»). Вы скажете, ну и что же ты запоминаешь: а вот что — я плевать хотел на всякие Call и прочие умные вещи, я запоминаю долго ли я гоню по F10, а также все условные переходы (jz, jnz, jne, je …). Когда вам вылезло окно «обломис», возвращаемся в SoftIce, смотрим вверх и ищем то место, где есть условный переход, который так или иначе может увести нас от вызова «обломиса», а теперь ищем процедуру, которая может изменить флаг, на который реагирует этот переход (для jz, jnz, jne, je — это флаг Z). Могу с уверенностью сказать, что если вы уже на этом месте и всё вышесказанное получается, то большая половина дела уже сделана (похоже программисты забыли поставить шлагбаум, хотя такой как я программист мог бы приколоться — поставить пустышку).

5. Теперь надо начать ковырять процедуру, да не очень усердно — вдруг пустышка. Да вот тут то я могу вам ничем не помочь все они сделаны по разному, ну признаюсь на этом этапе я обычно ставлю брейк на процедуру, выхожу и пробую ввести рег. данные заново, а потом, как тупой америкос, попав в SoftIce начинаю тупо смотреть содержимое регистров и вот что самое интересное в не более 50% случаев — помогает и я рано или поздно вижу правильный рег. номер в каком-нибудь регистре. Ну, я представляю что сейчас подумал обо мне профессионал, случайно забредший на эту страницу, что ж, лень, как известно, двигатель прогресса, а я ужасно ленивый, просто иногда даже злюсь на себя. Да, кстати, надо иметь чутьё на рег. номер — иногда они бывают вот такие:

Добавить комментарий