Основы ассемблера x86/x64 для реверс-инженеров
Читайте MOV, CMP, JNE, CALL и RET, отслеживая поток данных через регистры и стек.
«Основы ассемблера x86/x64 для реверс-инженеров» — бесплатный урок Cyber Security Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Cyber Security Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Cyber Security Academy содержит 4 уроков всего.
Зачем реверс-инженерам нужен ассемблер
Декомпилятор Ghidra полезен, но несовершенен: он пропускает некоторые конструкции, неправильно определяет типы и не может декомпилировать обфусцированный код. Непосредственное чтение ассемблера даёт достоверную картину. Реверс-инженеру нужно уметь читать ассемблер, а не писать его.
Регистры
Основные регистры x86-64:
- RAX — аккумулятор, возвращаемые значения
- RBX, RCX, RDX — регистры общего назначения
- RSI, RDI — индексы источника и назначения, первый и второй аргументы функции
- RSP — указатель стека
- RBP — указатель базового адреса (кадра стека)
- RIP — указатель инструкций
Соглашение о вызове функций (x64 Linux)
Аргументы передаются через регистры (ABI System V AMD64):
- RDI
- RSI
- RDX
- RCX
- R8
- R9
Возвращаемое значение находится в RAX. Дополнительные аргументы помещаются в стек.
Основные инструкции
Основные инструкции, которые нужно распознавать:
mov rax, rbx ; copy rbx to rax
push rax ; push rax onto stack
pop rbx ; pop top of stack into rbx
add rax, 8 ; rax = rax + 8
sub rsp, 0x20 ; allocate 32 bytes on stack
call 0x401234 ; call function at address
ret ; return to caller
lea rax, [rbp-0x10] ; load address of local varУсловные переходы
Сравнения и ветвления:
cmp rax, 0 ; set flags based on rax - 0
test rax, rax ; test rax & rax (check if zero)
jz 0x401234 ; jump if zero
jnz 0x401234 ; jump if not zero
jl 0x401234 ; jump if less (signed)
jge 0x401234 ; jump if >= (signed)
je 0x401234 ; jump if equalЧтение простой функции
Распознавание распространённых шаблонов:
; if (x == 0) return 1;
mov eax, [rbp-4] ; load x
test eax, eax ; x == 0?
jnz .notZero ; if not zero, skip
mov eax, 1 ; return value = 1
ret
.notZero:
...Распознавание операций со строками
Распространённые операции со строками и памятью:
; memcpy(dest, src, n):
; rdi=dest, rsi=src, rdx=n
rep movsb ; copy RCX bytes from RSI to RDI
; strlen-like loop:
.loop:
cmp byte [rsi], 0 ; check for null terminator
je .done
inc rsi
jmp .loopСоздание и удаление кадра стека
Каждая функция начинается и завершается следующими действиями:
; Prologue:
push rbp ; save caller frame
mov rbp, rsp ; set up new frame
sub rsp, 0x30 ; allocate local vars
; Epilogue:
leave ; mov rsp, rbp; pop rbp
retРаспознавание циклов
Циклы в дизассемблированном коде:
- Обратный переход (к меньшему адресу) указывает на цикл
- Счётчик в регистре уменьшается с помощью
dec/sub - Инструкция
loopуменьшает RCX и выполняет переход, если значение не равно нулю
Чтение операторов switch
Операторы switch часто компилируются в таблицы переходов:
; Jump table pattern:
cmp eax, 5 ; check if case > max
ja .default ; jump to default
lea rcx, [jump_table]
mov rax, [rcx + rax*8] ; index into table
jmp rax ; jump to case handlerКонстанты SIMD и криптографии
Ищите числовые константы, по которым можно определить алгоритмы:
- S-блок AES: первые байты
63 7C 77 7B... - Начальный хеш SHA-256:
0x6a09e667, 0xbb67ae85... - MD5:
0xd76aa478
Распознавание этих констант позволяет сразу определить криптографические функции.
Быстрая проверка: ассемблер x64
В ABI System V для x86-64 какой регистр содержит первый аргумент вызова функции?
Итоги урока
Для реверс-инжиниринга x86-64 нужно знать основные регистры (RAX, RDI, RSI, RSP, RIP), соглашения о вызове функций (аргументы в RDI/RSI/RDX...) и распространённые шаблоны (прологи, циклы, сравнения, таблицы переходов). Вам не нужно писать ассемблер — достаточно уметь его читать. Криптографические константы в коде позволяют определить алгоритмы без запуска двоичного файла.
Изучай Cyber Security Academy с ИИ-репетитором — бесплатно
Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.
- Курсы
- 76
- Уроки
- 303
Часто задаваемые вопросы
Урок «Основы ассемблера x86/x64 для реверс-инженеров» бесплатный?
Да — полный текст урока «Основы ассемблера x86/x64 для реверс-инженеров» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Cyber Security Academy, подпишись на CoddyKit PRO. Курс Cyber Security Academy содержит 4 уроков всего.
Чему я научусь в уроке «Основы ассемблера x86/x64 для реверс-инженеров»?
Читайте MOV, CMP, JNE, CALL и RET, отслеживая поток данных через регистры и стек. Ты практикуешь Cyber Security Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Cyber Security Academy?
Предыдущий опыт не требуется. Cyber Security Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Основы ассемблера x86/x64 для реверс-инженеров»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Cyber Security Academy?
Да. Каждый урок Cyber Security Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Ghidra: навигация и аннотирование двоичных файлов
- Основы ассемблера x86/x64 для реверс-инженеров
- Динамический анализ с GDB и pwndbg
- Деобфускация и методы противодействия анализу