Delphi World - это проект, являющийся сборником статей и малодокументированных возможностей  по программированию в среде Delphi. Здесь вы найдёте работы по следующим категориям: delphi, delfi, borland, bds, дельфи, делфи, дэльфи, дэлфи, programming, example, программирование, исходные коды, code, исходники, source, sources, сорцы, сорсы, soft, programs, программы, and, how, delphiworld, базы данных, графика, игры, интернет, сети, компоненты, классы, мультимедиа, ос, железо, программа, интерфейс, рабочий стол, синтаксис, технологии, файловая система...
TabMail v2.2 или не стоит отчаиваться
Автор: Fess

Во время посещения России Билл Гейтс прошел курс лечения у известного российского сексопатолога. Эффект от лечения был таков, что он решил сменить название своей фирмы на Гиперхард.

Target: TabMail v2.2 (Build 15.12)

Tools:

  • Some brains
  • Soft-Ice 3.24
  • Win32Dasm 8.93
  • PEIdentifier 0.7
  • Упаковщик UPX
  • Любой hex+asm-редактор (я использую QView)

Пролог

Вступление:

Делать было нечего и я решил, что-нибудь поломать. Полез по дискам с шароварой и на диске Hard&Soft'a не помню, какой номер. Чуть-чуть ее по- ковыряв, я понял, что программа проста для взлома. Хотя, кой-какие момен- ты есть.

Что за прога:

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

Примечание:

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

Вступление

Программа будет взломана двумя способами:

1) Подсмотр кода
2) Написание кейгена на основе самой программы

Можно было бы написать еще и про патч, но это будет вам домашним за- данием, так сказать.

Подсмотр кода

Первое, что надо сделать это посмотреть запакована ли программа. Если Да, то чем для этого я использую программу PEIdentifier. Запускаем и видим UPX 0.89.6 - 1.02 / 1.05 - 1.20 -> Markus & Lazlo. Ага, UPX это хорошо, он очень хорошо распаковывается самим UPX'ом. Если его запустить с ключем -d. Распаковываем и суем его в Win32Dasm, который выдает нужный код, но зайдя в секцию строк мы не видим нишиша. Наверно, программа сбацана на Delphi, если засунуть в PeId уже распакованную программу, мы поймем, что так оно и есть.

Ну что ж, будем опираться только на себя, да на SoftIce. Запускаем про- гу и ищем, где бы нам ввести код. Сразу после запуска мы видим великолеп- ный nag-screen с кнопкой Register. Жмем ее и видим форму, где и вводим, например, такую фигню Name: FessCool Code: 110022334455. Запускаем и видим сообщение, об ошибочности наших действий, с рульной иконкой. Хе-хе-хе, зря, товарисчи, вы так делаете, зря. С давних времен известно, что делфи не ис- пользует мессагубоха, а вот LoadIconA использует вполне. Ставим бряк на это и о кул, при повторной попытке мы вываливаемся в прогу. Место, где мы выва- лились не очень понятно, но дадим такую команду s 0 l -1 "110022334455". У меня строка нашлась на 11E7F48. Удаляем не нужный теперь бряк bc*. И ставим бряк на bpmb 11E7F48 rw. Еще раз запускаем процедуру регистрации, вывалива- емся нажимаем несколько раз F12, пока не вываливаемся в таком месте.


:0047A343 8B45FC        mov eax, dword ptr [ebp-04]
:0047A346 50            push eax
:0047A347 8D55F0        lea edx, dword ptr [ebp-10]
:0047A34A 8B83F0010000  mov eax, dword ptr [ebx+000001F0]
:0047A350 E843BCFEFF    call 00465F98
:0047A355 8B55F0        mov edx, dword ptr [ebp-10]
:0047A358 8D45F4        lea eax, dword ptr [ebp-0C]
:0047A35B E8DC99F8FF    call 00403D3C
:0047A360 8B45F4        mov eax, dword ptr [ebp-0C] <- В eax имя
:0047A363 5A            pop edx  <- в edx код
:0047A364 E873FFFFFF    call 0047A2DC <- Процедура проверки
:0047A369 84C0          test al, al
:0047A36B 7413          je 0047A380

Видно, что выделенная процедура, это скорее всего процедура проверки ко- да, и test al,al это проверка все Ок, или Нет. Заходим в процедуру, нажимая кнопку F8. И видим следующий код


:0047A2E4 E88B9AF8FF   call 00403D74
:0047A2E9 83F808       cmp eax, 00000008
:0047A2EC 7E15         jle 0047A303
:0047A2EE 8B158CE04B00 mov edx, dword ptr [004BE08C]
:0047A2F4 8B12         mov edx, dword ptr [edx]
:0047A2F6 8BCE         mov ecx, esi
:0047A2F8 8BC3         mov eax, ebx
:0047A2FA E891FCFFFF   call 00479F90
:0047A2FF 84C0         test al, al
:0047A301 7505         jne 0047A308

Мы видим, что это сравнение на длинну имени. Странно нигде об этом не предупреждалось?!!! Ну да ладно вводим такое имя: FessCool2002. И начинаем заново трассировать, проходим проверку и заходим в процедуру call 00479F90. И трассируем до тех пор, пока не увидим следующий код...


:0047A018 8B55F4     mov edx, dword ptr [ebp-0C]
:0047A01B 8B45FC     mov eax, dword ptr [ebp-04]
:0047A01E E851EAFFFF call 00478A74
:0047A023 8BD8       mov ebx, eax
:0047A025 33C0       xor eax, eax

Здесь по адресу edx можно посмотреть настоящий код. Как я это угадал? Все просто, как в детстве, тут просто нужно упорство. Я трассировал и смотрел на изменяющиеся регистры, пока не нашел этот. На имя FessCool2002 это код 664d8cad-751e7eb5-86cb2621-00f3541f.

Написание кейгена на основе самой программы

Так код мы подсмотрели, теперь осталось написать кейген, это не просто, а очень просто. Делать это будем используя MessageBoxA, как я обычно и де- лаю.

Ищем любой вызов процедуры MessageBoxA в листинге Win32Dasm. Вот первый


:00426272 50         push eax
:00426273 57         push edi
:00426274 56         push esi
:00426275 8B4324     mov eax, dword ptr [ebx+24]
:00426278 50         push eax

* Reference To: user32.MessageBoxA, Ord:0000h
                        |
:00426279 E82E03FEFF Call 004065AC

Так процедура вызывается из 4065AC посмотрим, что там


* Reference To: user32.MessageBoxA, Ord:0000h
                          |
:004065AC FF253C164C00 Jmp dword ptr [004C163C]

Хорошо. Теперь попробуем найти по коду эту строку в самом файле, т.е. ищем FF253C164C00, одна единственная и нашлась по адресу 59AC. Теперь ос- талось начиная со строки 47A01B написать вызов, функции MessageBoxA. Дела- ем это так, заходим в QView и ищем строку hex-кода E851EAFFFF8BD8. У меня она обнаружилась на 7941B теперь начиная с этого адреса вписываем такие строки (через тире представлены их hex представление)


  push 0    - 6A00
  push edx  - 52
  push edx  - 52
  push 0    - 6A00
  call 59AC - E886C5F8FF
  nop       - 90

Теперь запускаем программу, вписываем свое имя и в МессагаБоксе видим нужный код. Вот это кул. Но теперь, если вы попробуете еще раз зарегиться на другое имя, то вам придется удалить параметр RegUserName из ключа ре- естра HKCU\SOFTWARE\DLG\TabMail, там же в параметре RegCode, можно видеть, введенный вами код, но это код который вы ввели просто так, а не настоящий так, что вот еще один метод, так сказать нахождение ключа и патч в одном флаконе.

Послесловие

Вот и закончена работа потирая руки вы регистрируете программу на себя. Винище льется рекой вы празднуете халявно заработанные 19$.

Хочу надеяться, что эта статья Вас чему-либо научила и помогла в осво- ении этой нелегкой науки.

Крэкеры, крякеры и кракерята, сказать практически нечего разве, что только не ругайте сильно разработчиков за такую корявую защиту.

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

Все ругательства отправлять в null
Все остальное на lomovskih@yandex.ru

Спасибо за интерес к моему творчеству!

Удачи в Reversing Engeneering!

P.S. Запомните все материалы публикуются только в учебных целях и автор за их использование ответственности не несет!!

P.P.S. Возможно имеют место опечатки, заранее извините!

With best wishes Fess

И да пребудет с вами великий дух bad-сектора.

Проект Delphi World © Выпуск 2002 - 2004
Автор проекта: ___Nikolay