0Pricing
Cyber Security Academy · 강의

리버스 엔지니어링을 위한 x86/x64 어셈블리 핵심

MOV, CMP, JNE, CALL, RET를 읽고 레지스터와 스택을 통한 데이터 흐름을 추적합니다.

리버스 엔지니어링을 위한 x86/x64 어셈블리 핵심은(는) CoddyKit의 무료 Cyber Security Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Cyber Security Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Cyber Security Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

리버스 엔지니어링에서 어셈블리를 사용하는 이유

Ghidra의 디컴파일러는 유용하지만 완벽하지 않습니다 — 일부 구문을 놓치고, 형식을 잘못 추론하며, 난독화된 코드를 디컴파일하지 못합니다. 어셈블리를 직접 읽으면 정확한 실행 내용을 확인할 수 있습니다. 리버스 엔지니어는 어셈블리를 작성할 필요 없이 읽을 줄 알아야 합니다.

레지스터

x86-64 주요 레지스터:

  • RAX — 누산기, 반환 값
  • RBX, RCX, RDX — 범용 레지스터
  • RSI, RDI — 원본/대상 인덱스, 첫 번째/두 번째 함수 인수
  • RSP — 스택 포인터
  • RBP — 베이스 포인터(스택 프레임)
  • RIP — 명령어 포인터

함수 호출 규약(x64 Linux)

인수는 레지스터로 전달됩니다(System V AMD64 ABI):

  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를 감소시키고 0이 아니면 점프합니다

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 및 암호 상수

알고리즘을 식별할 수 있는 숫자 상자를 찾습니다:

  • AES S-box: 첫 번째 바이트 63 7C 77 7B...
  • SHA-256 초기 해시: 0x6a09e667, 0xbb67ae85...
  • MD5: 0xd76aa478

이러한 상수를 인식하면 암호 함수를 즉시 식별할 수 있습니다.

빠른 확인: x64 어셈블리

x86-64 System V ABI에서 함수 호출의 첫 번째 인수를 저장하는 레지스터는 무엇인가요?

강의 요약

x86-64 리버스 엔지니어링에는 주요 레지스터(RAX, RDI, RSI, RSP, RIP), 함수 호출 규약(RDI/RSI/RDX 등에 인수 전달), 일반적인 패턴(프롤로그, 반복문, 비교, 점프 테이블)을 아는 것이 필요합니다. 어셈블리를 작성할 필요는 없고 읽기만 하면 됩니다. 코드에 있는 암호 상수를 통해 바이너리를 실행하지 않고도 알고리즘을 식별할 수 있습니다.

자주 묻는 질문

“리버스 엔지니어링을 위한 x86/x64 어셈블리 핵심” 강의는 무료인가요?

네 — “리버스 엔지니어링을 위한 x86/x64 어셈블리 핵심” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Cyber Security Academy 강의 전체를 잠금 해제할 수 있습니다. Cyber Security Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“리버스 엔지니어링을 위한 x86/x64 어셈블리 핵심”에서 뭘 배우나요?

MOV, CMP, JNE, CALL, RET를 읽고 레지스터와 스택을 통한 데이터 흐름을 추적합니다. 브라우저에서 직접 실행하는 실습 코드로 Cyber Security Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Cyber Security Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Cyber Security Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.

“리버스 엔지니어링을 위한 x86/x64 어셈블리 핵심” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Cyber Security Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Cyber Security Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. Ghidra: 바이너리 탐색과 주석 작성
  2. 리버스 엔지니어링을 위한 x86/x64 어셈블리 핵심
  3. GDB와 pwndbg를 사용한 동적 분석
  4. 난독화 해제와 분석 방해 기법
← Cyber Security Academy(으)로 돌아가기