Frage

Ich weiß, wie C und C ++ Quelldateien mit GCC und CC im Terminal kompilieren, jedoch würde Ich mag wissen, ob ihre sichere Passwörter in diesen Dateien enthalten, einmal zusammengestellt.

Zum Beispiel .. i überprüfen Benutzereingabe für ein bestimmtes Passwort z 123, aber es scheint, C / C ++ Programme zusammengestellt ist möglich dekompilierten werden.

Gibt es trotzdem ein C / C ++ Quelldatei zu kompilieren, während die Quelle vollständig verborgen zu halten .. Wenn nicht, könnte jemand bietet ein kleines Beispiel die Eingabe von Verschlüsselung, dann Überprüfung gegen das Passwort z: (SHA1, MD5)

War es hilfreich?

Lösung

Es ist keine sensiblen statischen Daten innerhalb Code zu halten empfohlen. Sie können Konfigurationsdateien für diese verwenden. Dort können Sie speichern, was Sie wollen.

Aber wenn Sie wirklich wollen, dass zuerst tun nicht vergessen, dass der Code kann leicht durch die Untersuchung mit einem Debugger und es zu ändern geändert werden. Nur Programme, dass der Benutzer keinen Zugriff zu können berücksichtigt werden sicherer (Web-Sites zum Beispiel).

Die Mehrheit der Login-Passwörter (von verschiedenen Seiten) wird in klar nicht in der Datenbank gespeichert, sondern verschlüsselte mit Algorithmen MD5, SHA1, Blowfish etc.

Ich würde Sie eine dieser verwenden vorschlagen Algorithmen von OpenSSL Bibliothek.

Was ich tun würde, ist mit einigem Public-Key-Verschlüsselungsalgorithmus . Dies wird wahrscheinlich ein wenig länger dauern, geknackt werden, weil meiner Meinung nach nichts 100% sicher ist, wenn es um Software-Schutz zu sprechen.

Andere Tipps

Nein, Sie nicht sicher können mit einem Passwort in der Quelldatei enthalten. Strings in ausführbarer Datei ist im Klartext, jeder mit einem Texteditor leicht an Ihrem Passwort suchen.

Ein nicht ganz so sicher, würde aber einige Leute mit Füßen treten, ist die verschlüsselte Zeichenfolge stattdessen zu speichern. Also, im Grunde:

enc = "03ac674216f3e15c761ee1a5e255f067953623c8b388b4459e13f978d7c846f4"

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

das einige Leute davon abhalten wird, ist aber nicht wirklich viel sicherer ist es relativ trivial für den Montag Hacker des ‚enc‘ string in der ausführbaren Datei mit einer anderen sha256-codierten Zeichenfolge mit einem bekannten Wert unverschlüsselt zu ersetzen.

Auch wenn Sie einen separaten Authentifizierungsserver verwenden, ist es ein falscher Authentifizierungsserver Setup nicht schwer und lassen Sie Ihr Programm zu diesem falschen Authentifizierungs-Server verbinden.

Auch wenn Sie SHA1 verwenden, um einen Hash zu erzeugen, ist es nicht wirklich alles ist, was sicher, wenn Sie es in einer normalen Art und Weise zu tun (eine Funktion schreiben, ein Passwort zu überprüfen) ein bestimmte oder sachkundiger Hacker, der Zugang zu der ausführbaren Datei in der Lage, erhalten drum herum (ersetzen sie Ihre Hash mit einem bekannten Hash oder einfach nur die check () -Aufruf mit einem Aufruf ersetzen, dass true zurück.

Die Frage ist, wer Sie versuchen, gegen zu schützen? Ihr kleiner Bruder, ein Hacker, internationale Spione, Industriespionage?

Mit SHA1 mit dem Hash nur darin enthaltenen im Code (oder eine Konfigurationsdatei) nur gegen Ihnen kleinen Bruder schützen? (Lesen lässig Computer-Nutzer, die nicht gestört werden kann, um zu versuchen, Ihr Programm zu hacken, anstatt die Aktien ware Preis zahlen). In diesem Fall mit Klartext-Passwort oder einen SHA1-Hash macht kaum einen Unterschied (vielleicht ein paar Prozent nicht stören mehr Personen).

Wenn Sie Ihren Code sicher gegen etwas machen wollen, sonst dann müssen Sie mehr viel zu tun. Ein Buch über die Sicherheit ist ein guter Ausgangspunkt, aber der einzige Weg, dies zu tun ist, eine Sicherheitsklasse zu nehmen, wo Schutztechniken gelehrt werden. Dies ist ein sehr spezialisiertes Feld und Ihre eigene Version rollen ist wahrscheinlich kontraproduktiv zu sein und gibt Ihnen keinen wirklichen Schutz (unter Verwendung einen Hash ist nur der erste Schritt).

Es ist nicht sicher, wenn Sie sie als Klartext speichern, können Sie einfach die Datei-Dump oder ein Dienstprogramm wie Strings verwenden, um Text in der ausführbaren Datei zu finden.

Sie haben sie in irgendeiner Weise zu kodieren.

Hier ist ein Codebeispiel, das Ihnen helfen könnte, OpenSSL verwendet wird.

#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;
}

Ich nahm diese Probe aus der systools Bibliothek und hatte es anzupassen. Also ich bin nicht sicher, kompiliert es ohne Modifikationen. Doch es sollte Ihnen helfen.

Bitte beachten Sie, dass, um zu bestimmen, ob ein Hash-Wert eines Passworts in Ihrem binäre Speicherung sicher ist, müssen wir wissen, was Sie wollen, dass es für.

Wenn Sie es erwarten, dass einige Funktionen des Programms zu verbieten, es sei denn, einige spezielle Passwort gegeben ist, dann ist es nutzlos: ein Angreifer wahrscheinlich das gesamte Passwort-Check-Code zu entfernen, anstatt zu versuchen, die gespeicherte Passwort zu erraten, oder umgekehrt <. / p>

Versuchen Sie Hashing-Funktionen zu finden und Chiffrierung Methoden für Ihre Passwörter und deren Lagerung zu sichern.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top