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

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

Page: http://home.coqui.net/alexr/index.htm

========== Вступление: ==========
Хороших ФТП клиентов мало, и такого чтобы меня удовлетворил от и до я ещё не видел. Не стала исключением и эта программа. Однако кракать было нечего и я решился.

========== Разведка местности: ==========
Я запустил программу и увидел окно с просьбой ввести своё имя и серийный номер (далее - СН). Я ввел имя "vallkor" номер "123321" и нажал "Register" полсе чего выскочил MessageBox с надписью "Invalid serial number".

========== Активные действия: ==========
Я загрузил DirectFTP.exe в W32DAsm v 8.93 (со всеми патчами :) и после дизассемблирования я зашёл в String Reference и начал искать ту самую строку "Invalid serial number". И нашел её вот тут:
* Possible StringData Ref from Data Obj ->"Invalid serial number"
                                  |
:0041131F 68FA704B00              push 004B70FA
:00411324 8BC7                    mov eax, edi
:00411326 E8D5540600              call 00476800
:0041132B 50                      push eax

* Reference To: USER32.MessageBoxA, Ord:0000h
В таких ситуациях должно быть ещё одно сообщение типа "Good serial" или "Thank you for 10 dollars, asso", причем в программе располагается все так:
call CheckSerialNumber(char name, char sn)
cmp	cl,0
je	BadMessage
GoodMessage:
	call	MessageBoxA
BadMessage:
	call	MessageBoxA
Это, конечно, очень грубо говоря, но смысл понятен. Т.е. нам надо найти теперь строку хорошего сообщения. Для этого мы опять заходим в String Reference и ищем сообщение об удачной регистрации или ещё чего-нить типа этого и ...... находим строку:
* Possible StringData Ref from Data Obj ->"Thank you for registering "
                                  |
:00410BD7 B843704B00              mov eax, 004B7043
:00410BDC E8EFD50900              call 004AE1D0
Теперь поищем чуть выше условные переходы и найдём вот что:
:00410B61 E88AD20900              call 004ADDF0
:00410B66 59                      pop ecx
:00410B67 84C9                    test cl, cl	<--Если СН введён правильный
:00410B69 0F84F2040000            je 00411061	<--то НЕ прыгаем
:00410B6F 6A40                    push 00000040
Т.е. Заменив je 00411061 на je 00410B6F мы вводя все что угодно будем получать сообщение об удачной регистрации. Но наша цель получить настоящий СН для своего имени. Смотрим чуть выше и видим:
:00410B1F 8D856CFFFFFF            lea eax, dword ptr [ebp+FFFFFF6C]
:00410B25 8B00                    mov eax, dword ptr [eax]
:00410B27 E810960800              call 0049A13C
:00410B2C E887630900              call 004A6EB8
:00410B31 3BD8                    cmp ebx, eax		<--В eax введенный нами СН, а в ebx - ПРАВИЛЬНЫЙ
Теперь достаточно находясь в SoftIce курсором на строке:
:00410B31 3BD8                    cmp ebx, eax
посмотреть значение регистра eax:
:? ebx
0018F33A  0001635130  "у:" 
Полученый десятичный вариант и будет правильным СН: 1635130

Вот, наверное, и все. Рабочий СН получен, а писать КейГен не буду, потому как там основной цикл на 3 экрана, а ещё внутри всякая фигня. Короче не стоит она того.

Исследовал и наваял туториал:
vallkor //PTDS
E-mail: vallkor@chat.ru (vallkor@etel.dn.ua)
Page: http://vallkor.chat.ru

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