скрыть

скрыть

  Форум  

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

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



Google  
 

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-сектора.






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




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