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

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


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

Создание регистрационного кода к Ashampoo WinOptimizer Suite Plus Pack 1.31.

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

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

Автор: Fess Дата: 10.05.2002 Тьютор: 5


-+-+-+-+-+-+-+-+-+-+ For education uses only +-+-+-+-+-+-+-+-+-+-
 Target: Ashampoo WinOptimizer Suite Plus Pack 1.31
 
 Tools:    Some brains
           TRW2000
           Win32Dasm 8.93
 
 
Вступление
Как это начиналось: Решил я потестировать системные программы на компакт диске журнала Hard&Soft за 4.2002 г. Запустил первую (эту прогамму), а она не зарегена. Нехорошо это подумал я и решил ее модифицировать. А так как запатчить это любой сможет, то мы займемся созданием регистрационного кода к этой проге, глядишь он и к следующей версии подойдет, да и хранить его легче. Что за прога: Эта программа включает в себя кучу разных утилит для оптимизации работы системы. Там и очистка реестра и оптимизация интернет и прочее, так же включает в себя бесплатный навороченный проигрыватель. Все это в архиве занимает приближенно 10 Мб.
Начало
Первое с чего начинается любой взлом это определить какую защиту имеет программа. В основном это имя-код, код, ключ-файл (отсортированы в порядке встречаемости в природе). Запускаем прогу, лезем в About, а там нет ничего... Cтранно. Поищем еще. Нашлось в меню Internet\ Enter Reg/Trial key. Так тут ввод только кода, делаем вывод, что будет какое-то математическое преобразование, и подсмотреть в Soft-Ice настоящий код нам не удасться. Так вводим любой код. О выскакивает окно, что код неправильный. Было бы интересно, если бы было обратное. Запускает Soft-Ice и пытаемся проделать тоже самое... Но не тут то было, авторы предусмотрели и такой вариант. Вываливается окно, что Soft-Ice загружен. Ну и фиг-то с ним попробуем поймать это окно. Ставим бряк на MessageBoxA. Запускаем прогу, а она не хочет ловиться. Ладно. Перезагружаемся без Soft-Ice. Попробуем дизассемблировать файл, там же была надпись возможно она есть и в тексте. Так берем Win32Dasm пихаем туда файл AshampooWinOptimizerSuite.exe. Судя по его размеру он не запакован. И правда все хорошо. Только вот в меню строк текст на чем-то нехорошем. Скорее всего на немецком, я в немецком не бум-бум и перевести с ходу не могу. Но если в файле нет строк на english'е, а интерфейс на нем поэтому делаем вывод в каком-то файле эти строки храняться. Посмотрев в каталоге с прогаммой обнаруживаем 3 подозрительных ini-файла: allmods.ini MOD.ini, Module.ini. В них как раз и содержаться эти строки. Переместим их в другое место. Теперь если запустить программу, она будет на немецком. Идем куда нам надо, вводим любой код и в окне видим такую строку Der eingegebene Code war falsch! Поищем ее в листинге. Нашлась по адресу 502B87 посмотрим какой код идет перед ней :00502B70 8B45FC mov eax, dword ptr [ebp-04] <- Заносистся адрес на код :00502B73 E884C6FCFF call 004CF1FC <- Процедура проверки номера :00502B78 83F801 cmp eax, 00000001 <- Если eax=1 :00502B7B 1BDB sbb ebx, ebx <- то ebx=FFFFFFFF, иначе ebx=0 :00502B7D 43 inc ebx <- ebx=ebx+1 :00502B7E 84DB test bl, bl <- Если ebx<>0 :00502B80 754A jne 00502BCC <- то переход :00502B82 6A00 push 00000000 <- Иначе :00502B84 8D55F0 lea edx, dword ptr [ebp-10] <- вывод * Possible Reference to String Resource ID=50300: "Der eingegebene Code war falsch!" | :00502B87 B87CC40000 mov eax, 0000C47C <- строки Узнать, что после команды mov eax, dword ptr [ebp-04] в eax будет адрес на введенный код можно так: запускаем TRW2000 ставим бряк на 00502B70, вываливаемся. Пишем d eax. И видим свой код.
Рассчет кода
Теперь посмотрим процедуру подсчета правильности кода. Заходим в call 004CF1FC. Идем в конец процедуры и смотрим от чего зависит будет eax=1 или нет. Смотрим, смотрим, смотрим.... Длинная!!! Но ничего разберемся как-нибудь. * Referenced by a (U)nconditional or (C)onditional Jump at Addresses: |:004CF25E(C), :004CF4C5(C) | :004CF4D1 807DF301 cmp byte ptr [ebp-0D], 01 :004CF4D5 0F94C0 sete al :004CF4D8 807DF201 cmp byte ptr [ebp-0E], 01 :004CF4DC 0F94C2 sete dl :004CF4DF 22C2 and al, dl :004CF4E1 807DF101 cmp byte ptr [ebp-0F], 01 :004CF4E5 0F94C2 sete dl :004CF4E8 22C2 and al, dl :004CF4EA 7402 je 004CF4EE :004CF4EC B301 mov bl, 01 Видно, что если хоть в одном из байтов по адресам [ebp-0D],[ebp-0E], [ebp-0F] будет 0, то al = 0. Три критерия проверки, нам надо, чтобы во всех из них была 1. Так же сюда ведут два перехода: второй видно откуда, посмотрим откуда идет первый. Идем к 004CF25E. :004CF253 8B45FC mov eax, dword ptr [ebp-04] :004CF256 E8D557F3FF call 00404A30 :004CF25B 83F812 cmp eax, 00000012 :004CF25E 0F856D020000 jne 004CF4D1 Очень похоже на проверку длинны кода. Значит код должен быть равен 18 символам. Хорошо учтем. Теперь ищем где в первый байт [ebp-0D] записывается 1. И наты- каемся на такой кусок кода. :004CF419 8B45F8 mov eax, dword ptr [ebp-08] :004CF41C 8B55F4 mov edx, dword ptr [ebp-0C] :004CF41F E85057F3FF call 00404B74 :004CF424 7504 jne 004CF42A :004CF426 C645F301 mov [ebp-0D], 01 Скорее всего это сравнение строк по адресам находящимся в eax и edx. А что в них? Запускаем TRW 2000. Ставим бряк на 4CF419. Вводим произвольный пароль из 18 символов. И смотрим, что в этих строках. По адресу eax какое-то 4-х значное hex-число, по адресу edx 4 последних символа нашего кода. Уже кое-что. Заранее скажу, что число в eax есть сумма кодов первых 13 байтов нашего кода. Эта сумма вычисляется в процедуре по адресу 004CF568, следующей сразу после проверки количества символов в коде. Теперь смотрим второй критерий [ebp-0E] выраженный в таком куске кода :004CF469 8B45F8 mov eax, dword ptr [ebp-08] :004CF46C BA58F54C00 mov edx, 004CF558 :004CF471 E8FE56F3FF call 00404B74 :004CF476 7504 jne 004CF47C :004CF478 C645F201 mov [ebp-0E], 01 Проводим тот же маневр с TRW 2000. Ставим бряк на 4CF469 и видим, что по адресу eax находится 6-й символ кода, а по edx hex-число C. По скольку адрес указан статический, то можно сделать вывод, что C это неизменяемая константа. С учетом этого код выглядит так: xxxxxCxxxxxxxxXXXX. Где "x" - цифра или буква, "XXXX" - сумма кодов первых 13 символов. И наконец третий критерий [ebp-0F] вычисялется из такого куска кода: :004CF440 8B45F8 mov eax, dword ptr [ebp-08] :004CF443 BA4CF54C00 mov edx, 004CF54C :004CF448 E82757F3FF call 00404B74 :004CF44D 7504 jne 004CF453 :004CF44F C645F101 mov [ebp-0F], 01 Видно, что код аналогичен двум первым случаям. Только по адресу eax находится первые 3 символа кода, а по адресу edx три буквы "WOD". Общая форма кода принимает вид: WODxxCxxxxxxxxXXXX Поскольку считать самому XXXX мне было в лом, я состряпал такую программу на Pascal, пришлось даже написать функцию перевода из dec в hex. Var St,Z,M:String; C:Byte; B:LongInt; function Hex(N:Integer):String; {Функция перевода из dec в hex} Begin M:='123456789ABCDEF'; C:=4; Z:='0000'; repeat Z[C]:=M[Round((N/16-N div 16)*16)]; N:=N div 16; dec(C); until N=0; Hex:=Z; End; Begin St:='WODxxCxxxxxxx'; {Здесь вместо x вписываете любые буквы или цифры} B:=0; For C:=1 TO 13 Do B:=B+Ord(St[C]); {Сумма кодов первых 13 байт} Writeln; Write(St+'-'+Hex(B)); End. У меня получился такой код: WOD11C1111111-02E6 Вводим. Загегистрировано. Запускаем опять и видим unregistred. Почему? Да все просто мы ввели Trial-код, а надо Reg-код. Посмотрим процедуру проверки повнимательней. Это было, и это было, и это тоже... А что это за процедура проверки? :004CF492 8B45F8 mov eax, dword ptr [ebp-08] :004CF495 BA64F54C00 mov edx, 004CF564 :004CF49A E8D556F3FF call 00404B74 :004CF49F 7417 je 004CF4B8 Все как обычно загружаем в TRW 2000 ставим бряк начало блока. И смотрим по адресу eax 4-й и 5-й байты кода, а по edx 77. Так вот значит чем отличается код Trial-версии, от обычной?!!! Здесь должно стоять мое недоумение, вроде бы мощный продукт, а код генерится как в детском саду, ей богу. Товарищи программисты не будьте так наивны! Значит в тексте прогаммы заменяем в строке St:='WODxxCxxxxxxx'; третий и четвертный символы на постоянные 77. Еще разок пробуем ввести на сей раз моим кодом будет такая строка WOD77C1111111-02F2. B нам показывают, что мы зарегились полностью. Ура-а-а!!! Вопли восторга с разбрызгиванием слюны вокруг.
Спасибо за интерес к моему творчеству!
Удачи в Reversing Engeneering!
Послесловие
Спасибо авторам за предоставленный для исследования продукт. Было очень интересно. Собратья, если Вам понравилась эта программа и у вас есть деньги купите ее, иначе если никто не будет покупать, то никто не будет писать программы, следовательно нам будет нечего делать. Программисты, не будьте наивны - защищайте свои творенья как следует, не надейтесь на совесть крякеров, у некоторых ее не бывает. "Любая программа личностна, так как личность есть отражение свойств пространства на беспредельности бытия." (Fess) Автор: Fess
Все ругательства отправлять в null
Все остальное на lomovskih@yandex.ru


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


With best wishes Fess

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



Обсуждение статьи: Создание регистрационного кода к Ashampoo WinOptimizer Suite Plus Pack 1.31. >>>


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



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


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