Крэкинг (вершина айсберга)

Опубликованно: 25/02/2008 |Комментарии: 0 | Показы: 4,917 |

Здравствуй читатель!
Если вы читаете эту статью значит, вам надоело часами искать кряк или серийник для новой проги, или вообще ждать пока он выйдет. В этом (как я надеюсь) цикле статей я постараюсь описать способы "исследования защиты программ", и помочь вам не ждать милости крэкеров, а самим ломать программы. В первой статье я опишу теорию и некоторые термины, а потом уже приступим к практике в следующих статьях. И так приступим!
(Несколько абзацев про асм)
Assembler - (в народе асм) низкоуровневый язык программирования (это значит что он наиболее приближен к машинным кодам т.е. один оператор (команда) асма соответствуют одному машинному коду).Из за этого программы на асме получаются максимально быстрые и маленькие. Очень часть на ассемблере пишутся критические (которые на других языках очень медленно выполняются) области кода, а также драйвера. Так, например в с++ (язык высокого уровня) есть поддержка ассемблерных вставок (т.е. к основному коду на с++ можно ещё вставить код на асме).
Наверно вы спросите, а зачем нам вообще этот асм?
С радостью отвечу. Дело в том, что любую скомпилированную программу (.exe) можно представить в виде языка ассемблера. Именно его вы увидите при разборе программы, а не тот язык, на котором она была написана (конечно, сейчас существуют программы, которые распознаю код, на котором было написано приложение, но в большинстве своём они мало эффективны).
Итак, приступим собственно к асму. Если вы совсем не знакомы с программированием, вам покажется это сложным, но со временем сами будете удивляться насколько всё легко (ну примерно как я сейчас :).
(Долго думал с чего начать решил начать таки с регистров.)
Регистр – ячейка в памяти предназначенная для временного хранения информации. В современных ОС применяются 32-разрядные регистры.
Основных регистров не так уж много, это:
EAX – аккумулятор
EBX – база
EDX – регистр данных
ECX – счетчик
Основными я их назвал (уж пусть простят меня гуру асма), потому что они могут использоваться для любых целей (хранение данных, результаты разных функций… и т.д.)
Ещё четыре регистра (ESI, EBP, EDI, ESP) используются в более узком кругу (напр. без ESI,EDI не обойтись в строковых операциях), но они также не маловажны.
Младшие 16-битные части этих регистров применяются как самостоятельные регистры (во загнул… постараюсь объяснить)…
(Немного истории)
Дело в том что во времена великого DOS’а не существовало 32-разрядных процессоров и уж тем более 64-разрядных, камни были 16-разрядные. Соответственно и регистры все были 16-разрядными, и догадайтесь, как они назывались?
Нет, не хз. Назывались они AX, BX, CX, DX… Соответственно с появлением 32-разрядных процов добавили часть «Е» и они стали 32-разрядными. Но обращение то осталось! И теперь регистры делятся на меньшую 16-битную часть (AX, BX, CX, DX, SI, BP, DI, SP) и большую.
(Понятие про стек)
Стек – это область в памяти в которую помещаются данные и параметры для хранения.
Данные в стек кладутся довольно специфически. Попробую объяснить на пальцах.
Допустим, стек - это стол, у вас возле стола лежит кипа бумаг – это данные. И вам надо переместит бумагу по одному листку в такую же кипу на стол. Соответственно вы будете брать один листок, и класть на стол, далее ещё один листок, но второй листок вы уже должны будете класть поверх первого, третий поверх второго… и так далее. Так же и в стеке данные ложатся как бы друг на друга. И доставать их из стека тоже нужно в обратном порядке.
Примеры работы со стеком я приведу в разделе операторов.
(Операторы)
Оператор – это символическое название команды понятное человеку. С помощью операторов производятся различные операции с памятью.
Перечислю те, что понадобятся знать для крэкинга (после точки запятой буду расставлять комментарии при компиляции (сборки) программы эти комментарии не учитываются):

MOV – (эквивалентный операторам присвоения в языках высокого уровня), этот оператор будет часто вам встречаться. С помощью него и заносятся данные в регистры или переменные. Она заносит данные из источника в приемник, при этом источник не меняется.
MOV EAX, 1 ; теперь в EAX находится число 1
MOV EBX, EAX ; теперь и в EAX и EBX находится число 1
MOV peremen, 15 ; теперь в переменной peremen число 15
В первой строке EAX был приемником, а 1 – источником. Во второй EBX – приемник, EAX – источник. Ну и в последней строке peremen – приемник, 15 – источник.
CALL – вызов процедуры. Процедура может быть, как описана в теле программы, так и находится в подключаемой DLL. После отработке процедуры управление возвращается на команду идущую после CALL. В основном процедуры вызываются с помощью меток:
(Метки)
Метка – это символическая ссылка, которой обозначается начало и конец процедуры. При компиляции метки заменяются адресом, на которой начинается процедура. Метки в основном сделаны для удобства программиста ведь не надо вычислять каждый адрес, а просто обратится к метки. Название метки можно давать любое кроме имен зарезервированные компилятором (например, название оператора). Конец метки обозначается оператором end.
Например:
start: ; начало метки
end start ; конец метки
А теперь пример оператора call:
start: mov EAX, 15
mov EBX, EAX ; это вы уже знаете
end start
vuzov: call start ; а вот это и есть вызов процедуры
mov assa, EBX ; после процедуры в EBX будет 15, которые и заносятся
в переменную assa.
end vuzov
PUSH – оператор который «толкает» данные в стек. Именно этим оператором заносятся данные в стек.
POP – оператор которым данные извлекаются из стека. Например, функция нам возвращает число после отработки в регистр EAX (пусть это будет 20). И для того чтоб сохранить его и в дальнейшем использовать толкаем его в стек (PUSH EAX), после работаем с регистром EAX, так как нам нужно, а когда вновь понадобится число, которое возвратила процедура извлекаем его из стека. Главное в стеке следить за правильностью извлечения данных, и не запутаться.
CMP – функция которая вычитает из операнда-получатеся операнд-отправитель. Фактически самый важный оператор для крэкера поскольку именно им обычно сравниваются ключ который сгенерила прога и который ввели при регистрации. Когда сравниваются числа без знака, флаги нуля (ZF) и переноса (CF) устанавливаются командой CMP в таком порядке:

CF ZF
Получательотправитель 0 0
JMP – оператор который заставляет процессор продолжать выполнение команд с нового места в программе. Относится к группе безусловных переходов.
JNZ – оператор который относится к группе условных переходов т.е. выполняется только при определённом условии. Это условие «если не равно». Например:
CMP EAX, 0 ; если EAX не равно 0 то
JNZ START ; прыгаем на метку START.
Ну, вот вроде основные операторы изложил, думаю, этот необходимый минимум должен знать каждый крэкер, ну а если хотите стать хорошим «исследователем» советую вам хорошо выучить ассемблер и уметь программировать на нём.
Теперь приступаем непосредственно к терминам крэкинга.
(Тулзы)
Отладчик – основной инструмент, именно та прога в которой вы увидите ассемблерный код разбираемой программы. Современные отладчики включают в себя множество функций, такие как: пошаговая трассировка, бряки и много другого. Также отладчики показывают содержание регистров и состояние флагов. Я назвал две основные функции которые вам понадобятся, теперь разберём их.
Пошаговая трассировка – функция, при которой выполнение программы выполняется шаг за шагом, т.е. выполняется одна строка программы и она останавливается, при нажатии кнопки выполняется следующая строка. Фактически вы управляете выполнение программы.
Брейкпоинт (в народе бряк, ещё его называют «точка останова», но мне это название как-то не по душе) – представьте, что вам нужно остановится в каком-то месте программы, например на двухсотой строке. Не нажимать же 200 раз по кнопке пошаговой трассировки (это в лучшем случае). Как же это сделать? Всё просто, надо поставить бряк на двухсотую строку и запустить программу на выполнение, отладчик остановится на той строке, которая вам нужна автоматически.
На данный момент лучшими отладчиками считаются OllyDbg (Оля) и SoftIce (айс, сайс). Лично я предпочитаю Олю, поскольку она довольно проста в обращении, а функциональностью не уступает сайсу, все примеры я буду приводить в ней. Достать её в сети просто и весит она метров пять, шесть (в зависимости от сборки).

Дизассемблер – тоже переводит код программы в ассемблерный. Самым лучшим считается IDA, но я пользуюсь Win32Dasm (скачать тоже не проблема).
Пакер – программа для сжатия кода, тем самый, уменьшая размер. Например, написали вы программу весом 20 кб, после сжатия она весит уже 10 кб (это примерно, всё зависит от языка, на котором написана программа и от стиля программиста). Основными считаются UPX и платный ASpack (хоть и платный, а жмёт хуже UPX). Назвал я всего два, но их гораздо больше.
Криптор – программа, которая тоже сжимает код, но её основное направление это зашифровать код программы от крэкеров. Основной сейчас ASprotect. Также как и пакеров протекторов гораздо больше чем я назвал.
Анализатор – определяет, чем упакована программа. Часто запакована программа или нет, можно определить на глаз в отладчике, но это приходит с опытом, а пока пользуйтесь анализаторами. Лучший, это PEID (Также их множество, я основываюсь на собственном имхо).
Распаковщик – допустим, пейд показал, что программа запакована UPX. UPX распаковывается самим же UPX (т.е. ищем в Интернете программу для запаковки в UPX и ей распаковываем). Ну а если показал ASprotect, тогда есть два варианта: 1. Это распаковывать вручную. 2. Это скачать автоматический распаковщик, который сделали добрые люди. Как вы понимаете тут каждый случай особенный, поэтому ничего не советую.
Вот и весь начальный набор, также есть много тулз для ручной распаковки и прочего, но я думаю для новичка они пока не к чему. Так что до следующей статьи, в которой сломаем первую прогу и распакуем файл, запакованный UPX’сом.
По всем замечаниям, предложениям обращаться на аську.
P.S.: Заранее извиняюсь за грамматические ошибки.
Автор: Filin
ICQ: 226-300-300
Автор не несет ответсвенности за вред нанесенный после прочтения этой статьи. Статья в чисто ознакомительных целях.

Источник статьи: http://www.rusarticles.com/bezopasnost-statya/kreking-vershina-ajsberga-341942.html

Обсудить статью

Каждый день тысячи людей в Интернете сталкиваются с вредоносными программами разных типов. В этой статье вы узнаете виды вредоносного ПО, как они действуют и как защититься от них.

От: Grig OKl Компьютеры> Безопасностьl 21/06/2013 lПоказы: 355

Первое - интернет-магазины. Просто себе магазин, к которым у нас уже все привыкли, где за небольшие деньги посетитель может приобрести новый фильм или последний альбом любимой группы.

От: Mikosl Компьютеры> Безопасностьl 19/06/2013 lПоказы: 95
Kris Norton

Terminator – система, позволяющая в экстренной ситуации быстро, качественно и не подходя к компьютеру уничтожить нежелательную информацию на дисках любого компьютера локальной сети. Удаление информации может быть активировано с радио брелока, Web командой, командой по локальной сети, автоматически по событиям Windows, по событиям пользователя, по таймеру и т.д. Помимо удаления информации, система может обеспечить: выключение или перезагрузку компьютера, автоматическую очистку дисков ...

От: Kris Nortonl Компьютеры> Безопасностьl 06/05/2013 lПоказы: 164
Vladimir Grigor'ev

При поломке компьютера всегда встает вопрос обратится к знакомому, который за бутылку пива, якобы, отремонтирует компьютер или обратится за профессиональной компьютерной помощью. В этой статье рассматривается довольно типичная ситуация, наверняка каждый сталкивался с ней или кому то еще предстоит с этим столкнуться!

От: Vladimir Grigor'evl Компьютеры> Безопасностьl 27/04/2013 lПоказы: 174

В этой статье я хочу сделать обзор бесплатных антивирусов и дать рекомендации по тому, какой же бесплатный антивирус скачать для защиты компьютера.

От: av-freel Компьютеры> Безопасностьl 23/04/2013 lПоказы: 466

В последние несколько лет IT-специалисты всё более активно обсуждают системы контроля физического доступа. Возникла дискуссия о необходимости сближения физического и интеллектуального доступов. IТ-менеджеры использует различные электронные устройства, чтобы защитить интеллектуальное имущество; руководители охраны же используют методы контроля с помощью физических систем доступа, чтобы обезопасить материальные ценности, например оборудование.

От: Романl Компьютеры> Безопасностьl 05/04/2013 lПоказы: 99
Nikita Pelipenko

Avast, Nod32, Касперский, Avira, Notron, Microsoft security. Какой же действительно защитит ваш компьютер?

От: Nikita Pelipenkol Компьютеры> Безопасностьl 09/03/2013 lПоказы: 136

обзор бесплатного программного обеспечения способного справиться с новейшими угрозами безопасности персонального компьютера и конфиденциальности ваших данных

От: softextentl Компьютеры> Безопасностьl 18/02/2013 lПоказы: 190

Это просто знания человека и мои размышления так что, возможно, кто-то узнает что-то новое, а может и нет. Не стоит воспринимать данную информацию слишком серьёзно ведь это только моё мнение. И как говорят мастера кунг-фу: «Всё что узнаешь, проверяй, даже если это говорит самый авторитетный человек в мире!»

От: Filinl Образованиеl 09/01/2008 lПоказы: 12,094

Итак, сегодня я вам расскажу о результатах моего тестирования программ для восстановления файлов. После этой статьи вы сможете оценить, возможно, ли восстановить файлы с винчестера или нет.

От: Filinl Компьютеры> Программыl 15/12/2006 lПоказы: 51,554 lКомментарии: 1
Блок автора
Категории статей
Quantcast