Sistema de login muy seguro

Iniciado por TomaSs, 24 Septiembre 2013, 21:49 PM

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

TomaSs

Hola gente.

Sabrían decirme los métodos que podría utilizar para hacer un login altamente seguro?
La cuestión sería que se envíen los datos de logeo a una base de datos remota y que esta devuelva si son correctos o no.
No pido como hacer la petición remota ni nada de eso, sino como debería cifrar la respuesta y comprobarla posteriormente (no con un simple if) de tal manera que no sea fácil de crakear.

Y ya aprovecho también, para preguntar sobre que "identificador" o algún número de serie o algo que me permita identificar un ordenador para así hacer que mi programa únicamente funcione en un pc concreto.
De esta manera podría basar también la respuesta de la base de datos en base a ese identificador también, para así cerciorarme de que se ejecuta únicamente en ese pc, y así hacer más difícil aún el crakeado.

A ver si me podéis orientar un poco algunos que hayáis tenido que usar algo de esto.
Muchas gracias! ;)

Keyen Night

La arquitectura común para un login, es Cliente <-> Servidor/Servicio <-> Base De Datos, de manera que la comprobación de las credenciales no se realice desde el lado del cliente.

Para generar una comunicación segura se debe establecer un canal cifrado, hay mucha documentación, pero es un tema largo.

En el caso de los identificadores, estos deben generarse desde el lado del cliente, así que se puede realizar un parche para modificar al antojo el identificador, lo más sencillo es tener una base de datos de usuarios, para que estos deben autenticarse ante el servicio y así poder tomar decisiones según sea el caso.
La Fé Mueve Montañas...
                                    ...De Dinero

La programación es más que un trabajo es más que un hobby es una pasión...

TomaSs

Claro que la comprobación de credenciales la haces en el lado del servidor, pero luego le tendrás que responder al cliente con algo, no? con una aceptación o con algo, y eso es lo que digo que pueden crackear, esa respuesta xd

BlackM4ster

Todo se puede crackear, luego consiste en como quieras hacer la comparación. Modificar un if, es facil, pero todas las formas de la que lo puedas encubrir, tambien se pueden crackear xD

He visto algunos crackmes que tienen una funcion modificada una vez compilado, que comprueba el valor en hex de la parte que tiene la comparación y si detecta algo raro, se cierra. Es una idea, pero tambien es crackeable
- Pásate por mi web -
https://codeisc.com

Fakedo0r

Separa la parte de autentificación que llegaría a ser una especie de loader de tu aplicación. Cifra tu aplicación entera. Entonces desde el loader se ingresarían las credenciales (usuario / contraseña + algún Hardware ID única), esto haría una petición al Servidor, en el servidor se validarían las credenciales y según eso, te devolvería la contraseña para descifrar tu aplicación o de lo contrario un código erróneo. Te aconsejo, que el loader hicieras en algún lenguaje nativo como c++ o object pascal, ya que el .NET es de-compilable y no necesitamos dar mas información de lo que ya dispone el cracker.
Esto no es un método 100% efectivo pero es una buena solución.

Saludos.

Shout

Pues yo tengo una solución verdaderamente segura, con la que es 99.9% imposible crackear tu aplicación.

Primero: encriptas el .exe compilado de tu programa con algún cifrado con contraseña (tipo AES, así, el archivo varía según la contraseña, por lo tanto, es imposible recuperar el archivo original sin esa contraseña)

Luego, creas un "loader" que se encargará de enviar el Hardware ID (HWID) al servidor.
En el servidor, compruebas que el HWID esté en la base de datos. Si lo está, envías la contraseña al cliente para que desencripte el programa original y se pueda ejecutar. Si no es un HWID que esté en tu base de datos de HWIDs válidos, envías una contraseña aleatoria y el archivo no podrá ser descifrado.

Esto es imposible de crackear (eso sí, si la contraseña es 12345, no esperes que dure mucho). Si pones una contraseña larga y jodida, nadie podrá jamás ejecutar ese código, ya que, para bruteforcear eso, necesitas muchísimos años de crackeo.
I'll bring you death and pestilence, I'll bring you down on my own

Mad Antrax

Cita de: Shout en 16 Octubre 2013, 13:59 PM
Pues yo tengo una solución verdaderamente segura, con la que es 99.9% imposible crackear tu aplicación.

Primero: encriptas el .exe compilado de tu programa con algún cifrado con contraseña (tipo AES, así, el archivo varía según la contraseña, por lo tanto, es imposible recuperar el archivo original sin esa contraseña)

Luego, creas un "loader" que se encargará de enviar el Hardware ID (HWID) al servidor.
En el servidor, compruebas que el HWID esté en la base de datos. Si lo está, envías la contraseña al cliente para que desencripte el programa original y se pueda ejecutar. Si no es un HWID que esté en tu base de datos de HWIDs válidos, envías una contraseña aleatoria y el archivo no podrá ser descifrado.

Esto es imposible de crackear (eso sí, si la contraseña es 12345, no esperes que dure mucho). Si pones una contraseña larga y jodida, nadie podrá jamás ejecutar ese código, ya que, para bruteforcear eso, necesitas muchísimos años de crackeo.

Ese sistema es bastante seguro, un servidor de licencias :)

Pero se puede "alterar" de varias formas dependiendo el modo en que implementes la protección. Por ejemplo un cliente que ya haga la validación HWID y tenga la aplicación descifrada, podrá volcar-lo en un nuevo fichero y distribuir la copia por la red (por ejemplo).

Per es cierto que un license-server es bastante seguro :)
No hago hacks/cheats para juegos Online.
Tampoco ayudo a nadie a realizar hacks/cheats para juegos Online.

BlackM4ster

Cita de: Shout en 16 Octubre 2013, 13:59 PM
Pues yo tengo una solución verdaderamente segura, con la que es 99.9% imposible crackear tu aplicación.

Primero: encriptas el .exe compilado de tu programa con algún cifrado con contraseña (tipo AES, así, el archivo varía según la contraseña, por lo tanto, es imposible recuperar el archivo original sin esa contraseña)

Luego, creas un "loader" que se encargará de enviar el Hardware ID (HWID) al servidor.
En el servidor, compruebas que el HWID esté en la base de datos. Si lo está, envías la contraseña al cliente para que desencripte el programa original y se pueda ejecutar. Si no es un HWID que esté en tu base de datos de HWIDs válidos, envías una contraseña aleatoria y el archivo no podrá ser descifrado.

Esto es imposible de crackear (eso sí, si la contraseña es 12345, no esperes que dure mucho). Si pones una contraseña larga y jodida, nadie podrá jamás ejecutar ese código, ya que, para bruteforcear eso, necesitas muchísimos años de crackeo.

Buena idea xD  ;-) ;-) ;-)
- Pásate por mi web -
https://codeisc.com

Shout

Cita de: ||MadAntrax|| en 16 Octubre 2013, 14:13 PM
Ese sistema es bastante seguro, un servidor de licencias :)

Pero se puede "alterar" de varias formas dependiendo el modo en que implementes la protección. Por ejemplo un cliente que ya haga la validación HWID y tenga la aplicación descifrada, podrá volcar-lo en un nuevo fichero y distribuir la copia por la red (por ejemplo).

Per es cierto que un license-server es bastante seguro :)
A ver, se trata de que el archivo esté cifrado y que el servidor te dé la contraseña.
Porque como esté limpio dentro del ejecutable, se puede extraer de muchas formas.
Cita de: BlackM4ster en 17 Octubre 2013, 08:24 AM
Buena idea xD  ;-) ;-) ;-)
Gracias ;-)
I'll bring you death and pestilence, I'll bring you down on my own

Mad Antrax

No me he explicado bien.

Tu sistema es bueno, pero también se puede "crackear" a parte que su implantación tiene un coste de gestión elevadísimo si lo extrapolamos a gran escala (Necesitas tener la capacidad de generar una copia única cifrada para cada cliente, así como su HWID y su contraseña. Cada actualización que realices supone modificar el 100% de las licencias distribuidas a clientes, etc...). Por no hablar que limitas el uso de la aplicación a clientes con Internet permanente.

En cuanto un cliente legítimo realice la validación, el server envía la contraseña y se des-cifra el ejecutable, no? En ese momento el cliente puede dumpear el ejecutable des-cifrado y almacenar una copia del software sin "protección", pudiendo distribuirla por la red libremente.
No hago hacks/cheats para juegos Online.
Tampoco ayudo a nadie a realizar hacks/cheats para juegos Online.