Sistema de seguridad "anticopias" vb6

Iniciado por AntonioPalma, 4 Octubre 2011, 16:01 PM

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

AntonioPalma

Hola! estoy desarrollando mi propio Software de pago y quisiera saber qué métodos me recomendarían para evitar el pirateo de mi aplicación.

Había pensado que tal vez MySQL sería una buena idea...

Alguna sugerencia¿
Saludos.

n0more

MySQL como sistema antipirateria?? hola??


Eso depende de tu ingenio... Juega con el número de serie del disco, crea un algoritmo que te devuelva un secuencia de números/letras en función del número de serie del disco duro, aplica un semilla, ten en cuenta el día, mes, año, tamaño del pie del comprador....


Si piensas un pelín, veras como salen algoritmos "sencillos" que no son tan sencillos... :D.


Ten en cuenta que tienes que realizar la comprobación de lo que devuelva tu programa para comprobar que es correcto...



Salu2!

AntonioPalma

Vale vale, he creado un sistema que usa el número de serie del disco duro donde esté instalado el sistema operativo en uso y el serial que el usuario debería introducir sería el siguiente:

Numero de serie de la unidad: DriveNum
Serial que el usuario debe introducir para iniciar la aplicación: DriveNum + 123

Supongamos que el número de serie de la unidad es: 12345678111. Pues el usuario debería introducir en un campo de texto el serial: 12345678111 + 123 = 12345678234 para que la aplicación inicie.
Esto lo compruebo con el código:

if text1.text = DriveNum + 123 then
me.enabled=true
else
msgbox "Serial incorrecto"
end if


Pero he averiguado que esto es muy facil de crackear (hasta yo he podido con OllyDBG)... Mi pregunta es: ¿Cómo hago para que esto sea más dificil de crackear?

Saludos y gracias x la respuesta.

Maurice_Lupin

Bueno yo también he tratado de buscar un método, y quisiera saber si es fácil de evadir. Encontre esta función que utiliza el objeto WinMgmts.

La aplicacion que tengo lee datos del disco duro y si coinciden con los que tiene en una variable dentro del programa, se inicia. Estoy pensando en hacer que compruebe el disco duro, no sólo al inicio del programa.

Me pregunto si se puede evadir este método de comprobar el disco duro más de una vez durante la ejecución del programa.

Código (vb) [Seleccionar]

Function ObtenerSerieDiscoRigido() As String
   Dim SerialDisco, modelo As String
   Dim Disco As Object
   On Error Resume Next
   ObtenerSerieDiscoRigido = ""
   SerialDisco = ""
   modelo = ""
   With GetObject("WinMgmts:")
       
        If SerialDisco = "" Then
           For Each Disco In .InstancesOf("Win32_DiskDrive")
               SerialDisco = Replace(Trim(Disco.Model), "-", "")
               modelo = Disco.signature
               If SerialDisco <> "" Then
                   Exit For
               End If
           Next
       End If
       
       If SerialDisco = "" Then
           For Each Disco In .InstancesOf("Win32_PhysicalMedia")
               SerialDisco = Trim(Disco.SerialNumber)
               modelo = Disco.Model
               If SerialDisco <> "" Then
                   Exit For
               End If
           Next
       End If
   End With
   
   On Error GoTo 0
       ObtenerSerieDiscoRigido = (SerialDisco & "-" & modelo)
End Function
Un error se comete al equivocarse.

Hasseds

Hola, Todo se puede crackear... pero al menos deberás complicarlo lo mas posible, no solo llamando a la funcion que te devuelve el serial al principio del programa sinó varias veces en el codigo (y requiriendo distintas partes del serial, para que el retorno no sea una "variable-constante",   especialmente cuando llamas a cada una de las funciones de tu progama ,,,  tambien combinar esto con otras "cosillas" que se te vayan ocurriendo....

Solo una acotación, si el código que utilizas para obtener el serial del disco duro es con el API GetVolumeInformation ... dicho serial no es el real, solo es un serial de  "formateo" (por llamarlo de alguna manera) dicho serial es otorgado por el S.O (no por el fabricante) obviamente que cambia si el usuario de tu aplicación formatea y quiere suguir usando el mismo ejecutable.

Con WMI (Win32_DiskDrive) tengo entendido que para discos Duros...este dato  es opcional del fabricante, al margen que por ejemplo en W7 con UAC activado... WMI no está disponible ( por favor corrijan si me equivoco )

Saludos

Sergio Desanti

Maurice_Lupin

Bueno lo que tengo pensado es comprobar más de una vez el disco duro en mi aplicación.

Aqui te dejo código que encontre googleando, me funciona en winXP y win7 32bits, pero en el win7 ejecutarlo con click derecho compatibilidad winxp, funciona hasta ahora bien  :xD Detecta discos duros, no me he puesto a investigar pues hace lo mismo que la función anterior, pero utilizando las APIs.

Aqui el ejemplo
Un error se comete al equivocarse.

Hasseds

Si ya habia visto ese code y otro similar, Una pregunta Maurice_Lupin (o el que pueda ayudar), como podria usar ese code en XP, modo Usuario o Invitado.

Sergio Desanti

Maurice_Lupin

#7
Si no eres administrador no deberia poderse,y no se puede. Aunque quizá alguien sabe como... jaja

parece que si, aún no lo reviso

http://www.perio.unlp.edu.ar/amnti/?q=node/5
Un error se comete al equivocarse.