Fertig Kompiliertes Script dekompilieren?

  • Hey Leute,

    Wollte mal anfangen mit MySQL und AutoIT zu arbeiten.
    Jetzt habe ich gelesen, dass man eine .EXE Datei wieder zurück in ein Script umschreiben lassen kann.

    Wenn das wirklich geht, dann kommt ja jeder an die Zugangsdaten von der MySQL Datenbank ran.

    Kann man das verhindern?
    Vielleicht sowas wie das Script verschlüsseln oder die Anwendung?

    MFG

  • Es gibt sogenannte Obfuscator die dein Scriptcode in Wirrwarr konvertieren der für das menschliche Auge unlesbar ist - dennoch bleibt die Funktionalität erhalten.
    Allerdings gibt es seit der 3.3.10.2 (nach meinem Wissensstand) keinen Decompiler für die aktuellen Versionen der funktioniert und der offizielle Obfuscator wurde vor langer Zeit schon eingestellt.

    Zwar gibt es noch von der Community gemachte Obfuscator aber da gibt es auch schon einige Deobfuscator dazu.

    Solltest du wirklich Angst um deine Zugangsdaten für deine Datenbank haben (ich gehe jetzt von einer Online-Datenbank aus), schreib ein PHP-Backend was über WebRequests deine Befehle annimmt und auf der Datenbank ausführt. Wenn es nur offline ist dann lass die Daten einfach drinne, denn es ist ja eine offline DB, kannst es im Source ja verschlüsseln so das der String nicht extrahierbar ist.

    Um das ganze aber nochmal abzuschließen: Wenn jemand gewillt ist deinen Code zu kriegen, dann wird er das auch schaffen. Nichts ist sicher. Aber ich bezweifle sehr stark das du Software entwickelst die Leute knacken wollen also solltest du dir um die Sachen keine allzugroßen Gedanken machen.

  • Danke für deine Antwort,

    ich gehe jetzt von einer Online-Datenbank aus

    Habe vergessen das zu sagen.
    Wollte keine Lokale verwenden da ich ein Root Server besitze und ein paar Game Server & Voice Server drüber laufen lasse.
    Mit MySQL habe ich schon gearbeitet (Mit LUA)

    Aber ich bezweifle sehr stark das du Software entwickelst die Leute knacken wollen.

    Ja bezweifle ich auch.
    Wollte aber sicher gehen das dort keiner rankommt ohne Probleme.
    Da ich das Programm eigentlich später veröffentlichen möchte.

    also solltest du dir um die Sachen keine allzugroßen Gedanken machen.

    Gut. Aber ich bin ein bisschen Paranoid. :D
    Ich denke Tägliche BackUps sollten helfen.

    Ich möchte ein Programm schreiben mit einer Login/Register Funktion.
    Wollte das Passwort zwar verschlüsseln und im verschlüsselten Zustand speichern lassen.
    Aber irgendwie vertrau ich dem nicht so ganz.

  • Ähm?

    Also nur damit ich das richtig verstehe...

    - Deine Software greift auf eine MySQL DB im Internet zu
    - Der Zweck der DB ist lediglich eine Benutzerverwaltung deiner Software, damit nur registrierte Benutzer die Software nutzen können?

    Die Standardvorgehensweise ist hier wie schon erwähnt wurde eine Web API. Sprich alle Datenbankoperationen werden lokal auf dem Server ausgeführt, deine Software auf dem Clientrechner hat aus Sicherheitsgründen keinerlei direkten DB Zugriff. So kannst du auch verhindern, dass x-beliebige Personen deinen SQL Server im Internet angreifen können, da du den SQL Server im Internet garnicht verfügbar machen musst. Das einzigste was von außen erreichbar sein muss ist deine Web API, welche lediglich von dir definierte Anweisungen entgegennimmt. Fremdzugriff auf die DB ist somit nahezu ausgeschlossen.

    Die Web API selbst nimmt in deinem Fall nur zwei Dinge entgegen:

    1. Neuregistrierungen
    2. Anmeldedaten von bereits registrierten Benutzern

    Optional: Nach erfolgreichem Login alle weiteren Anfragen die du mithilfe deiner DB beantworten möchtest.

    Was die Speicherung der Anmeldedaten in deiner DB anbelangt:

    Man speichert grundsätzlich keine Passwörter in einer Datenbank, weder verschlüsselt noch unverschlüsselt. Stattdessen erstellt der Server (hier deine Web API) einen Hash-Wert des Passwortes und speichert nur diesen in der DB, bzw. prüft bei zukünftigen Logins ob der Hash des angegebenen Passwortes mit dem in der DB identisch ist. Bei dieser Vorgehensweise muss sichergestellt werden, dass die Kommunikation mit deiner Web API verschlüsselt erfolgt, damit das Passwort im lokalen Netzwerk deines Clientrechners nicht mitgeschnitten werden kann. Die Web API sollte also ausschließlich per HTTPS erreichbar sein, desweiteren könntest du in deiner Anwendung noch einen API-Key für die Web API hinterlegen, damit deine Web API Fremdsoftware erkennt und direkt abweisen kann. Dadurch, dass du nur Hash-Werte speicherst kann auch im Falle eines Server Hacks niemand etwas mit deiner DB anfangen... das Passwort ist aus seinerm Hash-Wert in Normallfall nicht ohne enormen Aufwand rekontruierbar (sofern ein sicheres Hash-Verfahren genutzt wurde).

    Mit Autoit hat das nun allerdings nicht mehr viel zu tun. Die Web API Geschichte wirst du in der Regel mit einer Webprogrammiersprache realisieren (z.B. PHP). Sofern du einen Windows Server verwendest käme aber natürlich auch ein Autoit basierter Webserver hierfür in Frage. Aber der Aufwand dafür wäre es wohl nicht wert.