Cracksicher



  • Ich kenn mich nicht wirklich mit cracker und deren technicken aus. Ich kann sowas nur oberflaechlich.
    Also ich hab ein kleines Program mit VC++ 6.0 geproggt und das mit dem Release mode compiliert. Dann hab ich einfach mal das programm mit W32dasm aufgemacht und bin total erschreckt.
    Zu erst hab ich gesehen das mein MySQL Passwort unverschluesselt drin stand. Also hab ich eine kleine verschluesselung gebaut die aus einem int Wert einen char wert erzeugt und das alles direkt zu der mysql funktion gibt. Ich weiss aber nicht ob man das nicht auch irgendwie ueber einen Debugger (so wie Softice) rausbekommen kann.
    So dann hab ich am anfang eine Versionsabfrage, so dass man nur die aktuelle version nutzten kann, dass niemand misst baut wenn ich einen fehler im programm hatte. Also hab ich das programm in einem Hexeditor geoeffnet und musste einfach nur eine 75 in eine 74 umwandeln und dann geht das nur noch mit der falschen version.
    Ich weiss das man die exe verschluesseln kann, so das der startpunkt wo anders vorgetaeucht ist aber da gibts dann auch wieder file analyser die das wieder entschluesseln, ohne grossen aufwand.
    Naja ich bin ein bisschen ratlos was ich dagegen machen soll :(.
    😕 😕 😕 😕 😕 😕



  • Zum einen solltest du lieber programmieren statt proggen, aber das ist Ansichtssache. 😃

    Es gibt mehrere Wege, Crackern das korrumpieren deiner Anwendung zu erschweren aber verhindern kannst du es nie. Wenn du dein MySQL-Passwort im Quelltext als Stringliteral stehen hast, wird es auch so in die EXE hineinkompiliert ohne irgendwelche Vorkehrungen, das Passwort zu verbergen.

    Generell kann man aber schonmal sagen, dass es eine ungünstige Lösung ist, wenn man eine Anwendung erstellt hat, die das MySQL-Kennwort enthält und dieses dem Benutzer nicht zugänglich sein darf. Da sollte es einen besseren Weg geben, aber ich kenne ja dein Vorhaben nicht.

    Baust du zum Beispiel eine Hexeditor-Verbergung für deine Stringliterale über Rotationschiffre oder Ähnliches ein, wird man auch dies mit dem Debugger rausfinden können, da es einen Zeitpunkt nach Ablauf deines Entschlüsselungsalgorithmus gibt, an dem das Passwort ohne Schutz im Speicher steht.

    Dann gibt es noch die Möglichkeit, EXE-Dateien mit einem Packer zu verschlüsseln. Kennt der Angreifer aber den genutzten Packer kann er relativ leicht die ursprüngliche EXE-Datei wiederherstellen, da die meisten Programme diese Option anbieten.

    Manche Programmierer nutzen auch Bugs in gängigen Disassemblern aus, sodass diese Abstürzen, wobei das natürlich auch nicht universell einsetzbar ist.

    Also meiner Meinung nach solltest du die folgenden Möglichkeiten probieren:

    -Die EXE-Datei könnte einen Hash von sich selbst berechnen, der von einem Server validiert wird. Verschlüsselst du diese Authentifizierungsanfrage, ist das eine erneute Erschwernis. Aber da kann natürlich wieder einer kommen und deine Verbindungsverschlüsselung knacken(Der Key dafür muss ja irgendwo in deiner EXE sein) oder er ersetzt den Rumpf deiner Validierungsfunktion "bool IsValid()" einfach durch "return 1".

    -Dein Programm sollte kein gemeinsam genutztes MySQL-Kennwort enthalten. Entweder bekommt jeder Benutzer ein eigenes Kennwort oder du erstellst einen Benutzer, der für dieses Programm gedacht ist und auch auf die Datenbanken nur den Zugriff hat, den der Benutzer haben darf.

    Also absolute Sicherheit gibt es nicht, aber man kann sich durch komplexe Verbergungsstrukturen und Auslagerung auf serverseitige Applikationen ein gewisses Maß an Sicherheit erreichen.



  • Ok vielleicht sollte ich noch was zu meinem Vorhaben sagen. Es ist schwer zu erklaeren weil es alles auf einem onlinespiel (galaxy-network) basiert und ich nicht das ganze spielsystem erklaeren moechte.
    Also ich habe eine Homepage wo sich jeder regestrierter Benutzer einloggen kann. Das Programm soll jedem noch die moeglichkeit geben etwas in die MySQL Datenbank einzufuegen oder zu updaten. So sollte jemand nicht mehr die rechte besitzten das programm benutzen zu duerfen, wird er aus der Datenbank geloescht d.h. jeder hat seinen eigenen account mit eigenem passwort. Jedes Passwort ist als md5 hash in der datenbank gespeichert.
    Das Problem wovor ich angst hab, ist wenn jemand gekickt wird sind die meistens sauer und versuchen sich zu raechen und da ist das doch der Perfekte angriffspunkt. Und ich will wirklich nicht das jemand das MySQL passwort rausbekommt, weil man damit nicht nur spieldaten aendern kann sondern auch Werte von einer Firma, die ihre daten ebenso auf der Datenbank hat.

    Ich habe gerade mal alles im Debug-Modus kompiliert und da kann man keine Strings sehen und es ist relativ sicher. Wie sicher ist es den.
    Ist vllt nicht die perfekte loesung da es 4x groesser ist ;(.



  • Dann mach die Sache in php oder ähnlichem, das ist extra für sowas gemacht.



  • dann soll die anwendung nur das passwort des users senden. das muss ja genuegen.

    auf dem server laeuft dann ein php script oder aehnliches, dass die aktionen dann wirklich ausfuehrt.

    so sendet der user nur daten, die ihm sowieso bekannt sind und wenn du den user sperrst, dann ist sein passwort ungueltig und er kann nichts mehr machen...

    den mysql server von aussen zugaenglich zu machen, ist sowieso etwas, dass nicht sein muss. einfach alles ueber ein php script machen (anwendung ruft script auf - hier koennen dann diverse authentifizierungen stattfinden)

    zur versions nummer:
    wenn du dann ein php script verwendest, kann dieses alle ungueltigen aktionen abfangen und du hast so kein versionsproblem mehr. denn alle aktionen werden vom php script ausgefuehrt und das ist immer auf den neuesten stand.



  • das klingt mir nach einer guten loesung aber wie rufe ich eine php-script ueber C++ auf?



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum Rund um die Programmierung verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • XzenTorXz schrieb:

    das klingt mir nach einer guten loesung aber wie rufe ich eine php-script ueber C++ auf?

    wie ruft ein browser ein PHP script auf?



  • na über HTTP 😉



  • hmm wahrscheinlich so ähnlich wie man in c++ ein cgi script aufruft

    mit einer lib

    musst google.de
    dann schauen welche lib's es da gibt
    dann musst die daten die du schicken willst ( die parameter, z.b. das PW ) über http oder https zum server schicken der das script hat und dieses dann ausführt

    quasi

    dein_pc.sendenAnServer() --> Server_rufen_script_auf(mit den paramentern --> script schreibt in DB

    so ungefähr müsste das aussehen

    kannst dir ja mal das hier anschauen

    http://curl.haxx.se/libcurl/


Anmelden zum Antworten