Главная » Статьи » Крэкинг |
Взлом "Соло на клавиатуре 8.1"
26/11/2004 ----------------------------------- Автор: //oz3qK ____________________________________________ Привет всем ! Несколько месяцев назад я установил прогу, которая, как заверяли разработчики, за пару месяцев могла обучить быстрому слепому набору текста (как русскому так и английскому). Юзать эту прогу стали мои родственники. Но прогу нашару никто не подарит. Ее надо зарегистрировать и отвалить 15 $. Все мы люди экономные и лишние деньги нам не помешают :) Значит сегодня мы будем ломать Соло на клавиатуре 8.1 Нам будут нужны традиционные инструменты крэкера : Дизасемблер (я использовал Ida), отладчик SoftIce, знание ассемблера (хотя я буду давать некоторые пояснения по ходу дела). Еще нам нужна сама программа. Найти ее можно на сайте производителя www.ergosolo.ru . Запускаем программу. Она сразу же выводит сообщение, что надо зарегистрироваться. В одном поле для ввода содержится серийный номер, во втором нам надо ввести регистрационный код. Пробуя ввести код, можно заметить что кнопка "Register Now" заблокирована и только когда мы введем правильный код, она разблокируется. Из этого можно зделать вывод, что программа берет серийный номер, генерирует регистрационный код и сравнивает правильный код с тем, который ввели мы (хотя возможен вариант что прога берет наш код и на его основе генерирует серийный номер и сравнивает с правильным, такой способ громоздкий и мало вероятный). Теперь приступим к работе с SoftIce. "Соло на клавиатуре" может произвести считывание регистрационого кода с помощью Api-функций GetDlgItemTextA или GetWindowTextA. Жмем Ctrl+D, всплывет окно SoftIce (Ctrl+D стоит по-дэфолту). Вводим команды : bpx GetDlgItemTextA bpx GetWindowTextA С помощью команды bpx устанавливается точки прерывания (breakpoint) на вызов функций. Снимаются брейкпоинты командой bc(bc номер (начиная с 0) или bc * (снять все)). Повторное нажатие Ctrl+D или F5 закроет SoftIce. Далее набираем в поле для ввода кода любой символ. Сразу же выскакивает SoftIce. Мы находимся непосредственно внутри функции на которую мы ставили breakpoint (это GetWindowTextA). После нажатия F12 мы перейдем на следущую по счету команду после вызова этой функции. Прокрутим окно с командами вверх (Ctrl+Up). Там будет следуйщее (адреса могут отличатся) : 017F:5F4036C3 Push EAX 017F:5F4036C4 Push DWORD PTR [ESI+20] 017F:5F4036C7 Call [User32!GetWindowTextA] Команда Push заносит значение в стек. В данном случае так передаются параметры функциям. EAX указывает на место где будет хранится введеный код. Чтобы выяснить значение EAX (функция попортила его), установим брейкпоинт на адресс 017F:5F4036C3 (bpx 017F:5F4036C3). Жмем F5, вводим еще один символ в поле для кода. Мы попадаем на нужную точку. EAX = 00695150. Жмем 3 раза F10 (пошаговое выполнение команд, по вызову (Call) переход во внутрь функции не происходит). После GetWindowTextA, по адресу в EAX запишется считаная строка. Этот кусок памяти можно просмотреть командой : d 00695150 Следующее с верху - окно данных. В нем мы можем наблюдать содержимое интересующего нас участка памяти. После команды d 00695150 в этом окне будет введенный код. Прокрутим окно данных вниз (Alt+Down). По адресу 00695100 хранится серийный номер. К нему должно просходить обращение, когда прога генерит правильный код. Если переместится к адресу 00695100, то можно увидеть набор цифр (!!!!!). Я определил что сюда программа пишет правильный код. Осталось его просто ввести :) А теперь разберем алгоритм по которому программа генерирует правильный код. После срабатывания брейкпоинта вернемся на уровень вверх (F12). Там следущее : 00414E1A : Push ECX Lea EDX, [ESP+0Ch] Mov ECX, ESP Mov [ESP+10h], ESP Push EDX 00414E26 : Call 0042F65 ;нам не нужна 00414E2B : Call 0040165E ;генерация кода В первом вызове нет ничего интересного, там проверка длины и другие действия. А вот второй ... :) Когда очередь подойдет к выполнению CALL 0040165E, нужно нажать F8 (внутрь функции). После нескольких нажатий появится следуещее : 017F:004046B1 : Mov EDI, [EAX] ; EAX = 00695100, тобиш серийный номер ; (предыдущая процедура перезаписала этот участок памяти) Push FF Mov EBP, [EAX+04h] ;первые 4 цифры, но не забывайте ;что они задом-на-перед Mov EBX, [EAX+08h] ;вторые 4 цифры Mov ECX, [EAX+0Ch] ;третие 4 цифры Mov [ESP+28h], ECX ;ESP+28 указывает на адрес 0067F4D0 Lea ECX, [ESP+18h] ;ESP+18 указывает на адрес 00695100 Mov DX, [EAX+10h] ;EAX+10 указывает на адрес 00695100 Mov [ESP+2Ch], DX ;ESP+2C указывает на адрес 0067F4D4 Call ... ;не важно Mov ESI, [ESP+26h] ;ESP+26 указывает на адрес 0067F4D2 Mov EDX, [ESP+24h] ;ESP+24 указывает на адрес 0067F4D0 Xor ESI, EDX Lea ECX, [ESP+10h] ;ESP+10 указывает на адрес 0067F4BC Xor ESI, EBX Xor ESI, EBP Xor ESI, EDI Xor ESI, 0AC40A05Eh Теперь в ESI правильный код в шестнадцетеричном виде. Теперь не составит труда написать KeyGen. Генератор ключей для программы можно взять тут: http://rst.void.ru/download/Solo-KeyGen.zip | |
Просмотров: 6463 | Рейтинг: 0.0/0 |
Всего комментариев: 0 | |