!!!CRACKING!!!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
###Первые шаги для начинаюшего крэкера.###
Начнем с самого простого. Что вообше нужно для того чтобы взломать програму, обойти или убрать
защиту, сгенерировать серийный код?Правильно - посмотреь исходный код програмы и при
необходимости видоизменить его.К сожалению, найим исходнник к коммерческому продукту практичыске невозможнр, поетму приодитса идти по обходимому пути.Как извесно, любая программа представлена на ПК в виде машиных команд.Ти команды понятны микропроцессору, но
програмировать с их помощю чрезвычайно сложно: открой любой
ЕХЕ-файл в
НЕХ -редакторе, и ты сразу поймешь, что я имею в виду. Чтобы облегчить процес программирования был изобретен специальной танслятор -ассамблер. Если из ассамблерного листинга можно получать машишый код, то вполне возможно и обратная операцыя. Любой файл может быть представлеой в виде ассамблерных команд- етим и занимаютса дизассамблеры.Для дизассамблера
IDA(
www.idapro.ru ) нужно иметь опыт.Для решения несложных задач вполне достаточно удобного
W32Dasm
(
www.expage.com/page/w32dasm ).А чуть не незабыл нам ищо нужен отладчик (дебаггер).Он такде дизассемблирует исходный код програмы, но при етом когда программа выполнять оприделоные действия, отладчик ищет в исходном коде програмы тот код который выполнилса в даной момент...Лидер среди отладчиков есть
OllyDBG (
www.OllyDBG.de).
Начиная займатса крэкингом буддь рассудителен. Мой тебе совет: не спеши брать быка за рога
и срвзу браться за взлом добротнлй софтины с продуманой защитой. Без соответствующего опыта
у тебя все равно вряд ли что-то получитса. Скорее всего,ты просто закинешь это неблагородное
занятие, одновременно с этим потеряв всякий интерес к теме.Начинать, как извесно, надо с
простого: здесь будет и понимание, и интерес, исамое главное -толк. Можно, например зайти
на
www.downloads.com и накачать пару десятков сомнительных программ, типа СуперКАлькулятор, ГиперБлокнот... - среди них, наверняка, найдутса экземпляры с приметивной защитой. Но я тебе рекомендую начать с так называемых крякмисов(
crackme) -специальных заданых для взломщиков. Многите из них написаны специально для новичков... Идеальный вариант для новичков - серия крякмисов от
FaNt0m'a www.crackmes.de/users/fant0m/fant0mcollection. Ее и расмотрим: для лутшего усвоения рекомендую выполнить действия паралельно со мной.Только в этом случае ты будеш понимать, о чем я говорю

.
#Немного теории
Возьмем первый крякмис из колекции -
FaNt0m'a CrackMe #1. В задание требуется найти серийник,
при этом используя исключительно дизассемблер . Используя дебагер по условию запрещено, и не
требуется. Посмотрим что собой представляет програма: обычное окно с текстовым полем для ввода.
После ввода случайного значения (например, слова 'античат'), появится всплывающее окно с
ошыбкой
Worng rassword. Keep trying, you'll get it!. От этого, соббственно, мы и будем крутиться. Текстовые строки информационных сообщений зачастую хранятся в самом коде программы.Соотвестено, если найти обращения к строке, то без труда найдется и вызов функции вывода сообщения, а там уже и процедура проверки серийника недалеко. Попробуем разобраться во всем более подробно. В общем случае программа состоит из трех областей памяти(сегментов): сегментов кода (CS), сегментов кода (DS) и сегментов кода (SS).В первом, как ты понял, хранится непосредственно код программы, то есть команды.Второй сегмент предзначен для хранения даных (переменых, констант и т.д) - по идее, выданное програмой сообщения разполагается имено там. Сегмент стека прдставляет собой специальную область памяти, предзначенную для временого хранения даных, например, параметров, представаемых процедур и функциям. Слово 'стек' подразумевает спользования принцина
FILO (
First In- Last Out, первым пришел- последним вышел).Последнее занисенное в стек (командой PUSH) значение, будет извлечено (комадой РОР) первым, предпоследное- вторым и т.д. Можно нагляднопредставить себе это, вобразив колоду карт.Если ты знаком с программированием под Windows то должен знать, что стандартное окно с сообщением чаще всего выводттся с помощью специальной API-функции
MessageBoxA.Сама строка собщения и прочие параметры окна помещаются в стек, откуда поже извлекаются и обрабатываются функцие (это самый разпространеный способ передачи параметров функции в язык ассамблер.)Получается что после ввода неправельного ( ты же не думаешь его угадать??))) ) серийника, програма загружает в стек адрес строки и вызывает функцию
MessageBoxA.
W32Dams, как и многие дизассамблеры, умеют показывать где имено происходит обращения к етой или иной строке. Это значительно облегшает поиск нужного фрагмента
кода: достаточно в дизассамблированном листинге произвести поик текста сообщения, и мы сразу найдем нужный вызов функции
MessageBoxA. В большынстве случаев гденибудь рядом разпологоеться и процедура
проверки серийника наша задача- с помощбю дизассамблера просмотреть правильный пароль во впемя сравнения его со введениым.
#Взлом серийника
Зпускай W32Dams, далее меню Dissembler->Open Files и выбирай файл
CRACKME1.EXE. Ну и чо переднами..? да да ето дизассемблированный код програмы, но и в нем еще нужно разобраться. Наша цель- найти ту
часть кода, которая каким-то образом использует обозначенную выше строку. Самый банальный способ-
провести поиск строки (меню
Search->Find Next), но есть и другой вариант. Дело в том, что
W32Dams
записывает все найденные обращения к строковым даным в специальный список
(меню
Refs->String Data References). Поетому вместопоиска можно просто выбратьиз списка нужную строку и дражды кликнуть по ней мышью. Так или иначе,
W32Dams, автоматически переведет на следующий код:
* Possible StringData Ref from Data Obj -> "Wrong Rassword Keep trying? you'll get it"!
004012A2 6845304000 push 00403045
Комментарий указывает на то, чо в следующей команде происходит обращение к нужной строке-
Wrong Rassword Keep trying? you'll get it!. Разберем эту команду более подробно:
004012A2 ето адрес, где в памяти находится даная команда,
6845304000 - представление команды в шестезначном виде
(машинные коды).
push 00403045 - непосредственно сама ассемблерная команда. Она помещает в стек адрес
00403045, по которому, судя по комментарию
W32Dams'a, хранится наша строка.По нашему предположению после загрузки адреса строки в стек, происходит вызов функции , выводящейсообщения на экран. Так и есть - смотрим ниже:
* REference To: USER32/MerrageBoxA? ord:01BBh
:004012A9 E85C00000 Call 0040130A
W32Dams нам явно указывает , что команды вызова функции
Call вызывает имено
API- функцию вывода окошка
(
MessageBoxA).теперь смотим, что происходит до вызова этой функции.Сразу бросается в глаза следующий код:
00401291 Call 00401352
00401296 cnp eax, 00000000
004001299 je 004012B0
На самом деле это довольно стандартная конструкция - запомн ее.В 90% случаев это и есть код проверкисерийника.Сначала вызывается некоторая процедура, которая сравнивает введенный пользователеми правильный код, и по результатам проверки устанавливаетнужное значение регистра
ЕАХ. После этого с помощью команды
СМР производится сравнение значения регистра с 0.Если они равны (
je - jump equal- перейти, если равно), осуществляется переход на адрес
004012В0. Давайте посмотрим, что находится по этому адресу - нажми
Shift+F12 и в появившемся окошке введи этот адрес.ОГО! Появившийся фрагмент кода в точности повторяет код вывода сообщения на екран. Разница лишь в том,
что вместосообщения о неправильном коде, выводится надпись
You got it! Your now a cracker!.Отсюда вывод:вызванная ранее процедура действительно осуществляет проверку серийных кодов. Если пользоватнль введет правильный пароль, то значение регистра
ЕАХ становится равным 0, и
управление передаеться процедуре вывода сообщения об успехе. В противном случае в регистре
ЕАХ записывается 1, и перехода не происходит. Далее по коду расположен вызов MessagrBoxA с сообщением об ощибке, который и выполняется. В нашем случае все еще проще. Функция проверки является стандартной
функцией сравнения двух строк IstrcompareA, которой через стек передаются два параметра:
:00401287 689С304000 push 0040309C
* Pssible StringData Ref from Data Obj -> "m0tNaF-EmKCARc"
:0040128C 6829304000 push 00403029
* Referece To: KERNEL32.IstrcmpA,Ord:02D5h
00401291 E8BC000000 Call 00401352
Первой командой push в тек заносится адрес введеной нами строки, а второй- настоящтй серийник.
W32Dams любезно подсказал, что по этому адресу находится строка
m0tNaF-EmKCARc. Это и есть серийник

).
http://xss-xss.nm.ru/anti/Crackme1.RAR
Взял из журнала хакер тока не помню какой номер..
Пока всё..)
Продолжения скоро будет..)))