Saltar a contenido

Resumen de Técnicas de Cifrado de Payloads

Cifrar payloads es una técnica fundamental en malware para evadir detección estática, dificultar el análisis y mantener el código ofuscado hasta el momento de ejecución.

📌 Objetivos comunes:

  • Evadir detección por firmas (AV/EDR).
  • Ocultar shellcode o cadenas sensibles.
  • Ejecutar el payload en memoria de forma segura.

1. 🧪 XOR Encryption

✨ Características:

  • Algoritmo extremadamente simple y reversible.
  • Usa el operador lógico XOR (^) entre cada byte del payload y una clave.
  • Mismo código para cifrar y descifrar.
  • Muy liviano, no requiere WinAPI ni librerías externas.

🔧 Implementaciones vistas:

// XOR con clave de 1 byte
p[i] = p[i] ^ key;

// XOR con clave dinámica
p[i] = p[i] ^ (key + i);

// XOR con array de clave
p[i] = p[i] ^ key[i % key_size];

✅ Ventajas:

  • Fácil de implementar.
  • Bajo consumo de recursos.
  • Puede usarse para ofuscar cadenas embebidas o shellcodes cortos.

❌ Desventajas:

  • Fácilmente detectable por herramientas de análisis.
  • Espacio de clave pequeño si no se hace bien.
  • No criptográficamente seguro.

2. RC4 Encryption

✨ Características:

  • Cifrado de flujo, simétrico y reversible.
  • Más fuerte que XOR, pero deprecated en criptografía moderna.
  • Puede usarse con librerías propias o funciones ocultas de Windows.

🔧 Implementaciones vistas:

Método 1: RC4 manual (con estructura Rc4Context)

  • Inicialización con rc4Init.
  • Cifrado con rc4Cipher.

Método 2: SystemFunction032 (WinAPI, Advapi32.dll)

typedef NTSTATUS (NTAPI *fnSystemFunction032)(USTRING* Data, USTRING* Key);

Método 3: SystemFunction033

  • Idéntico al anterior, distinta función.
  • Misma estructura, diferente nombre para evadir detección.

✅ Ventajas:

  • Rápido y fácil de usar en código real.
  • Implementación con WinAPI es compacta y puede aprovechar funciones del sistema.
  • Ideal para payloads medianos.

❌ Desventajas:

  • Puede dejar rastros en el IAT (advapi32.dll).
  • Puede ser detectable por AV si no se ofusca.
  • Menos seguro que AES.

3. AES Encryption

✨ Características:

  • Algoritmo seguro y moderno, por bloques (128 bits).
  • AES-256-CBC requiere:
    • Clave de 32 bytes.
    • IV (Initialization Vector) de 16 bytes.
  • Requiere padding si el tamaño del payload no es múltiplo de 16.

🔧 Implementaciones vistas:

🔹 Con WinAPI (bcrypt):

Usa funciones como: - BCryptOpenAlgorithmProvider - BCryptEncrypt / BCryptDecrypt - Padding automático con BCRYPT_BLOCK_PADDING.

🔹 Con Tiny-AES-C:

  • Librería portable, sin dependencias.
  • No deja trazas en el IAT.
  • No soporta padding → se requiere implementación manual.

✅ Ventajas:

  • Muy seguro.
  • Compatible con estándares modernos.
  • Ideal para proteger payloads grandes o sensibles.

❌ Desventajas:

  • Requiere más código.
  • Con bcrypt, deja trazas en el IAT.
  • Con Tiny-AES, se deben manejar detalles como padding y detección por firmas.

🧮 Complejidad Temporal

Algoritmo Complejidad Temporal
XOR O(n)
RC4 O(n)
AES O(n)

Nota: n = tamaño del payload en bytes. Todos procesan byte a byte o bloque a bloque.


🧠 Conclusión y Recomendaciones

Objetivo Mejor opción
Ofuscar una string o dato pequeño XOR con clave variable
Cifrar shellcode sin depender de WinAPI Tiny-AES con padding
Cifrar payloads con APIs nativas AES con bcrypt (WinAPI)
Evadir detección de funciones criptográficas RC4 con SystemFunction033
Código muy compacto y rápido RC4 o XOR

Códigos

  • En maldev academy