# Protege la comprobación de licencia de una app de Electron frente a un parche local

app.asar se desempaqueta con un comando, y una comprobación local de licencia o de prueba suele ser una sola comparación. Cómo ofuscar main, preload y renderer para que un crack no sobreviva a tu siguiente versión.

Source: https://www.afterpack.dev/es/docs/use-cases/electron-license-logic

Una app de escritorio publica su JavaScript en el propio disco del usuario, comprobación de licencia incluida, donde se puede leer y editar con toda calma.

## app.asar se desempaqueta, y la barrera de licencia se salta editando una línea

Instalar tu app instala tu código fuente. `app.asar` se desempaqueta con un comando, y main, preload y renderer pasan a ser archivos normales y legibles en disco. Una barrera de licencia solo local suele ser una única comparación o un único return temprano, y darle la vuelta es editar una línea.

Esa edición no se queda en privado. Un archivo parcheado, o un pequeño script que aplica la misma edición, circula como crack y funciona en todas las copias de esa versión.

## Una semilla para main, preload y renderer

[`@afterpack/electron`](https://www.afterpack.dev/es/docs/frameworks/electron) ofusca los tres programas desde una sola llamada y comparte una [`seed`](https://www.afterpack.dev/es/docs/config#seed) entre ellos, de modo que main, preload y renderer salen coherentes entre sí. Esa coherencia es lo que mantiene de acuerdo los dos lados de un canal IPC sobre el mismo nombre de canal.

Cada build toma una semilla nueva, así que cada versión sale con una forma distinta. Un parche o un script escrito contra una versión no se aplica a la siguiente que publiques, y quien lo escribió tiene que volver a localizar la comprobación en un build que ya no se parece a aquel con el que trabajó.

## Conéctalo al build de una versión

La [página de Electron](https://www.afterpack.dev/es/docs/frameworks/electron) explica cómo instalar el plugin y conectar cada parte. Para el build de una versión, sube el nivel de protección de toda la app en un solo lugar. Multiplica el tiempo de arranque ([coste de carga](https://www.afterpack.dev/es/docs/presets#load-cost)), así que mide el arranque de tu app antes de publicarlo:

```ts
// electron.vite.config.ts
withAfterpack(config, { preset: "hard" });
```

Cuando cada parte se compila con su propio comando en lugar de con una sola llamada al plugin, fija [`AFTERPACK_seed`](https://www.afterpack.dev/es/docs/config#seed) en esos comandos para que las partes sigan compartiendo forma. [Una semilla, tres formas](https://www.afterpack.dev/es/docs/frameworks/electron#one-seed-three-ways) indica qué toolchains lo necesitan.

Deja el Protection Map, las copias de seguridad y los source maps fuera de la app empaquetada: `.afterpack/`, `*.backup.*` y `*.map` deben ir en los globs de exclusión de tu empaquetador, porque un `.map` dentro de `app.asar` devuelve tu código fuente original tan directamente como lo haría el JavaScript desempaquetado. La [página de Electron](https://www.afterpack.dev/es/docs/frameworks/electron) enumera lo que el plugin se niega a compilar directamente.

## Comprueba que todas las partes salieron protegidas

Cada parte escribe su propio [Protection Map](https://www.afterpack.dev/es/docs/protection-map) en `.afterpack/<leg>/`, así que puedes abrir main, preload y renderer por separado y ver que el archivo que contiene la comprobación de licencia quedó cubierto. Ejecuta [`afterpack verify`](https://www.afterpack.dev/es/docs/cli#afterpack-verify-dir) sobre la salida compilada antes de empaquetarla, como la barrera que detecta un build en el que la protección no se aplicó.

## Hasta dónde llega una comprobación offline

Una forma nueva en cada versión es un coste real para quien quiera saltarse la comprobación: un crack escrito contra los patrones de un build falla en el siguiente, y cada actualización que sacas deja obsoleto el crack de la versión anterior.

Aun así, una comprobación offline tiene que ejecutarse correctamente en la máquina del usuario, así que con tiempo suficiente sobre una versión se puede encontrar y parchear. Respalda la comprobación en el cliente con una llamada a tu propio servidor para todo lo que sea crítico para los ingresos.

## Siguiente

- [Electron](https://www.afterpack.dev/es/docs/frameworks/electron): instalación, conexión, la matriz de compatibilidad y lo que el plugin se niega a compilar.
- [Directivas](https://www.afterpack.dev/es/docs/directives): marcar una región, como la comprobación de licencia, más difícil que el resto del programa (Pro).
- [Modelo de amenaza](https://www.afterpack.dev/es/docs/threat-model#the-boundary): a qué puede llegar alguien que ejecuta tu código.
