Взламываем защиту CDRWin

Автор - OverG

Для взлома CDRWin v5.01 нам понадобится какой-нибудь мощный отладчик (например Soft-Ice или TRW2000. Они очень схожи, но я предпочитаю второй, так как он немного по проще) и Hex-редактор (Hiew или WinHex).

Итак, приступим! Для начала запустим программу, переж нами тут же появится диалоговое окно с просьбой о регистрации. Так как программа сразу же требует ввести серийник, значит с датой и временем она не связана. Так что брейкпоинты ставить на функции GetLocalTime и GetSystemTime не имеет смысла!

Ввёдем в диалогом окне какие-нибудь данные. Естественно они не правильные и программа нам об этом сообщит: "Wrong serial number". Теперь заходим в отладчик и ставим бряк на функцию MessageBox. Делается это так: bpx MessageBoxA. Запускаем программу, вводим любые данные, жмеем ОК и перед нами появляется окно отладчика. Точка останова - функция MessageBoxA. Несколько раз жмем F12 до тех пор пока текущим не станет процесс CDRWIN. Поднимимся чуть выше и перед нами будет нижеследующее:

0041886A_______cmp Dword [EBP-10],041A
00418871_______jnl 00418883
{.....}
0041887C_______Call MFC42!ord000004AF
00418881_______jmp ....
{.....}
00418883_______Call MFC42!ord000004AF

Иначе говоря, по адресу 41886А идет сравнение, если данные равны, то совершить прыжок на адрес 418883(сообщение о удачной регистрации и продолжить работу), если нет, то вызвать сообщение о том, что серийник неверный и т.д.

JNL - условный переход, а нам надо чтобы он был безусловным (переходил всегда). Для этого берем HEX-редактор, останавливаемся по адресу 00418871. Там сейчас 7D (условный переход), а мы его заменим на EB (безусловный переход). Сохраняем изменения, запускаем программу, жмем в диалоговом окне OK. Появляется сообщение о том, что программа удачно зарегистрирована и и т.д. Неужели все так просто? Жмем ОК и программа завершает свою работу :(. Значит она ещё и проверяет серийник в реестре.

Ну да ладно, ставим бряк на функцию RegQueryValueExA, предварительно сняв первый бряк с функции MessageBoxA ( bc 01). Из процесса CDRWin эта функция вызывается раз 15, программа проверяет различные параметры, какой из них именно серийник заколебешься искать, так что смотрим дальше. После всех вызовов функции RegQueryValueExA следует функция "появления" диалогового окна. По адресу 00403D99 опять таки интересное сравнение. Если данные равны, то продолжить работу, если нет, то на выход (условный переход). Заменим этот переход на безусловный. Также как и в прошлый раз, с помощью Hex-редактора заменим значение 7D на EB. Сохраняем, запускаем, жмем в диалоговом окне любую кнопку и программа запускается!

Можно было крякнуть программу и по-другому, но помоему все же приятнее, когда программа говорит тебе, что регистрация успешно завершена, а это не так ;)

Ну вот и все! Теперь осталось написать кряк, но это уже совсем другая история :)
to be continued...