Register Shuffling

El register shuffling aleatoriza la forma en que tu código compilado utiliza los registros del procesador, rompiendo los patrones en los que se apoyan las herramientas de análisis automatizado.

  • AppleiOS
TL;DR

El register shuffling cambia cómo tu código compilado asigna los registros del procesador, sin cambiar lo que hace. Las herramientas de análisis automatizado y los pattern matchers se apoyan en un uso consistente de los registros para reconocer código. El shuffling elimina esa consistencia, así que las firmas y los patrones dejan de coincidir.

Definición

¿Qué es el register shuffling?

El register shuffling es una técnica de ofuscación de bajo nivel que aleatoriza la asignación de valores a los registros del procesador en el código compilado.

Los registros son los pequeños huecos de almacenamiento rápido que utiliza un procesador mientras ejecuta código. Un compilador normalmente los asigna de formas predecibles, y las herramientas de análisis aprovechan esa previsibilidad para reconocer funciones y casar patrones conocidos.

El register shuffling rompe esa previsibilidad. El código hace exactamente el mismo trabajo, pero la asignación de registros está aleatorizada, así que las herramientas basadas en firmas y los pattern matchers ya no reconocen lo que están mirando.

Mecanismo

Cómo funciona el register shuffling

El register shuffling actúa durante la compilación del binario:

  • Asignación aleatorizada. Los valores se asignan a los registros en un orden no estándar y aleatorizado.

  • Ruptura de patrones. Los patrones de uso de registros reconocibles que identifican funciones quedan rotos.

  • Preservación del comportamiento. El shuffling se verifica para que la lógica ejecutada no cambie.

El procesador hace el mismo trabajo, pero el código deja de coincidir con las huellas conocidas.

Ejemplo

Ejemplo de register shuffling

La misma aritmética, compilada con y sin register shuffling. El procesador produce el mismo resultado en ambos casos.

Original

El código compilado usa los registros en el orden predecible que produce un compilador. Las herramientas de pattern matching reconocen funciones y código conocido.

Shuffled

El mismo código usa los registros en un orden aleatorizado. El comportamiento es idéntico, pero los patrones reconocibles han desaparecido.

Original
mov  x0, #5
mov  x1, #10
add  x0, x0, x1
ret
Shuffled
mov  x14, #5
mov  x9, #10
add  x14, x14, x9
mov  x0, x14
ret

Casos de uso

Cuándo usar register shuffling

El register shuffling es especialmente útil cuando tu aplicación:

  • Tiene que resistir herramientas de análisis automatizado basadas en firmas.
  • Ya tiene ofuscación de alto nivel aplicada y necesita profundidad a nivel binario.
  • Contiene código que no quieres que se case con huellas conocidas.

Combina bien con instruction substitution y control flow obfuscation para oscurecer el código en todos los niveles, desde la estructura hasta el uso de registros.

Disponibilidad por plataforma

Register shuffling y la plataforma iOS

  • iOS

    Register shuffling aplicado durante la compilación del binario. Es una protección de bajo nivel específica para binarios compilados.

Preguntas frecuentes

¿Qué es el register shuffling?
El register shuffling es una técnica de ofuscación de bajo nivel que aleatoriza cómo el código compilado utiliza los registros del procesador, rompiendo los patrones en los que se apoyan las herramientas de análisis basadas en firmas para reconocer código.
¿El register shuffling afecta al rendimiento?
El impacto es mínimo. El código hace el mismo trabajo con una asignación de registros distinta, así que el coste en runtime apenas cambia.
¿El register shuffling cambia el comportamiento?
No. El shuffling se verifica para preservar la lógica ejecutada exactamente.
¿De qué protege el register shuffling?
Protege frente al análisis automatizado basado en firmas y al pattern matching que identifica funciones por su uso de registros.
¿Qué plataformas soportan el register shuffling?
ByteHide Shield ofrece register shuffling para iOS.
+10.000 desarrolladores y empresas protegen sus aplicaciones con ByteHide

Protege tu aplicación con
ByteHide Shield

El register shuffling es una de las más de 20 protecciones de ByteHide Shield. Aplícalo a tu aplicación iOS.

ByteHide runtime dashboard showing live threat monitoring and protection metrics