Крекинг - первые шаги — HackZona.Ru

Крекинг - первые шаги

Крекинг - первые шаги

Тип статьи:
Со старой ХакЗоны.
Источник:
Итак, начнём с того, что давным-давно люди сделали процессор, который работал только с битами, программы писались в машинных кодах, что-то типа: 0010010010 и т.д. Позже программисты придумали HEX-коды, что-то промежуточное между тем, что понятно человек и процессору, то есть что-то близкое к машинным кодам, но более понятное программисту. Позже были придуманы компиляторы. Это программы которые читали человеческие слова и переводили их в биты(машинные кода). То есть с помощью компиляторов из исходного кода получался исполняемый файл. Это были первые компиляторы ассемблера. Позже начали появляться всякие: basic, pascal, C, C++, Delphi и т.д.
Любую программу можно представить в виде ассемблерного кода, этим занимаются программы дизассемблеры, про которые мы поговорим в следующей статье. А пока я хотел — бы рассказать основы ассемблера (основные команды и т.д.), поэтому вы должны хоть чуть-чуть понимать в программирование иначе материал будет очень трудный для восприятия.

Регистры:
Регистры это места в оперативной памяти, где могут храниться какие-либо данные, можно сказать что регистры это некие переменные. Регистры, которые важны для нас это: EAX, EBX, ECX, EDX. Буква E вначале имени регистра означает, что он является 32-разрядным.

Push и Pop:
Команда Push используется для помещения адреса в стэк.
Команда Pop обратная команде Push.

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

0xFFFFFFFF Начало стэка.
0xFFFFFFFC Занесли некоторые данные.
0xFFFFFFF8 Занесли некоторые данные.
0xFFFFFFF4 Занесли некоторые данные.
0xFFFFFFF0 Занесли некоторые данные.
и т.д.
Стэк растёт к меньшему адресу.

Рассмотрим пример:
PUSH EAX — мы положили в стэк верхним значение регистра EAX
POP EAX — мы вытащили со стэка последние положенные данные.

Call:
Команда Call выполняет функцию по нужному адресу.
Пример: Call: 10284354, будет выполнена функция по адресу 10284354.

RET:
Команда RET используется для возврата из функции.
Например, нам нужно выполнить какую либо функцию, а потом вернутся на место где она вызывалась и продолжить выполнение программы:

Mov:
Копирует байт или значение слова из источника в конечную точку.
Пример: Mov EAX, 00000002 копирует в регистр EAX, значение: 2
Mov EAX, EBX копирует в регистр EAX значение регистра EBX.

CMP:
ОЧЕНЬ важная программа для взломщиков, используется в программе для сравнения чего либо (например, серийного номера :) ) После сравнения устанавливается флажок (0 или 1). Флажки очень похожи на PASCALевские переменные типа: BOOLEAN, которые принимают значения TRUE и FALSE.
Пример: CMP EAX, 123 сравнение значение регистра EAX со значением 123, и если они равны флажок устанавливается в значение: 1(или TRUE, как кому нравится).

JMP:
Команда эквивалентна Pascalевскому GOTO, переход в заданный адрес.
Пример: JMP 30385678, переход по адресу: 30385678.

JMP безусловный переход.

Имеются некоторые разновидности этой программы:
JZ — Переход, если флажок Z установлен.
JNZ — Переход, если флажок Z не установлен.
Так же существуют другие команды перехода: JNE, JE, JG и т.д.

Рассмотрим пример:
CMP EAX, 123456 — сравнить реальный номер, содержащийся в регистре EAX и нами введенный.
JNE EXIT — если они Не Равны, тогда выходим.

NOP:
Команда NOP не выполняет никаких действий.


Я постарался дать основные знания ассемблера, и дать их в понятной форме..
Нравится
Не нравится

12 комментариев

19:59
4, таких статей
19:59
десятки (сорри за два сообщения)
02:46
>>Регистры это места в оперативной памяти
лол.
Автор читай внимательно:
_http://ru.wikipedia.org/wiki/Регистр процессора
Дальше читать статью пропало всякое желание.
хз как это прошло редактора.
07:34
Остается добавить, что большинство современного ПО вообще не трогает сегментные регистры - операционная система дает им один-единственный сегмент, которые начинаются с нулевого адреса и заканчиваются 2^32 - 1 (таким образом охватывая всю возможную оперативную память) - и загружает этими данными регистры CS, DS, SS ES.
Den
17:17
Если кто-то не изучал аппаратку или организацию эвм в вузе, то врятли будет толк. а если изучал - посмется...
19:21
говно
20:52
Неверные формулировки.
регистры процесора, как уже говорилость ,push-помещает в стек значение, а не только адрес, cmp не програма , а команда. Переходы делятся на условные и без условные. Для ассемблера слишком всё поверхностно, одной статьёй не обьяснишь.
19:51
говно и вообще такую тему не уместить в 1 статью
22:58
ппц, такую тему в юмор надо..
01:39
каки
02:39
вот с керни я абсолютно прав!!это такая огромная тема так что одна статья это не что..к тому же с такие содержанием..
17:36
Слишком уж сжато.
много не понятного. но в целом супер!