Pregunta

Yo sé cómo compilar C y C ++ Fuente archivos usando GCC y CC en el terminal, sin embargo me gustaría saber si es seguro para incluir contraseñas en estos archivos, una vez compilado.

Por ejemplo .. i verificar la entrada del usuario para un determinado contraseña por ejemplo 123, pero parece compila los programas en C / C ++ es posible ser descompilado.

¿Hay alguna forma para compilar un archivo fuente de C / C ++, mientras se mantiene la fuente completamente oculto .. Si no, podría cualquier persona proporcionar un pequeño ejemplo de la encriptación de la entrada, a continuación, comprobar en contra de la contraseña por ejemplo: (SHA1, MD5)

¿Fue útil?

Solución

No se recomienda para mantener los datos estáticos sensibles dentro del código. Puede utilizar los archivos de configuración para eso. Allí se puede almacenar lo que quiera.

Pero si realmente quieres hacer eso primero hay que recordar que el código se puede cambiar fácilmente mediante la investigación con un depurador y modificándolo. Sólo los programas que el usuario no tiene acceso a puede considerarse seguras (sitios web, por ejemplo).

La mayoría de las contraseñas de inicio de sesión (de diferentes sitios) no se almacenan en claro en la base de datos pero cifrada con algoritmos MD5, SHA1, Blowfish, etc.

Me gustaría sugerir que utilice uno de estos algoritmos de OpenSSL biblioteca.

Lo que me gustaría hacer es el uso de algunos de clave pública criptográfica algoritmo . Esto probablemente tomará un poco más de tiempo a craquear porque en mi opinión no hay nada 100% seguro cuando se habla de protección de software.

Otros consejos

No se puede no incluir de forma segura la contraseña en el archivo de origen. Las cadenas en el archivo ejecutable están en texto plano, cualquier persona con un editor de texto puede buscar fácilmente en su contraseña.

A no tan seguro, pero pisotearía algunas personas, es almacenar la cadena cifrada en su lugar. Así que, básicamente:

enc = "03ac674216f3e15c761ee1a5e255f067953623c8b388b4459e13f978d7c846f4"

bool check() {
    pass = getPassFromUser();
    encpass = myHashingFunction(pass);
    return pass == encpass;
}

Esto disuadir a algunas personas, pero no es realmente mucho más seguro, es relativamente trivial para el montaje de hackers para sustituir la cadena 'enc' en su ejecutable con otra cadena sha256-codificado con un valor de texto plano conocido.

Incluso si utiliza un servidor de autenticación por separado, no es difícil de configurar un servidor de autenticación falsa y engañar a su programa de conectar a este servidor de autenticación falsa.

Incluso si utiliza SHA1 para generar un hash no es realmente tan seguro si lo hace de una manera normal (escribe una función para comprobar una contraseña) cualquier determinado o bien informado de hackers dado acceso al ejecutable será capaz de conseguirlo todo (reemplazar su hash con un hash conocida o simplemente reemplazar la llamada checkPassword () con una llamada que devuelve true.

La pregunta es ¿quién está tratando de proteger contra? Su hermano pequeño, un hacker, espías internacionales, el espionaje industrial?

El uso de SHA1 con el hash solo contenida en el código (o un archivo de configuración) sólo protege frente a usted hermano pequeño? (Lea los usuarios de ordenadores casuales que no se molestan en tratar de hackear su programa en lugar de pagar el precio de mercancías de la parte). En este caso el uso de contraseña en texto plano o un hash SHA1 hace poca diferencia (tal vez un par de puntos porcentuales más gente no se molestará).

Si usted desea hacer su caja fuerte de código contra cualquier otra cosa, entonces tendrá que hacer mucho más. Un libro sobre la seguridad es un buen punto de partida, pero la única forma real para hacer esto es tomar una clase de seguridad, donde se enseñan técnicas de protección. Este es un campo muy especializado y rodar su propia versión es probable que sea contraproducente y le dará ninguna protección real (usando un hash es sólo el primer paso).

No es seguro si los almacena como texto sin formato, sólo puede volcar el archivo o utilizar una utilidad como cuerdas para buscar texto en el ejecutable.

tendrá que codificar de alguna manera.

Este es un ejemplo de código que pueden ayudar, utilizando OpenSSL.

#include <openssl/evp.h>

bool SHA256Hash(const char* buf, size_t buflen, char* res, size_t reslen)
{
    if (reslen >= 32)
    {
        EVP_MD_CTX mdctx;

        EVP_MD_CTX_init(&mdctx);

        EVP_DigestInit_ex(&mdctx, EVP_sha256(), NULL);
        EVP_DigestUpdate(&mdctx, buf, buflen);
        EVP_DigestFinal_ex(&mdctx, res, &len);

        EVP_MD_CTX_cleanup(&mdctx);

        return (len == 32);
    }

    return false;
}

Me tomó esta muestra de la biblioteca systools y tuvo que adaptarla. Así que no estoy seguro de que se compila sin modificaciones. Sin embargo, debe ayudarle.

Tenga en cuenta que, para determinar si el almacenamiento de un valor hash de alguna contraseña en su binario es segura, hay que saber lo que quiere para.

Si usted espera que lo quiera algunas funcionalidades de su programa a menos que se le da alguna contraseña especial, entonces es inútil: un atacante es probable que se retire todo el código de contraseña de verificación en lugar de tratar de adivinar o revertir la contraseña almacenada <. / p>

Trate de encontrar a cabo funciones de hashing y métodos de cifrado para proteger sus contraseñas y su almacenamiento.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top