Reference Hiding

El reference hiding oculta las llamadas a métodos, campos y APIs de tu código, así un atacante no puede mapear con qué se conecta tu aplicación ni de qué depende.

  • .NET.NET
  • AndroidAndroid
  • AppleiOS
TL;DR

El reference hiding oculta las llamadas que hace tu código a métodos, campos y APIs del sistema. En lugar de referencias directas y visibles, las llamadas se enrutan a través de indirección codificada o de proxies generados. El análisis estático ya no puede construir un mapa claro de lo que hace tu aplicación ni de qué APIs usa.

Definición

¿Qué es el reference hiding?

El reference hiding es una técnica que oculta las referencias que hace una aplicación: las llamadas a sus propios métodos y campos, y las llamadas a APIs del sistema o del framework.

Cuando un atacante analiza una aplicación de forma estática, las referencias son el mapa. Ver qué APIs del sistema se llaman y cómo se conectan los métodos internos le dice lo que hace la aplicación sin necesidad de ejecutarla.

El reference hiding elimina ese mapa. Las llamadas se codifican, se redirigen mediante proxies o se resuelven de forma indirecta, así una vista estática del código deja de revelar las referencias que hay detrás. Esta protección unifica lo que se llama call hiding en .NET, API hiding en iOS y reference proxy en Android.

Mecanismo

Cómo funciona el reference hiding

El reference hiding aplica varias técnicas de indirección:

  • Referencias codificadas. Las llamadas directas a métodos y campos se sustituyen por formas codificadas que se resuelven en runtime.

  • Métodos proxy. Las llamadas se enrutan a través de métodos intermedios generados, así el destino real no es directamente visible.

  • Ocultación de llamadas a APIs. Las referencias a APIs del sistema y del framework se ocultan al análisis estático.

La aplicación llama exactamente a lo que siempre ha llamado. Un analizador estático simplemente no puede verlo con claridad.

Ejemplo

Ejemplo de reference hiding

El mismo flujo de login, antes y después del reference hiding. Se llama a los mismos métodos; el mapa estático de esas llamadas no sobrevive.

Original

El análisis estático lista cada llamada a método y cada API del sistema que usa la aplicación, produciendo un mapa claro de su comportamiento.

Oculto

El mismo análisis solo ve referencias codificadas y llamadas proxy. Los destinos reales se resuelven únicamente en runtime.

Original
var user = userService.GetCurrentUser();
var token = authProvider.GenerateToken(user);
logger.Info($"Issued token for {user.Name}");
Oculto
var user = Invoke<User>(0x4f12, null);
var token = Invoke<string>(0x9a07, new object[] { user });
Invoke<object>(0xb031, new object[] { user.Name });

Casos de uso

Cuándo usar el reference hiding

El reference hiding es especialmente útil cuando tu aplicación:

  • Llama a APIs sensibles del sistema o del framework que no quieres exponer.
  • Tiene una estructura interna que revela cómo se conectan los componentes.
  • Debe resistir el análisis estático que mapea el comportamiento a través de las referencias.

Combina con name obfuscation y control flow obfuscation: los nombres, la estructura y las referencias son todos parte del mapa, y estas protecciones ocultan todo a la vez.

Disponibilidad por plataforma

El reference hiding según la plataforma

  • .NET

    Call hiding, codificando las referencias a métodos y campos.

  • Android

    Reference proxy, redirigiendo las llamadas a través de métodos proxy generados.

  • iOS

    API hiding, ocultando las referencias a las llamadas a APIs del sistema.

Preguntas frecuentes

¿Qué es el reference hiding?
El reference hiding es una técnica que oculta las llamadas a métodos, campos y APIs de tu código enrutándolas mediante indirección codificada o proxies, así el análisis estático no puede mapear lo que hace la aplicación.
¿El reference hiding afecta al rendimiento?
Añade un pequeño sobrecoste por la indirección. El nivel es configurable, así puedes equilibrar protección y velocidad.
¿Cuál es la diferencia entre call hiding, API hiding y reference proxy?
Son la misma protección en plataformas distintas. Call hiding es el nombre en .NET, API hiding en iOS y reference proxy en Android. ByteHide los presenta juntos como reference hiding.
¿El reference hiding cambia el comportamiento?
No. La aplicación llama exactamente a los mismos destinos. Solo cambia la visibilidad de esas llamadas frente al análisis estático.
¿Qué plataformas soportan el reference hiding?
ByteHide Shield ofrece reference hiding para .NET, Android e iOS.
+10.000 desarrolladores y empresas protegen sus aplicaciones con ByteHide

Protege tu aplicación con
ByteHide Shield

El reference hiding es una de las más de 20 protecciones de ByteHide Shield. Aplícalo a tu aplicación .NET, Android o iOS.

ByteHide runtime dashboard showing live threat monitoring and protection metrics