Autor Tema: Proteger software.  (Leído 8010 veces)

0 Usuarios y 1 Visitante están viendo este tema.

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Proteger software.
« en: Enero 26, 2010, 03:43:09 am »
Hola a todos. Una consulta.
Primero les cuento el contexto. Tengo un programa que bueno vendo e implemento en diferentes empresas comerciales. Bueno el programa se llama "Q" y al terminar de instalar Q ejecuto otro programita "L" que es el que licencia la maquina para que el primer programa pueda ejecutarse.
Básicamente lo que hago con L es obtener el numero de serie del disco con GetVolumeInformation y lo meto un archivo de texto camuflado en system32 y grabado con fecha anterior y mezclado con otros mas que son para despistar.

Bueno, cuando Q se ejecuta, al arrancar uso la misma función GetVolumeInformation para comparar con el archivo de texto grabado por L. Si son iguales el programa levanta, si no lo son no levanta.

hago esto con el convencimiento de que el numero de serie del disco duro es único y que incluso clonando el disco duro cada disco conserva su propio numero de serir.

El asunto es que estuve instalando en una red de un nuevo cliente, quien había comprado varias PCs iguales a un mismo proveedor... y grande fue mi sorpresa al comprobar que 3 maquinas me daban el mismo numero obtenido por GetVolumeInformation... buaaa...

Bien, la pregunta de rigor.. que dato tiene el hardware como unico y que lo hace distinto de un hardware de otro? sera la placa? sera otro dato del disco? una combinacion? que recomiendan?

Muchas gracias por sus respuestas. Saludos
Me encuentras en YAcosta.com

ssccaann43

  • Terabyte
  • *****
  • Mensajes: 970
  • Reputación: +97/-58
    • Ver Perfil
    • Sistemas Nuñez, Consultores y Soporte, C.A.
Re:Proteger software.
« Respuesta #1 en: Enero 26, 2010, 10:41:17 am »
Pues te recomiendo lo siguiente que es lo que hago en mi caso...

Yo genero 2 claves con: Un número de licencia el cual otorgo, el serial del dd, fecha y hora... con todos esos datos hago una fusion, genero operaciones entre los caracteres númericos y a los alfanúmericos los convierto en número según su posición y letra, para poderlos meter en las operaciones, seguido de esto al obtener las dos claves, inserto el serial de registro del software que es el resultado de esas dos claves generadas.

Te explico mejor...

Supongamos que el serial del DD es: 123456789A
La licencia es: 17078838
Fecha: 26/01/2010
Hora: 08:00:00

Ok, comienza el trabajo: El serial del DD quedaría: 1234567890 Ya que A según el codigo que he armado en la decima posicion es 0.
a ese valor le sumo la licencia. Generandome el resultado: 1251646728.
Seguido de esto sumo la fecha y la hora: 26012010 + 080000. Dandome como resultado: 26092010. Bien... Ya tengo 2 claves.

Despues de esto, puedes hacer lo que quieras dividir, multiplicar, lo que sea entre esos dos resultados para solicitar el serial de registro de tu software. Si te fijas, como solicito fecha y hora, cada segundo cambia el resultado de la segunda clave y eso es lo que lo hace en mi caso interesante. Me ha funcionado a la perfección, y hasta ahora es seguro. Ojo, es un ejemplo lo que te he planteado, yo uso unos módulos para encriptar y otras cosas para ello, pero es una idea. Saludos
Miguel Núñez.

coco

  • Administrador
  • Terabyte
  • *****
  • Mensajes: 548
  • Reputación: +63/-3
    • Ver Perfil
Re:Proteger software.
« Respuesta #2 en: Enero 26, 2010, 02:47:08 pm »
Pues te recomiendo lo siguiente que es lo que hago en mi caso...

Yo genero 2 claves con: Un número de licencia el cual otorgo, el serial del dd, fecha y hora... con todos esos datos hago una fusion, genero operaciones entre los caracteres númericos y a los alfanúmericos los convierto en número según su posición y letra, para poderlos meter en las operaciones, seguido de esto al obtener las dos claves, inserto el serial de registro del software que es el resultado de esas dos claves generadas.

Te explico mejor...

Supongamos que el serial del DD es: 123456789A
La licencia es: 17078838
Fecha: 26/01/2010
Hora: 08:00:00

Ok, comienza el trabajo: El serial del DD quedaría: 1234567890 Ya que A según el codigo que he armado en la decima posicion es 0.
a ese valor le sumo la licencia. Generandome el resultado: 1251646728.
Seguido de esto sumo la fecha y la hora: 26012010 + 080000. Dandome como resultado: 26092010. Bien... Ya tengo 2 claves.

Despues de esto, puedes hacer lo que quieras dividir, multiplicar, lo que sea entre esos dos resultados para solicitar el serial de registro de tu software. Si te fijas, como solicito fecha y hora, cada segundo cambia el resultado de la segunda clave y eso es lo que lo hace en mi caso interesante. Me ha funcionado a la perfección, y hasta ahora es seguro. Ojo, es un ejemplo lo que te he planteado, yo uso unos módulos para encriptar y otras cosas para ello, pero es una idea. Saludos

me parece ideal, pero de todas formas, si usas "IF" se puede parchear horriblemente :D
te cuento mi  anecdota, yo habia hecho un software para mi viejo, el cual no lo iba a vender a nadie, pero yo quise ponerle algun tipo de serial. el tema es q usaba SaveSettings o algo asi, que en win98 funcionaba de 10, pero en XP por algun motivo magico, no andaba. el serial lo tenia (era siempre el mismo), pero a pesar de que me decia que estaba bien, cuando lo reiniciaba me seguia diciendo demo. Ok, aca entra la parte de garcker (hacker). Cuando uno utiliza un IF, ambos parametros a comparar, se cargan en memoria (hablando en ensamblador, ASM) uno atras de otro con la instruccion PUSH y una direccion en memoria, por ejemplo:
Código: (asm) [Seleccionar]
PUSH MEM1
PUSH MEM2
CALL .......
Como parchear esto, muy simple, pusheamos 2 veces lo mismo, dando como resultado un TRUE siempre!
Código: (asm) [Seleccionar]
PUSH MEM1
PUSH MEM1
CALL .......

Y listo. Si lo queres proteger, tambien agrega modulos anti-debugger y varios IF como para distraer al hacker.

saludos
'-     coco
(No me cabe: Java, Python ni Pascal)
SQLite - PIC 16F y 18F - ARM STM32 - ESP32 - Linux Embebido - VB6 - Electronica - Sonido y Ambientacion

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Proteger software.
« Respuesta #3 en: Enero 27, 2010, 02:22:22 am »
Pues te recomiendo lo siguiente que es lo que hago en mi caso...

Yo genero 2 claves con: Un número de licencia el cual otorgo, el serial del dd, fecha y hora... con todos esos datos hago una fusion, genero operaciones entre los caracteres númericos y a los alfanúmericos los convierto en número según su posición y letra, para poderlos meter en las operaciones, seguido de esto al obtener las dos claves, inserto el serial de registro del software que es el resultado de esas dos claves generadas.

Te explico mejor...

Supongamos que el serial del DD es: 123456789A
La licencia es: 17078838
Fecha: 26/01/2010
Hora: 08:00:00

Ok, comienza el trabajo: El serial del DD quedaría: 1234567890 Ya que A según el codigo que he armado en la decima posicion es 0.
a ese valor le sumo la licencia. Generandome el resultado: 1251646728.
Seguido de esto sumo la fecha y la hora: 26012010 + 080000. Dandome como resultado: 26092010. Bien... Ya tengo 2 claves.

Despues de esto, puedes hacer lo que quieras dividir, multiplicar, lo que sea entre esos dos resultados para solicitar el serial de registro de tu software. Si te fijas, como solicito fecha y hora, cada segundo cambia el resultado de la segunda clave y eso es lo que lo hace en mi caso interesante. Me ha funcionado a la perfección, y hasta ahora es seguro. Ojo, es un ejemplo lo que te he planteado, yo uso unos módulos para encriptar y otras cosas para ello, pero es una idea. Saludos

Gracias por responder, entiendo que esto que explicaste es para el momento de la instalación o en todo caso no me quedo muy claro como resolver el hecho de que te clonen el disco duro?
Ok, digamos que el programa sabe que la clave es 1234 porque genero la clave con formulas (como mas o menos tu explicabas) teniendo como base la cadena numérica del disco duro, y tiene que compararlo con algo para saber si debe ejecutarse o no, en este caso lo comparo con un archivo camuflado donde dice 1234 que lo escribió el programa licenciador y levanta.
El archivo lo cree modificando la fecha previamente (por código) y restaurándola luego de haber creado 20 archivos mas y esparcido por todo el disco y con nombres para nada indicativos de ser de mi software.

Mi ilusión era que si clonaban el disco duro... para cuando arranque el programa Q el ejecutaba sus formulas y obtenía el valor 5678 (pq es otro disco) y al compararlo con el archivo que contiene 1234 pues no levanta y mando mensaje de "Programa sin Licencia etc etc".

Es decir y resumiendo... ¿como resolver ante clonacion de disco.?

Gracias


Mi ilusion e.
Me encuentras en YAcosta.com

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Proteger software.
« Respuesta #4 en: Enero 27, 2010, 02:25:32 am »

me parece ideal, pero de todas formas, si usas "IF" se puede parchear horriblemente :D
te cuento mi  anecdota, yo habia hecho un software para mi viejo, el cual no lo iba a vender a nadie, pero yo quise ponerle algun tipo de serial. el tema es q usaba SaveSettings o algo asi, que en win98 funcionaba de 10, pero en XP por algun motivo magico, no andaba. el serial lo tenia (era siempre el mismo), pero a pesar de que me decia que estaba bien, cuando lo reiniciaba me seguia diciendo demo. Ok, aca entra la parte de garcker (hacker). Cuando uno utiliza un IF, ambos parametros a comparar, se cargan en memoria (hablando en ensamblador, ASM) uno atras de otro con la instruccion PUSH y una direccion en memoria, por ejemplo:
Código: (asm) [Seleccionar]
PUSH MEM1
PUSH MEM2
CALL .......
Como parchear esto, muy simple, pusheamos 2 veces lo mismo, dando como resultado un TRUE siempre!
Código: (asm) [Seleccionar]
PUSH MEM1
PUSH MEM1
CALL .......

Y listo. Si lo queres proteger, tambien agrega modulos anti-debugger y varios IF como para distraer al hacker.

saludos

Guau me parece interesante, no sabia esto que comentas, ya mismo voy a hacer primero lo de meter varios if y de alli a investigar un poco lo de "anti.debugger" (si tuvieras algun linksillo por alli de este tema te agradeceria).

Gracias
Me encuentras en YAcosta.com

ssccaann43

  • Terabyte
  • *****
  • Mensajes: 970
  • Reputación: +97/-58
    • Ver Perfil
    • Sistemas Nuñez, Consultores y Soporte, C.A.
Re:Proteger software.
« Respuesta #5 en: Enero 27, 2010, 10:12:39 am »
Fijate, aparte del proyecto tu vas a tener una aplicacion para generar las llaves o el serial de registro. Si alguien se lleva una copia para otro discoduro, JAMAS podra levantarlo, por que? porque el archivo contiene encriptado el serial del discoduro, fecha y hora del momento del registro. Y cuando verificas esa informacion en otra pc obviamente te dara error! Ahora estoy ocupado, pero en cuanto pueda te armo un ejemplo por si no logras hacerlo, por cierto, lo armaré en VB6.0 si no hay problemas?
Miguel Núñez.

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Proteger software.
« Respuesta #6 en: Enero 28, 2010, 08:24:40 pm »
Muchísimas gracias Miguel, si la verdad te agradecería mucho ese código, y si fuera en VB6 seria mas que excelente. Gracias por tu tiempo.
Me encuentras en YAcosta.com

hardgeek

  • Bit
  • Mensajes: 5
  • Reputación: +0/-0
    • Ver Perfil
Re:Proteger software.
« Respuesta #7 en: Abril 19, 2021, 11:53:19 pm »
se que hace tiempo de este post pero tendras el ejemplo en visual basic por ahi aun? o si tienes alguno mejor? es que quiero cotizar mi programa de administracion para talleres pero aun no se que implementar para eso. Saludos

TOLO68

  • Kilobyte
  • **
  • Mensajes: 60
  • Reputación: +2/-0
    • Ver Perfil
Re:Proteger software.
« Respuesta #8 en: Abril 09, 2022, 08:37:47 am »
Hola a todos.
hay un codigo en VB6 y otros Basic, que se llama CPUID.
Es una funcion programada en ASM dentro de VB, el cual da el numero de serie del CPU.
Con esto puedes formatear el disco e incluso cambiarlo, porque viene a leer el numero de hardware del CPU.

Saludossss