Aquí tienes la comparación práctica y clara entre nsis (instalable) y portable, especialmente enfocada en licencias y actualizaciones:
1. Instalación y distribución
| Aspecto | nsis (Instalable) | portable |
|---|---|---|
| Tipo de archivo | Un .exe instalador | Un .exe o carpeta lista para ejecutar |
| Dónde se guarda | Program Files o AppData | Donde el usuario lo ponga (USB, carpeta, etc.) |
| Accesos directos | Sí (menú inicio, escritorio) | No (a menos que lo programes) |
| Desinstalador | Sí, incluido | No |
| Facilidad de copiar | Más difícil de “regalar” completo | Muy fácil (solo copias la carpeta) |
2. Licencias y protección (lo más importante para ti)
| Aspecto | nsis (Instalable) | portable |
|---|---|---|
| Dónde guardar la licencia | Puede escribir en ubicaciones más protegidas | Solo dentro de su propia carpeta |
| Atar a hardware (HWID) | Más fácil y estable | Posible, pero más vulnerable a copias |
| Validación online | Funciona igual de bien | Funciona igual de bien |
| Dificultad de piratear | Ligeramente más alta (hay que copiar más cosas) | Más baja (se copia todo fácil) |
| Control al instalar | Puedes pedir licencia durante la instalación | No hay proceso de instalación |
Conclusión en licencias: nsis te da más control y más opciones para proteger el programa. El portable es más débil en este aspecto porque el usuario puede copiar toda la carpeta fácilmente.
3. Actualizaciones
| Aspecto | nsis (Instalable) | portable |
|---|---|---|
| Auto-update (electron-updater) | Muy bien soportado | Más complicado / limitado |
| Experiencia del usuario | Actualiza solo, como Chrome o Discord | Suele requerir que el usuario baje la nueva versión |
| Actualizaciones diferenciales | Sí (descarga solo lo que cambió) | Generalmente no |
| Estabilidad | Más robusto | Más propenso a problemas de permisos |
Conclusión en actualizaciones: nsis es claramente superior. El sistema de actualizaciones automáticas funciona mucho mejor y es más profesional.
4. Resumen final (recomendación)
| Objetivo | Mejor opción | Motivo |
|---|---|---|
| Proteger contra piratería | nsis | Más difícil de copiar y más opciones de control |
| Licencias serias + activación online | nsis | Mejor integración |
| Actualizaciones automáticas | nsis | Mucho más fácil y estable |
| Que el usuario lo lleve en un USB | portable | Esa es su ventaja principal |
| Simplicidad máxima de distribución | portable | Solo se comparte un archivo/carpeta |
¿Cómo se suele implementar la licencia (serial + online) en un proyecto con nsis, y prefieres ver las diferencias de configuración exactas en el package.json / electron-builder?
1. Diferencias de configuración en electron-builder
En el archivo de configuración (normalmente package.json o electron-builder.yml) se ve así:
Versión Instalable (lo que tienen ahora):
"build": {
"win": {
"target": ["nsis"]
},
"nsis": {
"oneClick": false,
"allowToChangeInstallationDirectory": true,
"createDesktopShortcut": true,
"createStartMenuShortcut": true,
"installerIcon": "build/icon.ico",
"uninstallerIcon": "build/icon.ico"
}
}
Versión Portable:
"build": {
"win": {
"target": ["portable"]
},
"portable": {
"artifactName": "${productName}-Portable-${version}.exe"
}
}
También se pueden generar ambos al mismo tiempo:
"target": ["nsis", "portable"]
2. Cómo se suele implementar la licencia (serial + online) en un programa con NSIS
Esta es la parte más importante para lo que tú quieres (que no sea fácil de regalar ni de crackear).
Arquitectura recomendada (la más usada actualmente):
- El usuario introduce un serial (o se genera automáticamente).
- El programa toma el Hardware ID de la máquina (huella única).
- Se envía al servidor (serial + HWID).
- El servidor responde si la licencia es válida o no.
- Si es válida, se guarda un token/archivo de licencia de forma segura.
- Cada cierto tiempo (o al iniciar) se vuelve a validar online.
Flujo típico:
Usuario introduce serial
↓
Programa genera HWID (node-machine-id)
↓
Envía a tu API: { serial, hwid, version }
↓
Tu servidor verifica:
- ¿El serial existe?
- ¿Está activo?
- ¿Cuántas máquinas tiene permitidas?
- ¿Está vencido?
↓
Responde: { valid: true, token: "xxx", expires: "..." }
↓
El programa guarda el token de forma ofuscada
Librerías y herramientas comunes:
| Función | Herramienta recomendada | Notas |
|---|---|---|
| Generar HWID | node-machine-id | Muy usada |
| Ofuscar código | javascript-obfuscator + bytenode | Dificulta el reverse engineering |
| Sistema de licencias completo | Cryptlex, Keygen.sh, LicenseSpring | Los más profesionales |
| Solución propia | Tu propio backend + JWT | Más barato, pero más trabajo |
| Empaquetado adicional | electron-builder + firma de código | Ya lo están usando |
Dónde se guarda la licencia en un instalable (NSIS):
- Preferiblemente en una carpeta protegida (AppData del usuario o una ubicación con permisos).
- Nunca solo en la carpeta del programa (porque es más fácil de copiar).
- Se recomienda cifrar el archivo de licencia.
Recomendación según tu objetivo
Como tu prioridad es que no sea fácil de regalar ni de crackear, la combinación más fuerte es:
- Instalador NSIS firmado (ya lo tienen)
- Validación de licencia online + HWID
- Ofuscación del código
- (Opcional pero muy recomendable) Usar un servicio profesional de licencias (Cryptlex o Keygen) en lugar de hacerlo 100% casero al principio
Un programa portable es exactamente lo contrario de uno que se descarga e instala.
Diferencia clara:
| Tipo | Qué hace | Ejemplo |
|---|---|---|
| Instalable | Se descarga un instalador (.exe o .msi), lo ejecutas, el programa se copia a Program Files, escribe en el registro de Windows, crea accesos directos, etc. | Google Chrome normal, Firefox normal, Office, la mayoría de programas |
| Portable | Descargas un archivo o carpeta, lo descomprimes (si viene en .zip) y lo ejecutas directamente. No se instala nada. No toca el registro ni deja rastros en el sistema. | Chrome Portable, Firefox Portable, VLC Portable, Notepad++ Portable, 7-Zip Portable |
Resumen simple:
- Instalable → “Voy a instalarlo en mi Windows”
- Portable → “Voy a bajarlo, descomprimirlo y ejecutarlo. Listo.”
Por eso se llaman portable: puedes llevarlos en un pendrive y ejecutarlos en cualquier PC sin instalar nada.
Ejemplo con Chrome:
- Chrome normal: lo descargas de google.com/chrome → lo instalas → queda instalado en el sistema.
- Chrome Portable: descargas una versión portable (de sitios como PortableApps o similares), la descomprimes y ejecutas el .exe directamente. No se instala.
Ninguno de los dos es inherentemente más seguro contra ser crackeado o regado gratis.
La diferencia entre portable e instalable tiene muy poco que ver con la seguridad real contra piratería. Lo que realmente importa es cómo proteges el programa, no si se instala o no.
Comparación rápida:
| Aspecto | Instalable | Portable |
|---|---|---|
| Facilidad de regalar/piratear | Un poco más difícil (hay que copiar archivos + registro a veces) | Más fácil (solo copias la carpeta) |
| Opciones de protección | Tiene más herramientas (servicios, drivers, registro, permisos de sistema) | Tiene menos, pero igual se puede proteger bien |
| Dificultad real de crackear | Depende casi 100% de la protección que le pongas | Depende casi 100% de la protección que le pongas |
| Licencias / activación | Muy usada (serial + online activation) | También se puede (y se usa mucho) |
Lo que realmente evita que te lo “rieguen” o lo hackeen:
- Validación online de licencia (el método más fuerte actualmente)
- Atar la licencia a hardware (HWID)
- Ofuscación fuerte + packing del ejecutable
- Lógica crítica en el servidor (si parte del programa necesita internet)
- Anti-tampering (detectar si modificaron el .exe)
Codex (y casi todos los programas serios) están poniendo capas de licencia independientemente de si son portables o instalables. La protección va por el sistema de licencias, no por el tipo de distribución.
Conclusión directa:
- Si quieres máxima dificultad para que lo regalen fácil → Instalable es ligeramente mejor (porque la gente normal no sabe copiarlo bien).
- Si quieres máxima seguridad real contra cracks → da igual. Lo que importa es la capa de licencia + ofuscación + validación online.
No comments:
Post a Comment
Note: Only a member of this blog may post a comment.