Cyber Security Academy · Урок

Основы ассемблера x86/x64 для реверс-инженеров

Читайте MOV, CMP, JNE, CALL и RET, отслеживая поток данных через регистры и стек.

Урок 2 из 413 шагов

«Основы ассемблера 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):

  1. RDI
  2. RSI
  3. RDX
  4. RCX
  5. R8
  6. 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 — локальная установка не требуется.

Все уроки этого курса

  1. Ghidra: навигация и аннотирование двоичных файлов
  2. Основы ассемблера x86/x64 для реверс-инженеров
  3. Динамический анализ с GDB и pwndbg
  4. Деобфускация и методы противодействия анализу
← Назад к Cyber Security Academy