Directivas de ofuscación por región

Comentarios en tu código fuente que cambian la protección de AfterPack para el código que marcan.

Una directiva es un comentario que cambia la protección de AfterPack para el código que marca. Todo lo demás en el build conserva la configuración que definiste para el programa completo. Las directivas son una función Pro.

Cómo escribir una

Una directiva es un comentario de bloque que empieza por @afterpack. Si va sola en su línea, se aplica a todo lo que sigue hasta el /* @afterpack end */ correspondiente. Si va seguida de código en la misma línea, se aplica al resto de esa línea.

/* @afterpack preset=hard */
function checkLicense(token) {
  return verifySignature(token, PUBLIC_KEY);
}
/* @afterpack end */

const apiKey = /* @afterpack preset=extreme */ "YOUR_SECRET";

Las claves son los nombres con puntos de la página de Configuración, separadas por espacios: /* @afterpack preset=hard inflation.max=6 */. Una clave booleana sola equivale a true. Las directivas se aplican al código que envuelven y a nada más: ni a las funciones que se llaman desde él ni a los imports.

Qué puedes configurar

Cualquier opción que se aplique por región. Cada una enlaza a su definición, y la pestaña directive de esa página muestra la forma exacta de escribirla.

Cualquier otra opción dentro de una directiva se ignora y se notifica con nivel de información. Una clave desconocida o una directiva mal formada es un error.

Cuándo usar una

  • Marca el código que más importa, como las comprobaciones de licencia, la lógica antimanipulación o un secreto incluido en el bundle, con preset=extreme. El resto del programa queda más ligero y más pequeño.
  • Marca el código que debe seguir siendo legible o rápido, como un bucle crítico para el rendimiento o un fragmento de terceros, con skip o un preset más bajo.

Qué marcar

ActivoDirectivaPor qué
Comprobaciones de licencia / derechos de usopreset=hardUn solo bit parcheado regala tu software. Combínalo con transforms.comparisonHardening.enabled.
Validadores de pagopreset=hardLa amenaza es la manipulación, no solo la lectura.
Lógica antitrampas / antibotspreset=hard o preset=extremeEleva el coste y la cadencia del desarrollo de trampas. Los adversarios tienen tiempo y motivación, así que combínalo con una validación autoritativa en el servidor.
Secretos incrustados en el código que no puedes mover al servidor/* @afterpack preset=extreme */ en línea, antes del literalLo ideal es eliminarlos por completo, pero alguno siempre se cuela. preset=extreme hace que recuperarlo sea caro, y el literal sigue existiendo en la salida. Para dejar fuera de la salida por completo un literal con el que tu código compara, usa transforms.comparisonHardening.enabled. Para uno que ya se publicó, consulta Si publicaste un secreto por accidente.
Algoritmos propietarios (precios, enrutamiento, integración de ML)/* @afterpack preset=extreme */ … /* @afterpack end */ alrededor de la función centralEs tu código más valioso. Objetivo de complejidad al máximo y suelo de constantes activado.

Aplica la directiva en el ámbito más pequeño que cubra el activo. Marcar un archivo de 500 líneas con preset=extreme infla todo el bundle a cambio de muy poco.

Comprobar qué se aplicó

El Protection Map muestra cada región que produjo una directiva y qué se aplicó dentro de ella. Una directiva que se leyó pero no tuvo efecto aparece en los diagnósticos del build.

Builds Free

Un build local aplica una única configuración a todo el programa. Una directiva que aumenta la protección detiene el build con un error que pide una clave Pro (DIAG_PRO_DIRECTIVE_REQUIRES_KEY): un preset superior al del programa, un complexity distinto de cero por encima del objetivo del programa o en un programa light, un inflation.max superior al presupuesto del programa, o strings.encode=on cuando el floor de cadenas del programa está desactivado. Cualquier otra directiva se ignora, y su región recibe la configuración del programa, incluidos skip, un preset o complexity inferior, un inflation.max inferior y las máscaras de transformaciones (transforms.only, transforms.deny, controlFlow.enabled=off). La CLI no lee ninguna directiva, en ninguno de los dos niveles.