Патч patch в программе...
Итак начнем тренироваться ломать программы,и начнем конечно же со своей так проще и так будет понятней
создаем консольное приложение и пишем такой простейший код:
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils;
const pas='password';
var pass:string;
begin
writeln('Enter code');
readln(pass);
if pass=pas then writeln('Welcom to the system...')
else writeln('Code is wrong...');
end.
Все просто и понятно если пароль введенный пользователем не совпадает с константой pas то не судьба иначе
нас приветсвуют в системе.
Написали сохранили,скомпилировали и запустили. Попробуйте и правильный вариант
и не правильный,все работает. Теперь как же нам исправить программу что бы она при ЛЮБОМ!!! пароле давала положительный результат?
Для этого прийдется зайти в инструментарий крякера и обзавестись отладчиком я использую OllyDbg v1.10
можно и поновее и постарее,в принципе не важно какой использовать отладчик,но пока что на стадии обучения лучше
следовать моим советам,а дальше сами уже выберите чем лучше пользоватся.
Что такое отладчик? Это программа которая позволяет отлаживать код нашей программы,искать ошибки в только что написанной программе,с той лишь разницей что у нас нет исходника *.pas для паскаля или вообще с++ есть результат компиляции т.е просто исполнимый файл.Так вот отладчик позволяет не только найти ошибку но и исправлять прямо в *.exe . Но не пугайтесь если увидете не тот код который вы хотели увидеть,это машинный код - ассемблер. этот язык сложен и красив по своему, ассемблер готов уже для переваривания процессором.
Пока что не будем учить ассемблер,сейчас другая задача,да может и вообще не стоит его учить :)
Я покажу самые частые команды которые потребуются для взлома.
Итак открывает отладчик и открываем в нем нашу тестовую программу,и вот что мы видим в окне отладчика а точнее в окнах.
конструкция if pass=pas then... превращается в JNE address это переход на данный адресс если срабатывает другое условие ИНАЧЕ else writeln('Code is wrong'); просто сотрем это условие в ассемблере это NOP (0x90 в шестнадцатеричном редакторе) отладчик автоматически добавляет два нопа для "выравнивания" кода иначе будет фатальная ошибка,не будем сейчас залезать
в дебри ассемблера,скажу что это очень важно соблюдать количество исправленных байт.
Итак исправляем и сохраняем все запускаем и проверяем все работает на ура.
Просто подходим к строке где надо исправить и давим пробел,вводим NOP и ок
В версии 1.10 это выглядит так в контекстном меню, скопируем все исправления в программе
в новую экзешку
А вот в более новой версии: (у меня почему то не получилось,программа падает как раз с фатальной ошибкой,не стал разбираться в чем дело в настройках,просто использовал старую версию)
Это был всего лишь патч patch исправление нескольких байт для получения хорошего результата.
Порой этого бывает достаточно для домашнего использования :) бывает так что проше и легче исправить код
чем выяснять сложный алгоритм генерации проверочного кода.
Ведь это только у нас в тестовой программе хранился сам код (раньше так и было в 99% программ ) который можно было бы просто подсмотреть вытянув все текстовые строки из программы и введя правильный вариант даже не ломая программы,но это время уже давно ушло и сегодня код регистрации вычисляется динамически,
в одном случае просто считывает имя машины и на основе его к примеру XORится каким либо ключем или используется моноалфавитная подстановка - шифр цезаря или что-то простое в этом духе, в другом случае считывается серийный номер винта или любого другого компонента компа и на основе него вычисляется код,поразному бывают разные навороты алгоритмов.
чаще всего используется имя пользователя записанного в ОСи или же введенного в окне регистрации и с этим именем тоже происходит какая либо обработка, потом происходит сравнение кода введеного пользователем с кодом сгенерированным программой если совпадает то все ок иначе нет регистрации.
По поводу демо программ бывает такое что ломаешь ломаешь а ломать то там и нечего в программе действительно
отсутствует нужный код (к примеру распечать результат программы на принтере, или нет больше 3х уровней в игре и т.д и т.п) здесь все чаще программисты,а точнее те кто пытается заработать на таких программах (шароваршики) приходят к такому выводу что лучше выпустить действительно демо версию в которой будут работать пару функций а остальные будут в полнофункциональной версии за деньги,иначе взломщики часто ломают демо версии и включают все функции(которых по заверениям авторов там нет).
Вся суть взлома сводится к изменению условия проверки кода на обратные или делается безусловный переход на место удачной регистрации. Но об этом я еще подробно опищу,а пока что давайте поломаем реальную программу...
Будем исправлять триал (ограниченное время работы программы,или количество запусков,или дней и т.п) в игре
Diamond Puzzle v1.0 именно эту версию незнаю сможете ли вы отыскать эту старую версию,я даже не в курсе есть ли новые версии.
В новых версиях на 90% будет совершенно другой алгоритм защиты,так что постарайтесь найти версию 1.0 или просто поверьте на слово в крайнем случае, хотя я подумаю и вероятно выложу для скачивания данную игрушку дабы потренироваться во взломе.
Но это будет уже в другой статье...
Комментариев нет:
Отправить комментарий