Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 12 ноября!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Исследование Font Creator Program 4.0

Обсудить статью на форуме

Очень удобно, когда все крэкерские инструменты, книги и статьи в одном месте. Используйте сборник от EXELAB - вот тут.

Автор: GL#0M gl00m-crk@yandex.ru

 Цель: Font Creator Program 4.0
Инструменты: W32Dasm, Hiew.

iNTRODUCTION

"Редактор шрифтов среднего уровня - такую характеристику можно дать этой программе от компании High-Logic. Возможно, наибольшую пользу Font Creator представляет для тех, кому уже не хватает программ для начинающих и кто хочет попробовать свои силы на следующем уровне, но не имеет достаточно средств, чтобы приобрести дорогие профессиональные редакторы" - Журнал Chip 08/2003

Помнится...

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

Взлом

Что ж, посмотрим... При заходе в программу появится Nag, который оповестит нас о том, что программа будет работать (без каких-либо ограничений) всего лишь 30 дней. Нас просят нажать на кнопку "Start", для того чтобы продолжить, или "Register", для регистрации. Попробуем-ка зарегестрироваться...

Вот тут-то я и уткнулся в нехилое окно для ввода "License Key". При беглом рассмотрении, алгоритм был RSA, а это уже не шуточки. Времени на создание ключа не было, поэтому решил патчить.

Вперёд! Откроем нашу жертву в W32Dasm'е и зайдём в раздел Refs -> String Data References. Поищим там что-нибудь связанное с регистрацией. Мне тут же бросилась в глаза надпись (UNREGISTERED) - это она каждый раз светится в заголовке программы. Нажав на неё два раза мы окажемся на очень интересном месте:
  * Referenced by a (U)nconditional or (C)onditional Jump at Address:
 |:005B7EE4(C)
 |
 :005B7F2B A1FC7F5C00              mov eax, dword ptr [005C7FFC]
 :005B7F30 803800                       cmp byte ptr [eax], 00    // сравнение eax с нулём
 :005B7F33 742E                            je 005B7F63	     // если eax=0, то прыгаем
 :005B7F35 A12C805C00              mov eax, dword ptr [005C802C]
 :005B7F3A FF7008                     push [eax+08]
 :005B7F3D 68D47F5B00              push 005B7FD4
 :005B7F42 A12C805C00              mov eax, dword ptr [005C802C]
 :005B7F47 FF7010                     push [eax+10]
 :005B7F4A 8D45F0                     lea eax, dword ptr [ebp-10]
 :005B7F4D BA03000000              mov edx, 00000003
 :005B7F52 E83DC8E4FF              call 00404794
 :005B7F57 8B55F0                     mov edx, dword ptr [ebp-10]
 :005B7F5A 8BC3                        mov eax, ebx
 :005B7F5C E8D368EBFF              call 0046E834
 :005B7F61 EB31                           jmp 005B7F94      // здесь мы прыгаем если всё OK.
 
 * Referenced by a (U)nconditional or (C)onditional Jump at Address:
 |:005B7F33(C)	   // сюда происходит прыжок именно с этого адреса
 |
 :005B7F63 A12C805C00              mov eax, dword ptr [005C802C]
 :005B7F68 FF7008                     push [eax+08]
 :005B7F6B 68D47F5B00              push 005B7FD4
 :005B7F70 A12C805C00              mov eax, dword ptr [005C802C]
 :005B7F75 FF7010                     push [eax+10]
 
 * Possible StringData Ref from Code Obj ->" (UNREGISTERED)"
 |
 :005B7F78 68E07F5B00              push 005B7FE0	// вот здесь мы оказались
 :005B7F7D 8D45EC                     lea eax, dword ptr [ebp-14]
 :005B7F80 BA04000000              mov edx, 00000004
 :005B7F85 E80AC8E4FF              call 00404794
 :005B7F8A 8B55EC                     mov edx, dword ptr [ebp-14]
 :005B7F8D 8BC3                        mov eax, ebx
 :005B7F8F E8A068EBFF              call 0046E834
 
 * Referenced by a (U)nconditional or (C)onditional Jump at Address:
 |:005B7F61(U)
 |
 :005B7F94 33C0                     xor eax, eax
 :005B7F96 5A                        pop edx
 :005B7F97 59                        pop ecx
 :005B7F98 59                        pop ecx
 :005B7F99 648910                  mov dword ptr fs:[eax], edx
 :005B7F9C 68C37F5B00           push 005B7FC3
 
Т.е. нам нужно просто-напросто зайти в Hiew и заменить конамду cmp byte ptr [eax], 00 (по адресу 005B7F30) на mov byte ptr [eax], 01, а команду je 005B7F63 (по адресу 005B7F33) на xchg al,al (или два nop'а). Это всё соответствует замене опкодов 80,38,00,74,2E на опкоды C6,00,01,86,C0. Проделав эти манипуляции, мы получим полностью работоспособную программу, без каких-либо ограничений и надписей. Вру, надпись в About'е осталась, но её можно легко заменить в том же Hiew на что-нибудь другое. Я например заменил на "This product is cracked by GL#0M". Всё, удачи!


P.S. Как показало данное исследование, разработчики, понадеявшись на замысловатый алгоритм вычисления ключа, совсем забыли о защите исполнимого кода программы, что не уберегло их от банального запатчивания. "Зрите в корень мужики!"

Все пожелания и предложения отправляйте на мыло. Постараюсь ответить.

Этот материал опубликован в целях самообразования, за последствия которого Автор ответственности не несёт!

Обсуждение статьи: Исследование Font Creator Program 4.0 >>>


Материалы находятся на сайте https://exelab.ru



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS