скрыть

скрыть

  Форум  

Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Google  
 

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



Автор: 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% случаев - помогает и я рано или поздно вижу правильный рег. номер в каком-нибудь регистре. Ну, я представляю что сейчас подумал обо мне профессионал, случайно забредший на эту страницу, что ж, лень, как известно, двигатель прогресса, а я ужасно ленивый, просто иногда даже злюсь на себя. Да, кстати, надо иметь чутьё на рег. номер - иногда они бывают вот такие: &^&$&%&ufs - и если до процедуры, на которую мы поставили брейк вы его не нашли, то поищите внутри неё.

Вообще надо действовать по ситуации, потому что не один крэкер не даст вам супер оптимальной и в то же время простой инструкции по взлому, а для того, чтобы заниматься крэком, нужно немногое - настойчивость, голова на плечах (знающая немного ассемблера), а также мания величия (ну этого, я заметил, почти у всех компьютерщиков хватает, даже у меня, иначе вы это сейчас бы не читали, а я бы не писал).






Copyright © 2004-2016 "Delphi Sources". Delphi World FAQ




Группа ВКонтакте   Ссылка на Twitter   Группа на Facebook