Instruction Substitution

El instruction substitution sustituye las instrucciones simples de tu código por secuencias más largas y funcionalmente idénticas, mucho más difíciles de analizar.

  • AppleiOS
TL;DR

El instruction substitution reescribe operaciones concretas de tu código compilado como equivalentes más complejos. Una suma sencilla pasa a ser una secuencia de operaciones que produce el mismo resultado. El programa se comporta igual, pero el código que lee un atacante ya no coincide con la lógica simple que hay detrás.

Definición

¿Qué es el instruction substitution?

El instruction substitution es una técnica de ofuscación que sustituye instrucciones estándar de bajo nivel por secuencias alternativas que calculan el mismo resultado de una forma más complicada.

Cuando un atacante lee código decompilado o desensamblado, se apoya en reconocer patrones comunes: una comparación simple, una operación aritmética básica. El instruction substitution elimina esos patrones reconocibles.

El resultado es funcionalmente idéntico. Las mismas entradas producen las mismas salidas. Pero la forma evidente de cada operación desaparece, así que el código resiste tanto la lectura manual como el análisis automático por patrones.

Mecanismo

Cómo funciona el instruction substitution

El instruction substitution aplica transformaciones equivalentes:

  • Reescritura aritmética. Las operaciones simples se sustituyen por secuencias más largas que llegan al mismo valor.

  • Reescritura lógica. Las operaciones booleanas y a nivel de bits se expresan mediante combinaciones alternativas.

  • Reescritura de comparaciones. Las comparaciones directas se sustituyen por construcciones que dan el mismo resultado.

Cada sustitución se elige de modo que el resultado sea demostrablemente idéntico, mientras que el patrón de instrucciones no lo es.

Ejemplo

Ejemplo de instruction substitution

La misma función Swift, antes y después del instruction substitution. Ambas devuelven resultados idénticos.

Original

Una operación aritmética sencilla aparece en el desensamblado tal cual se escribió. Un atacante la reconoce al instante.

Ofuscado

La misma operación es ahora una secuencia de pasos equivalentes a nivel de bits. El resultado es idéntico, pero el patrón simple ha desaparecido.

Original
func sum(_ a: Int, _ b: Int) -> Int {
    return a + b
}
Ofuscado
func sum(_ a: Int, _ b: Int) -> Int {
    return (a ^ b) &+ ((a & b) << 1)
}

Casos de uso

Cuándo usar instruction substitution

El instruction substitution es especialmente útil cuando tu aplicación:

  • Contiene cálculos o algoritmos sensibles a nivel de instrucción.
  • Necesita resistir el análisis automatizado basado en patrones.
  • Ya tiene aplicadas protecciones de más alto nivel y necesita profundidad a nivel de instrucción.

Casa bien con control flow obfuscation: uno oculta la estructura, el otro oculta las operaciones individuales.

Disponibilidad por plataforma

Instruction substitution y la plataforma iOS

  • iOS

    Instruction substitution aplicado durante la compilación del binario. En otras plataformas, la profundidad equivalente la proporcionan arithmetic obfuscation y control flow obfuscation.

Preguntas frecuentes

¿Qué es el instruction substitution?
El instruction substitution es una técnica de ofuscación que sustituye instrucciones simples por secuencias más largas y funcionalmente idénticas, eliminando los patrones reconocibles en los que se apoya un atacante al leer código.
¿El instruction substitution afecta al rendimiento?
Añade una pequeña sobrecarga, porque las operaciones sustituidas usan más instrucciones. El impacto se mantiene bajo y es configurable.
¿El instruction substitution cambia lo que hace mi código?
No. Cada sustitución es funcionalmente equivalente, así que el programa produce exactamente los mismos resultados.
¿En qué se diferencia el instruction substitution del arithmetic obfuscation?
El arithmetic obfuscation se centra en las expresiones aritméticas. El instruction substitution es más amplio, sustituye por igual instrucciones aritméticas, lógicas y de comparación.
¿Qué plataformas soportan el instruction substitution?
ByteHide Shield ofrece instruction substitution para iOS.
+10.000 desarrolladores y empresas protegen sus aplicaciones con ByteHide

Protege tu aplicación con
ByteHide Shield

El instruction substitution 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