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

Оформил: DeeCo
Автор: http://www.cracklab.narod.ru

Эта програмка заменяет стандартный проигрыватель компактов в Форточках и ещё целая куча возможностей. Вобщем как потом оказалось, это shareware версия, но вся её шароварность в том, что появляются напоминающие НАГлые окна с напоминанием о регистрации (может ещё что-нибудь). Мне захотелось посмотреть, что же за защита у программы.
Я открыл "О программе" затем выбрал вкладку "Ввестии рег. код", в поле имя ввёл "vallkor" в поле пароль ввёл "123321". И нажал на Submit. После этого выскочило подозрительное окошко с информацией о неверном коде (окошко подозрительно выглядело, было похоже на Делфийское окошечко :()
Ну да ничего! Я захожу в айс и сталю брекпоинты:
bpx GetWindowTextA
bpx GetDlgItemTextA
"А" в конце, т.к. это 32 битная программа (о чём я узнал из хелпа). и выхожу из айса, опять ввожё пароль (т.к. его стёрла программа после первого нажатия на "Submit". И выскакиваем в айс.
Значит имя считалось, но нам надо чтобы и пароль наш считался, для этого выходим из айса (F5), но тут же опять вываливаемся в него. Вот! Считался и пароль. Но мы находимся в какой-то системной библиотеке, чтобы вернуться в нашу программу нажимаем F11, и мы оказываемся тут:

call edi ; здесь читаем наш рег. номер
lea eax, [ebp-40]
push eax
call 00403704
mov dword ptr [esp], 0040A060
push esi
push ebx
mov edi, eax
call [user32!SetDlgItemTextA] ; убираем рег. номер из EditBox'a
lea eax, [ebp-00C0]
push eax
push edi
call 0040315B ;(*) собственно процедура проверки
pop ecx
test eax, eax ; смотрит результаты проверки
pop ecx
jz 00401DC7 ; если всё ок, то не прыгаем
xor esi, esi

Как видно из этого листинга тут всего одна подозрительная процедура (я её обозначил (*). Значит будем искать там, итак, когда курсор айса будет на этой пройедуре, то чтобы зайти в неё нужно нажать F8, после этого мы здесь:

push esi
push edi
mov edi, [esp+0C] ; в edi записали наш РН (123321)
push 04
push edi
call 00402DE4 ;(*) зайдем сюда по F8 и увидим:

push ebp mov ebp, esp push esi push edi mov edi, [ebp+08] ; в edi записали наш РН (123321) mov eax, 0000C797 ;(*) в eax записали ПРАВИЛЬНЫЙ РН!(чтобы его увидеть нужно ввести комманду "? eax" и вам высветится ваш РН У меня был - 51095) cmp edi, eax ; сравнивают наш РН (123321) и правильный (51095) ja 00402EE2 ; еслин не равны - прыгаем

Вот собственно и всё! Теперь можно убрать все бряки из айса (bc *) и выйти из него. Теперь вводим найденный нами РН и пользуемся зарегестрированной версией и всеми последующими апдейтами!!!

Да, кстати, судя по всему правильный РН сгенерировался сразу после прочтения имени (vallkor), что довольно необычно, поскольку обычно генерят после прочтения и имени и введенного РН. И вот ещё что, эта статья написана только в образовательных целях, поэтому если вам понравилась программа CD/Spectrum Pro 2000, то купите её за 20$

Исследование провёл и изложил это всё в туториал:
vallkor //PTDS (vallkor@chat.ru)

{Комманда PTDS нуждается в новых членах! Если вы считаете, что способны на многое и хотите поделиться своими знаниями и взамен получить новые пишите мне}

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