

| ||||
![]() Metiéndome un poco en el asunto y con algo de curiosidad, abrí uno de mis programas, y me delató en la segunda línea que lo hice con vb6, navegando un poco más, también delató que accedía a la clave HKEY_LOCAL_MACHINE\SOFTWARE...... con el WScript y hasta me mostró el nombre de mi Form ![]() ![]()
__________________ Por favor, antes de preguntar, revisa la Guía para realizar preguntas. |
| ||||
![]() Otras más, las llamadas API, todas todas, los Captions de los Controles, a ver qué más..... Información del Proyecto, un bloque Select...., en síntesis, para quien sepa nada es seguro... como ya lo dijeron algunos jeje ![]()
__________________ Por favor, antes de preguntar, revisa la Guía para realizar preguntas. |
| |||
Hola geoAvila varias consultas este numero de serie del que hablas es el id del disco duro o el id del volumen ya que si es el del volumen tiene la desventaja que cada vez que formates ala maquina se te va a gererar un id distinto en cambio si es el del disco rigido no importa cuantas veces formates el disco siempre sera el mismo id luego cuando aplico el programa la función me devuelve un numero negativo esta bien? yo tengo un windows 2000 sp4 en español No sería más seguro el id de la tarjeta madre?? con respecto al ultimo comentario utilizando las apis podrían explicarlo un poco más por favor que no se que hace cada api Muchas Gracias.. |
| ||||
Cita: bueno el asunto era generar un proyecto bastante parecidgo de hecho podrías decir que muy pocos discos duros tendrán la misma etiqueta o bien ninguno además el serial para el disco duro sería algo muy parecido porque igual el la etiqueta se monta cuando formateas el disco duro entonces en cada formato tiene una nueva etiqueta.. amenos que podas formatear el disco duro sin tocar la etiqueta se te volvería vulnerable o bien que puedan copiar el número de etiqueta, pero si estas buscando un programa que no puedad ser robado nunca lo vas a encontrar..
Iniciado por RonAraya Hola geoAvila varias consultas este numero de serie del que hablas es el id del disco duro o el id del volumen ya que si es el del volumen tiene la desventaja que cada vez que formates ala maquina se te va a gererar un id distinto en cambio si es el del disco rigido no importa cuantas veces formates el disco siempre sera el mismo id nos vemos..
__________________ * Antes de preguntar lee las FAQ, y por favor no hagas preguntas en las FAQ Sitio http://www.geoavila.com twitter: @GeoAvila |
| ||||
Cita: ¿que no sabes que es una API? pues entonces vas lento....
Iniciado por RonAraya Hola geoAvila varias consultas este numero de serie del que hablas es el id del disco duro o el id del volumen ya que si es el del volumen tiene la desventaja que cada vez que formates ala maquina se te va a gererar un id distinto en cambio si es el del disco rigido no importa cuantas veces formates el disco siempre sera el mismo id luego cuando aplico el programa la función me devuelve un numero negativo esta bien? yo tengo un windows 2000 sp4 en español No sería más seguro el id de la tarjeta madre?? con respecto al ultimo comentario utilizando las apis podrían explicarlo un poco más por favor que no se que hace cada api Muchas Gracias..
__________________ Por favor, antes de preguntar, revisa la Guía para realizar preguntas. |
| ||||
![]() A ver, veamos te diré de una forma sencilla, toda la API está en las librerías de Windows... son en realidad funciones existentes en tales librerías.... La sintaxis de una llamada API en vb sería simplemente declararla al inicio del Modulo y finalmente llamarla como un Sub o Function Normal... Por ejemplo:
Código:
Es una llamada API, la función está contenida en la Librería kernel32.dll y el nombre dentro de ésta es GetWindowsDirectoryA, pero lo declaramos como GetWindowsDirectory y este será el nombre con el que lo utilizaremos en nuestro programa.... (P.D. Es una declaración de alcance Público, Private para alcance Privado...) Public Declare Function GetWindowsDirectory Lib "kernel32" Alias "GetWindowsDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long
__________________ Por favor, antes de preguntar, revisa la Guía para realizar preguntas. |
| |||
Saludos GeoAvila, Geoavila te comentaba acerce del serial del volumen ya que como sabes existen programas que clonan los discos duros y entonces se clona también el erial del volumen en cambio con el serial del disco duro si te clonan el dico duro no te clonan ese serial, lo que no se es con cual api puedo averiguar el serial(en ocaciones llamdo modelo) del disco duro, No crees que sería mejor Otra pregunta, Que diferencia existe si registro mi clave en el regedit o si no lo hago David Gracias por tu explicacíon de apis pero lo que yo no entendía que que hacían las respectivas apis que estaban explicadas Gracias a ambos |
| ||||
Cita: me parece ke vos no tenes logica loko..mira es simple
Iniciado por Bellenger el metodo que usas no es nuevo, por no decir anticucho en fin la logia tiene muchos errores y le falta muchisimo como para ser un codigo de seguridad, pues como dijo alguien es mas facil y seguro guardar los valores encriptados en el registro asi como lo hace el mismo win, en fin es mi opinion pronto sacare mi propia version de algo parecido a esto espero poder terminarla a tiempo ah sin ofensas son solo opiniones. :) Private Declare Function GetVolumeInformation& Lib "kernel32" Alias "GetVolumeInformationA" (ByVal lpRootPathName As String, ByVal pVolumeNameBuffer As String, ByVal nVolumeNameSize As Long, lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long, lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String, ByVal nFileSystemNameSize As Long) Private Sub Form_Load() Dim cad1 As String * 256 Dim cad2 As String * 256 Dim numSerie As Long Dim longitud As Long Dim flag As Long unidad = "C:\" Call GetVolumeInformation(unidad, cad1, 256, numSerie, longitud, flag, cad2, 256) label1 = numSerie If Val(label1) <> -1943758465 Then 'el Nro: -1943758465 es el del HD de la PC ke le instalaré el sistema de mi tesis, si lo kieren pasar a otra PC les tira error de pirateria y les cierra el SW :P es cuestion de un pokito de logica no ? MsgBox "Intento de pirateria", vbCritical, "Error !!!" End End If MsgBox "Numero de Serie de la unidad " & unidad & " = " & numSerie End Sub
__________________ LA MUERTE ESTÁ TAN SEGURA DE VENCER QUE NOS DA TODA UNA VIDA DE VENTAJA |
| ||||
![]() Cita: Está remal eso que dices, mira, pues para instalar a otra PC entonces deberás volver a compilar el ejecutable??????? impensable.... no podrías crear un programa de instalación....
Iniciado por aldo1982 me parece ke vos no tenes logica loko..mira es simple Private Declare Function GetVolumeInformation& Lib "kernel32" Alias "GetVolumeInformationA" (ByVal lpRootPathName As String, ByVal pVolumeNameBuffer As String, ByVal nVolumeNameSize As Long, lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long, lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String, ByVal nFileSystemNameSize As Long) Private Sub Form_Load() Dim cad1 As String * 256 Dim cad2 As String * 256 Dim numSerie As Long Dim longitud As Long Dim flag As Long unidad = "C:\" Call GetVolumeInformation(unidad, cad1, 256, numSerie, longitud, flag, cad2, 256) label1 = numSerie If Val(label1) <> -1943758465 Then 'el Nro: -1943758465 es el del HD de la PC ke le instalaré el sistema de mi tesis, si lo kieren pasar a otra PC les tira error de pirateria y les cierra el SW :P es cuestion de un pokito de logica no ? MsgBox "Intento de pirateria", vbCritical, "Error !!!" End End If MsgBox "Numero de Serie de la unidad " & unidad & " = " & numSerie End Sub
__________________ Por favor, antes de preguntar, revisa la Guía para realizar preguntas. |
| |||
David Una consulta, utilizando el codigo de aldo1982, que sucede si en lugar de comparar el volumen contra un valor específico mas bien lo relalizamos de la siguiente forma: en el momento de la instalación el priograma nos obtiene ese volumen. a este numero le aplicamos algun tipo de "encriptación" y el valor resultante pasa a convertirse en la clave del programa. Entonces cada vez que el programa arranca desincripta la llave para el obtener el valor original y luego obtiene nuevamente el serial del volumen y si no coinciden no puede ejecutarse el programa Evidentemente el programa generador de la clave sería independiente al programa en cuestión de esta forma no se tendría que generar el exe por cada PC Te agradecería mucho tus comentarios..... Saludos |
| ||||
![]() Pues precisamente esa sería la forma correcta, que el instalador obtuviera la clave del Disco, y lo guardara por alguna parte, así entonces, pues, el programa compara el valor guardado por el instalador y el valor actual de la serie del volumen, si difieren, PIRATA, en tanto si son iguales, pues arranca el programa....
__________________ Por favor, antes de preguntar, revisa la Guía para realizar preguntas. |
| ||||
bueno señores creo que tendré que hacer esta aplicación con encripción en el registro md5.. porque veo muchos no entendieron el tema.. o bien buscarme otra manera de darle a esto... creo que esta vez lo vamos a hacer con el numero de serie del procesador... haber que pero me ponen ahora.. me van a decir que no se va poder... porque se pueden llevar su procesador a otra máquina. jajaja bueno les digo como quedaría.. nos vemos.. nos vemos..
__________________ * Antes de preguntar lee las FAQ, y por favor no hagas preguntas en las FAQ Sitio http://www.geoavila.com twitter: @GeoAvila Última edición por GeoAvila; 27/10/2005 a las 13:15 |
| |||
Lo estaremos esperando solo como comentario, He leido por ahí que los procesadores que traen numero de serie son los pentium II en adelante, solo para que lo cheques pero igual espero pronto lo puedas terminar y de esta forma realizar seguridad cruzada : serial del HD + serial del Procesador :) Saludos y suerte |
| ||||
Cita: o sea me funciona..pero es verdad, para instalar en otra Pc hay ke volver a compilar..pero bue a mi me sirve y es lo ke importa :P
Iniciado por David el Grande Está remal eso que dices, mira, pues para instalar a otra PC entonces deberás volver a compilar el ejecutable??????? impensable.... no podrías crear un programa de instalación....
__________________ LA MUERTE ESTÁ TAN SEGURA DE VENCER QUE NOS DA TODA UNA VIDA DE VENTAJA |
| ||||
usa buena solucion bue se me ocurriolosiguiente: crear una base de datos en la cual se pondria el numero de serie del disco en tonces en ves de compilar cada ves el proyecto, solo cambiams el serial deldisco desde la base de datos... ke opinan ???
__________________ LA MUERTE ESTÁ TAN SEGURA DE VENCER QUE NOS DA TODA UNA VIDA DE VENTAJA |
| ||||
Cita: para hacer esto mejor se guarda en el registro de windows y lo encriptamos en MD5 y listo.. jeje
Iniciado por aldo1982 bue se me ocurriolosiguiente: crear una base de datos en la cual se pondria el numero de serie del disco en tonces en ves de compilar cada ves el proyecto, solo cambiams el serial deldisco desde la base de datos... ke opinan ??? nos vemos..
__________________ * Antes de preguntar lee las FAQ, y por favor no hagas preguntas en las FAQ Sitio http://www.geoavila.com twitter: @GeoAvila |
| ||||
Cita: ok me parece exelente la idea...pero estemm...podrias poner un ejemplo? nunca hice eso de md5 :(( yno trabajé mucho con el reg de windows :( bue sino no hay problema
Iniciado por GeoAvila para hacer esto mejor se guarda en el registro de windows y lo encriptamos en MD5 y listo.. jeje nos vemos.. salu2 y gracias
__________________ LA MUERTE ESTÁ TAN SEGURA DE VENCER QUE NOS DA TODA UNA VIDA DE VENTAJA |
| ||||
Cita:
Iniciado por aldo1982 ok me parece exelente la idea...pero estemm...podrias poner un ejemplo? nunca hice eso de md5 :(( yno trabajé mucho con el reg de windows :( bue sino no hay problema salu2 y gracias deja que elaboro un ejemplo ya terminado para que no queden dudas y lo monto a mi sition.. nos vemos..
__________________ * Antes de preguntar lee las FAQ, y por favor no hagas preguntas en las FAQ Sitio http://www.geoavila.com twitter: @GeoAvila |
| |||
Tampoco es muy recomendable en el instalador. ![]() ![]()
__________________ |
| ||||
Cita: mira nosotros no queremos hacer un software inposible de ser crackeado simplemente darle un tanto deseguridad.. si lees todos los post veras cual es la intención..
Iniciado por GabrielDR ![]() ![]() nos vemos..
__________________ * Antes de preguntar lee las FAQ, y por favor no hagas preguntas en las FAQ Sitio http://www.geoavila.com twitter: @GeoAvila |
| ||||
Bueno, les muestro lo que hice yo: Esto va cuando ejecuta el programa: Cita: Y este es el generador de serials:Private Declare Function GetVolumeInformation& Lib "kernel32" Alias "GetVolumeInformationA" (ByVal lpRootPathName As String, ByVal pVolumeNameBuffer As String, ByVal nVolumeNameSize As Long, lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long, lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String, ByVal nFileSystemNameSize As Long) Dim cad1 As String * 256 Dim cad2 As String * 256 Dim numSerie As Long Dim longitud As Long Dim flag As Long Private Sub Command1_Click() If (Val(Reg1.Text) = (numSerie + 1500)) And (Val(Reg2.Text) = (numSerie + 1600)) And (Val(Reg3.Text) = (numSerie + 1900)) Then MsgBox "El programa ha sido registrado", vbInformation, "" SaveSetting App.Title, Me.Name, Me.Reg1.Name, Me.Reg1.Text SaveSetting App.Title, Me.Name, Me.Reg2.Name, Me.Reg2.Text SaveSetting App.Title, Me.Name, Me.Reg3.Name, Me.Reg3.Text Form1.Show Unload Me Else MsgBox "El numero introducido es incorrecto", vbCritical, "" End If End Sub Private Sub Form_Initialize() If (Val(Reg1.Text) = (numSerie + 1500)) And (Val(Reg2.Text) = (numSerie + 1600)) And (Val(Reg3.Text) = (numSerie + 1900)) Then Form1.Show Unload Me End If End Sub Private Sub Form_Load() unidad = "C:\" Call GetVolumeInformation(unidad, cad1, 256, numSerie, longitud, flag, cad2, 256) Text1.Text = numSerie Reg1.Text = GetSetting(App.Title, Me.Name, Reg1.Name, vbChecked) Reg2.Text = GetSetting(App.Title, Me.Name, Reg2.Name, vbChecked) Reg3.Text = GetSetting(App.Title, Me.Name, Reg3.Name, vbChecked) Text1.Text = numSerie End Sub Private Sub Form_Unload(Cancel As Integer) SaveSetting App.Title, Me.Name, Me.Reg1.Name, Me.Reg1.Text SaveSetting App.Title, Me.Name, Me.Reg2.Name, Me.Reg2.Text SaveSetting App.Title, Me.Name, Me.Reg3.Name, Me.Reg3.Text End Sub Cita: Qué les parece? Hasta ahora me funciona perfecto. Seguramente hay errores o variables de más, pero lo hice apurado.Private Declare Function GetVolumeInformation& Lib "kernel32" Alias "GetVolumeInformationA" (ByVal lpRootPathName As String, ByVal pVolumeNameBuffer As String, ByVal nVolumeNameSize As Long, lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long, lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String, ByVal nFileSystemNameSize As Long) Dim cad1 As String * 256 Dim cad2 As String * 256 Dim numSerie As Long Dim longitud As Long Dim flag As Long Private Sub cmdGenerar_Click() unidad = "C:\" Call GetVolumeInformation(unidad, cad1, 256, numSerie, longitud, flag, cad2, 256) numSerie = primera.Text registro1.Text = (numSerie + 1500) registro2.Text = (numSerie + 1600) registro3.Text = (numSerie + 1900) End Sub Private Sub cmdSalir_Click() If MsgBox("¿Está usted seguro que desea Salir de SerialZax?", _ vbQuestion + vbYesNo, "Pregunta") = vbYes Then End End If End Sub Private Sub Form_Load() unidad = "C:\" Call GetVolumeInformation(unidad, cad1, 256, numSerie, longitud, flag, cad2, 256) primera.Text = numSerie End Sub Salu2!
__________________ diegoz.com.ar Última edición por Frehley; 25/12/2005 a las 01:42 |
| ||||
una pregunta.. como hago para que un programa que tiene sentencias o comandos visual basic scritp ( los ta famososo archivos test.vbs ) no se si los conosca... el punto s.. mi programa tiene ese tipo de comandos y cualquier antivirus lo dectecta omo virus o software malicioso ... :S por que??? y como puedo hacer para que no pase eso.??? a y otra.. como comprimo un ejecutable.???
__________________ http://www.xpresatelibre.com La Xpresion Al Maximo Nivel |
| |||
Todo lo que estáis hablando de cruzar IDs de procesadores, discos duros y demás hardware es inútil. Como dijo MaxExtreme hace meses: Con un simple salto la comprobación no se ejecuta. Un ejemplo para que lo entendáis. Aldo escribió:
Código:
Bien, una idea brillante, pero, ¿qué ocurra si hago esto?If Val(label1) <> -1943758465 Then ' Nº del procesador MsgBox "Intento de pirateria", vbCritical, "Error !!!" End End If
Código:
Como es fácil de ver: El código se pasa de largo, se _SALTA_.GoTo Saltar: If Val(label1) <> -1943758465 Then ' Nº del procesador MsgBox "Intento de pirateria", vbCritical, "Error !!!" End End If Saltar: Eso es lo que ocurre. Vendéis el ejecutable .EXE, un tipo lo abre, añade el "goto" (evidentemente en código máquina), y adiós protección. Ya funciona en cualquier ordenador. ¿Queda claro que _cualquier cosa_ escrita en Visual Basic, por difícil que sea, se puede crackear en cuestión de horas? |
| ||||
Bueno, la verdad no lo veo tan optimo, lees el volumen del disco, y agregas una especie de crack para activar el programa ¿acaso no seria lo mismo si usas variables del registro? ¿no seria lo mismo que el programa leyera el registro y buscara una variable con el id optimo? En mi opinion, lo k tienes sirve para aplicaciones distribuidas de control, donde el aplicativo se instala en determinado equipo, al conectar con el hosting se almacenará el serial en una base de datos. en la cual se activara o no segun lo que se necesite, si formatearan el elquipo cliente no cambiarian los permisos de acceso, segun el serial del disco del cliente y segun lo que este guardado en el servidor accederas o no....
__________________ :cool: Nadie enseña a nadie... todos aprendemos de todos....!!! |
| ||||
Cita: claro, claro pero aqui no tratamos de hacer un software que sea seguro al 100%(que no existe), lo que tratamos es ponerle un poco de seguridad a nuestras aplicaciones para que no las agarren y las instalen nada mas asi por asi cualquier usuario empirico de las sistemas si se lo roba es una persona que esta muy debajo del porcentaje que conocimientos que cualquier otro usuario que podamos encontrar de cada 100 o mas encontraremos una persona que lo sabe hacer.. asi que.... nosotros no queremos hacer algo invulnerable a un hacker y esto es tal como lo venimos diciendo en todo el post.. por favor antes de hacer este tipo de comentarios en este post por favor leer toda la historia del mismo no solo el ultimo post que han agregado y gracias a todos por seguir aportando...
Iniciado por cabeza_nispero Como es fácil de ver: El código se pasa de largo, se _SALTA_. Eso es lo que ocurre. Vendéis el ejecutable .EXE, un tipo lo abre, añade el "goto" (evidentemente en código máquina), y adiós protección. Ya funciona en cualquier ordenador. ¿Queda claro que _cualquier cosa_ escrita en Visual Basic, por difícil que sea, se puede crackear en cuestión de horas?
__________________ * Antes de preguntar lee las FAQ, y por favor no hagas preguntas en las FAQ Sitio http://www.geoavila.com twitter: @GeoAvila |
| ||||
Pero estan perdiendo el punto. Yo si vendo, por ejemplo, un programa para gestionar una remiseria, me interesa que solo el comprador lo use. Si se lo vende a la remiseria de al lado estoy perdiendo plata. Este tipo de seguridad apunta a los usuarios básicos de la aplicación. En general quien compra este tipo de aplicaciones no tiene idea de como crackear nada. Salu2!
__________________ diegoz.com.ar |
| |||
Tranquilos, tranquilos.... Como dice nuestro buen amigo "Kissero", estamos perdiendo el Hilo, nos hemos dado vuelo destrozando la buena intencion del iniciador del foro (por cierto es gratificante comerse a alguien de vez en cuando...), es cierto que la seguridad, es un tema muy complejo y muy trillado, pero la intensión de Avila es la de crear una aplicación que cumpla con algunos preceptos de seguridad.. ¿o no?, ahora bien... ¡SABELOTODOS!. (incluyendome por criticon) aportemos, seamos positivos, demos algo a esta basura de mundo que al fin de cuentas estamos en él y si contribuimos... en algun punto.. este será mejor que antes. Pues entonces empecemos. Propuestas para crear un software seguro. comencemos con la base de que un sistema de seguridad no se basa solo en la cerradura de la puerta, siempre es un "sistema" es decir un conjunto de acciones o procesos que trabajan en conjunto para lograr un objetivo. En este caso: Hacer un software seguro. Ya se ha dicho demostrado ampliamente que centrar la seguridad en el EXE no es muy buena idea, ya que se puede crackear "relativamente facil", tambien expuse que poner un serial en el instalador es mala idea, ademas expuse que las claves y accesos a las bases de datos son transparentes con el Block de notas, por aqui he visto muy buenos codigos para tomar info del serial. y lo del registro de windows no me parece tan mala idea. Ahora porque no conjuntamos técnicas y hacemos algo que no solo dependa del EXE. Usemos la tecnica de la fortaleza invertida:
__________________ |
| |||
Es cierto que los compradores seguramente no sepan como crackear nada, pero aquí intentamos hacer las cosas lo mejor posible, ¿no? En cualquier caso, GabrielDR, no sé de que "preceptos de seguridad" hablas. Por favor, explica eso de que "dependa sólo del EXE". |