Skip to content
← Todas las publicaciones
· Delta1 Labs Licenciamiento.NETGuía

Cómo añadir una prueba gratuita a tu software (que no se filtre)

Pruebas con límite de tiempo bien hechas: emite una clave firmada que caduca sola, bloquéala por equipo para una prueba por máquina, hazla revocable y rastreable, conviértela a pago sin reemitir clave y ofrece pruebas de autoservicio desde tu propio sitio, en lugar de un flag en el registro que cualquiera puede resetear.

Para añadir una prueba gratuita que no se filtre, emite una clave de licencia firmada y con límite de tiempo que caduque sola, bloquéala por equipo para que cada máquina tenga una prueba, mantenla revocable y rastreable, y deja que se convierta a pago sin reemitir la clave: lo contrario de un flag en el registro o un archivo de fecha, que un usuario resetea en segundos. Este artículo cubre qué significa hacerlo “bien”, por qué fallan los enfoques ingenuos y cómo cablear un botón de prueba de autoservicio en tu propio sitio para que nunca envíes una licencia a mano.

Por qué la prueba fácil siempre se filtra

La forma tentadora de construir una prueba es registrar cuándo se ejecutó el software por primera vez y contar hacia atrás desde ahí. Dos variantes, ambas rotas:

  • La prueba del registro / archivo de fecha. En el primer arranque escribes una marca de tiempo en un valor del registro o en un archivo, y en arranques posteriores comparas contra ella. Borrar ese valor —o reinstalar en una máquina virtual nueva— resetea el reloj. No hay nada firmado, así que la aplicación no tiene memoria fiable de si la prueba ya se usó.
  • La prueba de comparación de reloj. Guardas una caducidad y la comparas contra DateTime.UtcNow. Retrasa el reloj del sistema y la prueba nunca termina. Sin una hora de referencia firmada, la aplicación no puede distinguir una fecha real de una retrasada.

Ambas comparten el mismo defecto de raíz: el estado de la prueba vive en algún lugar que el usuario controla por completo, en una forma que nada puede verificar. La solución no es un escondite más ingenioso, sino una clave firmada en la que la aplicación pueda confiar de verdad.

Cómo es una prueba resistente a filtraciones

Una prueba como es debido es simplemente una licencia con vida corta. Lleva las mismas protecciones que una licencia de pago, así que los mismos trucos no funcionan.

Es una clave firmada que caduca sola

La clave de prueba es una carga útil (producto, nivel, puestos, expiryUtc, un flag trial) firmada en el servidor con tu clave privada. Tu aplicación verifica la firma contra una clave pública embebida y lee la caducidad desde la carga útil firmada, no desde un valor en disco que el usuario pueda editar. Cuando pasa la caducidad, la clave deja de validar y la aplicación falla hacia el estado gratuito/sin licencia. No se necesita ninguna llamada al servidor para que caduque; la caducidad está integrada y es evidente ante cualquier manipulación.

Al ser una licencia firmada de verdad, el truco de retrasar el reloj también está cubierto. El SDK de Keyright recuerda la última hora que vio legítimamente y trata un salto grande hacia atrás en una licencia con límite de tiempo como manipulación: un estado ClockTampered que se niega a validar hasta que se corrija el reloj (consulta la guía de integración del SDK de .NET).

Está bloqueada por equipo: una prueba por máquina

Una clave firmada con caducidad sigue siendo copiable, así que átala a la máquina. El bloqueo por equipo liga la prueba a una huella de máquina estable (con una pequeña tolerancia al cambio para que un cambio de hardware no deje fuera a un evaluador honesto), lo que significa que cada dispositivo tiene una prueba en lugar de que una clave siembre cien instalaciones.

Se emite una por identidad

El bloqueo por equipo impide que una clave se propague; los controles de emisión impiden que una persona tome nuevas pruebas sin fin. La prueba de autoservicio de Keyright es una prueba por correo electrónico por producto: volver a solicitarla con el mismo correo devuelve la misma clave (created: false) en lugar de acuñar una nueva. Un refresco de página o un segundo clic nunca resetea el reloj ni acumula pruebas. Es idempotente por diseño, que es justo lo que la hace resistente al abuso.

Es revocable y rastreable

Una prueba que no puedes matar es un pasivo. Las claves de prueba de Keyright son totalmente revocables como cualquier licencia, y cada prueba se rastrea en tu panel: el resumen de Inicio las cuenta, y la tabla de Licencias muestra cada una con su caducidad y las activaciones por máquina. Puedes ver quién está probando, cuándo caduca su clave y contactar con esa persona antes de que lo haga.

Se convierte a pago sin reemitir la clave

La propiedad más importante: una prueba debería convertirse en una compra sin fricción. Como una clave de prueba de Keyright se activa por la exacta misma ruta que una de pago, cuando el cliente compra y activa una clave que no es de prueba, esta sustituye a la prueba restante sin reinstalar y sin reemitir la clave. La aplicación pasa de “Prueba Pro — quedan 27 días” a la edición de pago en la siguiente activación. Tu aplicación lee el estado directamente de LicenseInfo —info.IsTrial, info.DaysRemaining, info.StatusBadge— así que la cuenta atrás de la prueba y el aviso de mejora son unas pocas lecturas de propiedades, no una ruta de código separada.

Autoservicio: un botón de prueba en tu propio sitio

El mejor embudo de prueba no te involucra en absoluto. El endpoint de prueba de Keyright, POST /v1/trial, es público y está abierto a CORS, así que un formulario sencillo en tu sitio de marketing puede llamarlo directamente y el cliente recibe una clave por correo electrónico: sin clics en el panel, sin archivos de licencia enviados a mano.

<button id="trial">Start free trial</button>
<script>
document.getElementById('trial').onclick = async () => {
  const res = await fetch('https://keyright.delta1labs.com/v1/trial', {
    method: 'POST',
    headers: { 'content-type': 'application/json' },
    body: JSON.stringify({ product: 'acme-app', email: userEmail, company: userCompany }),
  });
  const data = await res.json();
  if (res.ok) show(`Your trial key: ${data.key} (expires ${data.expiresUtc})`);
  else show(data.error);
};
</script>

Las pruebas están desactivadas por defecto: un producto solo ofrece una cuando te das de alta estableciendo una duración de prueba, un nivel y un número de puestos (en la pestaña Products del panel, o POST /admin/products/{slug}/trial). La respuesta devuelve la clave, su nivel y expiresUtc, y Keyright la envía por correo a la dirección. El flujo completo, la referencia de campos y los códigos de estado están en la guía de pruebas gratuitas de autoservicio.

Para un evaluador aislado (air-gapped) o empresarial que no puede alcanzar la red, puedes entregar en su lugar un archivo de prueba offline firmado y con límite de tiempo: la misma semántica de prueba, entregada como un archivo que el SDK verifica localmente contra tu clave pública.

El cliente la activa como cualquier clave

No hay un “modo prueba” separado en tu aplicación. La clave de prueba se activa por la misma llamada ActivateAsync(key) que una de pago: realiza una activación en línea, vincula la máquina y almacena en caché un lease firmado con trial: true y la caducidad de la prueba. Gracias a ese lease en caché, la aplicación sigue funcionando sin conexión hasta que termina la prueba y luego falla hacia el estado bloqueado. Una sola ruta de código gestiona la prueba y el pago por igual.

Sé honesto sobre el techo

Una prueba firmada, bloqueada por equipo y rastreada derrota los trucos casuales —borrar una clave del registro, retrasar el reloj, refrescar para obtener una prueba nueva— de forma integral. Lo que no puede hacer por sí sola es detener a un atacante decidido que decompila tu aplicación y elimina la comprobación con un parche, porque esa comprobación se ejecuta en la máquina del usuario. Ese es el mismo límite que tiene toda protección del lado del cliente, y aplica la misma respuesta: combina la comprobación del cliente de la prueba con activación en línea, de modo que la caducidad, los puestos y la revocación se decidan en un servidor que el atacante no controla, y con ofuscación para que parchear el cliente salga caro. La puerta de la prueba es honesta y difícil de resetear; el servidor es donde se hace cumplir.

Añade una prueba esta semana

Una prueba bien hecha es una clave firmada, que caduca, bloqueada por equipo y revocable que se convierte a pago por sí sola, y Keyright te da todo eso, en autoservicio, desde una sola llamada a la API. Activa las pruebas para tu producto, coloca un botón en tu sitio y lee el estado de LicenseInfo en tu aplicación. Regístrate gratis y sigue la guía de pruebas gratuitas de autoservicio para cablearlo de principio a fin: el plan gratuito basta para lanzar una prueba real y resistente a filtraciones antes de pagar nada.

Prueba Nebula.NET

Endurece tu código .NET en minutos — empieza con la edición gratuita.