0Pricing
Cyber Security Academy · Lección

Fundamentos de ensamblador x86/x64 para reversing

Lea MOV, CMP, JNE, CALL y RET, y siga el flujo de datos a través de los registros y la pila.

Fundamentos de ensamblador x86/x64 para reversing es una lección gratuita de Cyber Security Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Cyber Security Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Cyber Security Academy incluye 4 lecciones en total.

Por qué usar ensamblador en ingeniería inversa

El decompilador de Ghidra resulta útil, pero no es perfecto: omite algunas construcciones, infiere incorrectamente algunos tipos y no puede decompilar código ofuscado. Leer directamente el ensamblador proporciona la verdad objetiva. Quien realiza ingeniería inversa necesita leer ensamblador, no escribirlo.

Registros

Registros clave de x86-64:

  • RAX — acumulador y valores de retorno
  • RBX, RCX, RDX — de propósito general
  • RSI, RDI — índices de origen/destino y primer/segundo argumento de función
  • RSP — puntero de pila
  • RBP — puntero base (marco de pila)
  • RIP — puntero de instrucción

Convención de llamada de funciones (x64 Linux)

Los argumentos se pasan en registros (ABI System V AMD64):

  1. RDI
  2. RSI
  3. RDX
  4. RCX
  5. R8
  6. R9

El valor de retorno se almacena en RAX. Los argumentos adicionales se apilan.

Instrucciones esenciales

Instrucciones fundamentales que debe reconocer:

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

Saltos condicionales

Comparaciones y saltos:

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

Leer una función sencilla

Reconocimiento de patrones habituales:

; 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:
...

Reconocer operaciones con cadenas

Operaciones habituales con cadenas y memoria:

; 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

Configuración y desmontaje del marco de pila

Toda función comienza y termina con:

; 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

Identificar bucles

Bucles en el desensamblado:

  • Un salto hacia atrás (a una dirección inferior) indica un bucle
  • Un contador en un registro que se decrementa con dec/sub
  • La instrucción loop decrementa RCX y salta si no es cero

Leer sentencias switch

Las sentencias switch suelen compilarse como tablas de saltos:

; 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

Constantes SIMD y criptográficas

Busque constantes numéricas que identifiquen algoritmos:

  • S-box de AES: primeros bytes 63 7C 77 7B...
  • Hash inicial de SHA-256: 0x6a09e667, 0xbb67ae85...
  • MD5: 0xd76aa478

Reconocer estas constantes identifica al instante las funciones criptográficas.

Comprobación rápida: ensamblador x64

En la ABI System V de x86-64, ¿qué registro contiene el primer argumento de una llamada a función?

Resumen de la lección

La ingeniería inversa de x86-64 requiere conocer los registros clave (RAX, RDI, RSI, RSP, RIP), las convenciones de llamada de funciones (argumentos en RDI/RSI/RDX...) y los patrones habituales (prólogos, bucles, comparaciones y tablas de saltos). No necesita escribir ensamblador; solo leerlo. Las constantes criptográficas del código identifican algoritmos sin ejecutar el binario.

Preguntas frecuentes

¿La lección «Fundamentos de ensamblador x86/x64 para reversing» es gratis?

Sí — el texto completo de «Fundamentos de ensamblador x86/x64 para reversing» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Cyber Security Academy, actualiza a CoddyKit PRO. El curso de Cyber Security Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Fundamentos de ensamblador x86/x64 para reversing»?

Lea MOV, CMP, JNE, CALL y RET, y siga el flujo de datos a través de los registros y la pila. Practicas Cyber Security Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Cyber Security Academy?

No se requiere experiencia previa. Cyber Security Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.

¿Cuánto tiempo toma la lección «Fundamentos de ensamblador x86/x64 para reversing»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Cyber Security Academy?

Sí. Cada lección de Cyber Security Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Ghidra: navegación y anotación de binarios
  2. Fundamentos de ensamblador x86/x64 para reversing
  3. Análisis dinámico con GDB y pwndbg
  4. Desofuscación y técnicas anti análisis
← Volver a Cyber Security Academy