2012-08-01 9 views
9

He hecho un programa que necesito licencia antes de venderlo a los clientes. Como no estoy seguro de que me gane, al menos, el costo del software de licencias comerciales, no me gustaría comprar uno.. Licencia de software en tiempo real en red

Así que estoy en busca de consejo sobre cómo implementar la característica de licencia con lógica siguiente:

  • Todo claves de licencia se validan en el lado del servidor cada vez que se inicie la aplicación (sin información de licencias se almacenan en userside excepto la licencia número).
  • Solo hay una aplicación ejecutándose con una clave de licencia al mismo tiempo.

Lo que no sé es cómo proteger mi programa de simple descompilación/desmontaje y simplemente quitar una llamada para verificar la licencia? ¿O hacer un servidor propio que hará que una respuesta sea cierta en cada licencia? ¿Cómo se hace normalmente esa seguridad?

He buscado SDK gratuitos o algo así, pero no he podido encontrar nada. ¡Estaré muy agradecido por su ayuda!

P.S: No aspiro a hacer que el sistema sea "indestructible", pero me gustaría recibir la protección que es más costosa de crackear que pagar $ 5.10 por una copia del programa.

P.P.S: Lo siento por mi mal inglés.

+2

¿Ha considerado que esto significa que sus usuarios solo pueden iniciar la aplicación cuando tienen una conexión a Internet que funcione? Esto podría descartar una gran cantidad de usuarios de computadoras portátiles/móviles, y cualquier persona con mala conectividad. Además, ¿qué has intentado hasta ahora? Su pregunta muestra una falta de investigación, y eso a menudo lleva a que las preguntas se cierren o se ignoren. –

+3

http://msdn.microsoft.com/en-us/magazine/cc164108.aspx explica cómo el nombre fuerte del ensamblado impide la manipulación del ensamblaje. Para el servicio web, debe considerar el uso de un certificado de servidor que debe ser validado por el cliente antes de aceptar la respuesta. Pero esto evitaría que todos los usuarios fuera de línea lo usen. – Ramesh

+0

Lo siento, pensé, que la pregunta era clara. Hasta ahora he escrito un servicio web y un cliente para verificar una licencia, y funciona bien, pero es realmente fácil desactivar esa defensa ... Así que he preguntado si alguien puede dar un consejo sobre cómo protegerse de esto. Tan pronto como mi aplicación sea la automatización del juego en línea, mis usuarios deben tener una buena conexión a Internet, por lo que no será un problema con el control en tiempo real. La ofuscación está bien, pero después de la ofuscación todavía puedo ver el evento en el depurador y saltar sobre él ... – CodeDemen

Respuesta

2

Lo que no sé es cómo proteger mi programa de simple decompiling/disassembling y acaba de quitar una llamada para verificar la licencia? ¿O hacer un servidor propio que hará que una respuesta sea cierta en cada licencia? ¿Cómo se realiza normalmente esta seguridad?

Está confundiendo la concesión de licencias y la ofuscación. Para evitar lo anterior, deberá ofuscar a sus ex y dlls con un ofuscador.

Dado que no estoy seguro, que va a ganar mi al menos el costo de licencias de software comercial, no me gustaría comprar uno.

En mi humilde opinión, es mucho mejor concentrarse y pasar más tiempo en su software real que en desarrollar un esquema de licencia desde cero (reinventando la rueda como dicen).

Si se abre a las soluciones pagas, eche un vistazo a CryptoLicensing (para licencias y protección contra copias) y Crypto Obfuscator (para la ofuscación y la protección del código).

DESCARGO DE RESPONSABILIDAD: Yo trabajo para LogicNP Software, el desarrollador de los productos mencionados anteriormente.

+0

OMI, la ofuscación no ayudará ya que las personas han parcheado a las ex en el pasado mirando el código de ensamble. La ofuscación va a hacer que sea un poco más difícil entender la lógica – Ramesh

+0

Estaba escribiendo una publicación MUY similar pero tú eras más rápido. de acuerdo con esto y nadie debe reinventar la rueda, especialmente en el dominio de seguridad. –

+0

Sí, nada es 100% resistente a las grietas, pero es mejor una protección que ninguna! – logicnp

1

(Lo siento no puedo comentar sobre los mensajes de otras personas ???)

Depende de lo que hace la aplicación.

Actualmente me enfrento con el mismo problema que usted. Voy a un sistema de inicio de sesión, simplemente busque y compare con lo que hay en la base de datos. Si no está presente, no inicie la aplicación. No es que necesite más, la aplicación se basa en mi base de datos y sin ella es inútil.

Luego pueden pasar un par de horas averiguando cómo se ve mi base de datos según lo que ven en las consultas o prácticamente reescribiendo todo mi producto. Voy a gastar poco en seguridad de la aplicación. La única protección que deseo tener es no mostrar los datos de mi servidor.

+1

Aquí la solución es bastante simple: necesita escribir un servicio web con soporte de autenticación, pero no envía consultas directamente a su base de datos. Luego llame desde su aplicación al servicio web con licencia (o contraseña de inicio de sesión, como lo desee) yg y respuestas de esto - son aproximadamente 2 clases más para que usted escriba y le garantiza que nadie obtendrá acceso a sus datos de base de datos. – CodeDemen

+0

@CodeDemen ¿te importaría indicarme un buen tutorial/explicación sobre esto? – AmazingDreams

+1

¡Ningún problema! [Ejemplo de WS Auth] (http://www.codeproject.com/Articles/4398/Authentication-for-Web-Services-using-SOAP-headers) y [WS DB Connectivity] (http: //www.c-sharpcorner .com/uploadfile/raj1979/database-connectivity-using-webservice /) – CodeDemen