Hola amigos:
Aquí les paso unas pruebas que estoy haciendo para proteger nuestras aplicaciones contra la piratería.
http://mastersoft3000.com/publico/protect.zip
Parto de algunos premisas:
1.- La aplicación debe controlar constantemente la existencia de la llave USB correcta.
Se me ocurren dos formas: Usando un Timer (demasiado pesado), ó controlando en puntos críticos de la aplicación. Prefiero esta segunda forma.
En el ejemplo, al inicio de cada función invocada en el menú principal del progama se pone la rutina que controla la existencia de la llave y su correcta identificación.
Con esto evitamos que inicien la apliación en un PC, desconecten la llave, la pasen a otro PC y nos piratien
2.- Las rutinas de control no deben ralentizar de ninguna manera a la aplicación. Por esto creo que la la información correspondiente a la WMI se debe obtener una sola vez y al inicio, y guardar sus respuestas en variables a ser utilzadas posteriormente sin necesidad de volver a efectuar llamadas a la WMI. Esto incluye la indentificación de la unidad que tiene el control, ya que en un equipo puede estar conectado más de un USB a la vez, entonces, el control debe identificar cuál es la unidad a la que está conectado nuestra USB de seguridad.
Para guardar en variables utilicé la clase TPublic de Daniel Andrade (Alguien sabe qué es de él ?). Cada cual utilice el método que mejor le parezca.
3.- El control debería dar respuesta negativa en tres casos:
a.- NO hay USB conectado al equipo
b.- Hay USB conectado pero no está serializado (protegido)
c.- Hay USB y está serializado, pero el password no corresponde
Si se les ocurren más casos, por favor, aportenlos......
Falta encontrar la forma de controlar aplicacione en red: Por ejemplo, si un cliente adquire una apliacion para uso en un servidor y tres terminales, el programa debería ejecutarse en 4 equipos simultáneamente, cómo controlar que no haya un quinto equipo en ejecución ?
Así que amigos, aporto lo que tengo hasta ahora. Si les parece útil, por favor ayúdenme a completarla, de forma que fortalezcamos aún más a FIVEWIN y protejamos nuestras apliaciones sin encarecerlas con los altos costos que tienen las Llaves SENTINEL o HASP o cualquier otra (por hardware o software), y lo más importante, tenemos el código y el control a nuestra conveniencia.
Para probar adecuadamente el ejemplo que adjunto, primero por el menú "Set" seteen su llave. El password que elijan por favor escríbanlo al inicio de la Function Main() en Protect.prg:
oWMI:cElPassw := SuPassword
Recuerden que oWMI:cElPassw es generada con la clase TPublic. Pueden utilizar otro método. Sin embargo, para facilitar las pruebas, adjunto también la clase para quienes no la tengan. También adjunto el codigo con funciones de Marson de Paula a las que he hecho algunas modificaciones.
El ejemplo es un modelo básico. A partir de ahí, se puede sofisticar al gusto y necesidades de cada uno, tal como: Nombre de la aplicación, del cliente, prestaciones habilitadas o deshabilitadas, número máximo de terminales, fechas de vencimiento de Demos, etc. Todos estos datos se incorporan encriptados en el archivo "info.bin" (del ejemplo de Antonio). Sugiero que cada uno le ponga un nombre menos obvio a "info.bin". Creo que con imaginación las posibilidades son extensas. He hecho diferentes pruebas incluyendo fechas de vencimiento para Demos, y todo va OK. Sólo me falta lo del control de RED. Las pruebas las he realizado sobre Windows XP y Windows Vista y funcionan perfecto. Para Windows'98, creo que hay que instalar un parche de Microsoft que habilite el servicio WMI. No le he probado pues no tengo Windows'98 ni tampoco mis clientes.
El proceso de protección podría estar embebido en la aplicación a proteger, o mejor aún, en una DLL que se invoca desde el programa protegido.
La idea es que entre todos, si les parece, lo hagamos, y por supuesto, GRATIS Y CON CODIGO FUENTE INCLUIDO como aporte a todos los FIVEWINEROS (y por lo universal del código para todo el mundo), sin
egoísmos.
Ojalá regresáramos a aquellas maravillosas épocas del maestro Manuel Mercado, de Daniel Andrade, Ricardo Ramírez, Arturo Tamayo Daza, Hernan Ceccarelli, The Full, Ramón Avendaño, ufffff, la lista es laaaarga, quienes con una calidad humana extraordinaria y verdadero sentido de
compañerismo donaron su formidable código a la comunidad.
Espero sus comentarios, aunque sea para decirme que esto no sirve para nada. Todos son bienvenidos.
Un abrazo,
Carlos Gallego