¿Hay algo más que "if" y "else"

-3

Hay muchas formas de proteger una contraseña como usar algoritmos fuertes como SHA-512, usar sales, encriptar la base de datos donde se almacena la contraseña, empaquetar el archivo de licencia con UPX, etc. y etc., pero hay varios procedimientos que yo sepa el inicio de sesión exitoso o el éxito de la compra (en caso de que sea un código de licencia) termina así para todo tipo de inicios de sesión, funciones de desbloqueo, etc.,

Aunquehayvariosmétodosparacifrarlacontraseñayhacerlamásfuerte.Enúltimainstancia,terminaconunsiyotracosa.porlotanto,modificarel"si" no será una gran tarea para un ingeniero inverso, ¿cómo funciona? Ofuscando solo añade ruido. ¿Hay alguna manera específica de reemplazar el "si" y "otra cosa". El ejemplo se basa en el lenguaje "C", pero es común para todos los lenguajes principales como C ++, Python, Java, etc.,

    
pregunta VISWESWARAN NAGASIVAM 28.05.2016 - 20:34
fuente

3 respuestas

6

Es una apuesta bastante segura que si un atacante tiene la capacidad de modificar el código ejecutable en su servidor, ya está jodido. Se está preocupando de que no pasen la validación de la contraseña para hacer algo cuando, para todos los propósitos y propósitos, ya tienen control total de su sistema. Si no lo hicieran, no podrían editar tus ejecutables binarios.

Si tienes este código del lado del cliente en lugar del lado del servidor para que puedan meterse con él, eso también es un agujero de seguridad masivo. El código que valida la contraseña / hash de contraseña no debería ser cambiado por un atacante.

    
respondido por el PhillS 28.05.2016 - 20:43
fuente
3

Si su código se está ejecutando en la máquina del usuario, no existe una manera infalible de evitar que el usuario realice ingeniería inversa y / o modifique el programa. Puede hacerlo más difícil a través de técnicas de ofuscación, como intentan hacerlo las herramientas antipiratería y DRM, pero en última instancia, cualquier programa que el usuario ejecute está bajo el control del usuario.

La única forma definitiva de solucionar este problema es hacer que if statement se ejecute en una máquina que pueda controlar. Por ejemplo, puede retener datos importantes necesarios para que su programa se ejecute, y requerir que el cliente se conecte a su servidor y proporcione credenciales válidas antes de que su servidor suministre esos datos. Por supuesto, hay inconvenientes para esto, como puede imaginar: requiere que el usuario tenga una conexión a Internet para que el programa funcione, y supone que en realidad hay datos importantes que puede retener que son diferentes de un usuario a otro.

    
respondido por el tlng05 28.05.2016 - 20:56
fuente
0

Por supuesto, hay algo más que "si". Por ejemplo, podría calcular algo que es vital para la ejecución correcta del programa desde la contraseña.

Una tabla de punteros de función que se cifró con la contraseña sería lo más obvio, pero podría ser algo más engañoso, como calcular los límites de una matriz errónea.

Entonces, si es así de fácil, ¿por qué no todos lo hacen?

Por una razón, hace que el programa sea mucho más difícil de depurar, y el bloqueo inesperado de una aplicación pirateada no es precisamente una buena RP (incluso si el programa fue pirateado).

Pero lo más importante es que está perdiendo mucho tiempo en una carrera de armamentos que inevitablemente perderá (hay mucha gente con mucho tiempo libre disponible, y es suficiente si uno de ellos hacen un crack exitoso).
En su lugar, podría usarlo para mejorar su producto para pagar clientes.

La gran mayoría de las personas que piratean cosas nunca te pagarán de todos modos, sin importar qué. Eso es molesto, pero no hay mucho que puedas hacer.

Pero uno u otro cliente de pago indeciso puede ser convencido de pagar si su software tiene esa otra cosa. O un cliente ya existente puede renovar una licencia.

    
respondido por el Damon 28.05.2016 - 21:25
fuente

Lea otras preguntas en las etiquetas