Seite 1 von 2
Im Kompilat klar lesbare Passwörter...
Verfasst: 03.01.2016 10:14
von es_91
Also, man muss ja manchmal etwas vor dem Nutzer verbergen. Etwa ein FTP-Passwort, wenn das Programm sich nur im Hintergrund beim FTP-Server melden soll, etwa um eine Anwesenheitsmeldung zu hinterlassen.
Mir ist klar, dass ich sowas besser über ein PHP-Skript machen sollte, aber die Frage geht in eine andere Richtung:
WARUM schreiben alle Compiler, die ich kenne, Strings in Reinschrift in das Executable (kann leider nur über Windows sprechen)?
Könnte man die nicht wenigstens byteverschieben oder irgendwie verschlüsseln, damit nicht jeder, der das Notepad öffnen kann, alles mitlesen darf? Das kann man händisch machen, ist klar, aber warum gibt es keinen impliziteren Weg, Strings im Executable nicht lesbar zu hinterlassen? Wenn ich da mein FTP-Passwort auch nur als Zeichenkette an die Funktion OpenFTP () übergebe kann jeder kleine Junge auf meinen FTP-Server zugreifen. Das ist doch fahrlässig.
Warum ist das so? Ist eine Auto-Verschlüsselung/-Konvertierung von Strings so zeitfressend, dass man das bei den Compilerbauern als nicht serienreif einstuft?
Re: Im Kompilat klar lesbare Passwörter...
Verfasst: 03.01.2016 10:42
von es_91
Ob das ein guter Weg wäre?
Code: Alles auswählen
Procedure$ ConvertString (String$, Key. c)
Protected offset
Protected len = Len (String$)
For offset = 0 To len
PokeC (@String$ + offset, PeekC (@String$ + offset) - Key)
Next
ProcedureReturn PeekS (@String$, len)
EndProcedure
Procedure$ ReconvertString (Convert$, Key. c)
Protected offset
Protected len = Len (Convert$)
For offset = 0 To len
PokeC (@Convert$ + offset, PeekC (@Convert$ + offset) + Key)
Next
ProcedureReturn PeekS (@Convert$, len)
EndProcedure
Debug ReconvertString ("81", 18)
Kompiliert als ASCII-Executable:

Re: Im Kompilat klar lesbare Passwörter...
Verfasst: 03.01.2016 12:25
von GPI
Warum sollten die Compiler die Strings irgendwie verschlüsseln? Das ist doch unsinnig. Die Exe muss doch mit den Strings arbeiten.
Und ganz ehrlich: Das mit FTP ist eine blöde Idee. Du kannst zwar das Passwort verschlüsselt in die Exe einbauen *ABER* du musst den Schlüssel zum entschlüsseln *auch* in der Exe speichern.
Sollte irgendwer mitbekommen, das dein Programm eine FTP-Verbindung zum schreiben öffnest und ein bischen Ahnung von der Sache hat, dann zerlegt er dir deinen FTP-Server. Das ist nur eine Frage der Zeit.
Abgesehen davon musst du verhindern, das zwei Programme zeitgleich auf den FTP-Server zugreifen, sonst wird dein Zähler zerstört.
Es gibt eine einfache Regel: Alles was man den User in die Hand drückt (dazu gehört die Exe) muss man als unsicher, manipulierbar und auslesbar ansehen. Passwörter in der Exe zu speichern ist schlicht zu gefährlich.
Kann PureBasic eigentlich Sftp? Wenn nein - würde es überhaupt etwas bringen das Passwort zu verschlüsseln wenn es für FTP unverschlüsselt gesendet wird?
Re: Im Kompilat klar lesbare Passwörter...
Verfasst: 03.01.2016 12:37
von ts-soft
GPI hat geschrieben:Kann PureBasic eigentlich Sftp? Wenn nein - würde es überhaupt etwas bringen das Passwort zu verschlüsseln wenn es für FTP unverschlüsselt gesendet wird?
Soweit ich weiß, kann PB weder SFTP noch FTPS. Verschlüsselung des Passwortes bringt also rein gar nichts, man kann
es spätestens bei der Übergabe als Klartext abgreifen. Diejenigen DAUs, die es so nicht in Erfahrung bringen, können
auch keine Strings aus der Exe lesen
Gruß
Thomas
Re: Im Kompilat klar lesbare Passwörter...
Verfasst: 03.01.2016 14:30
von mk-soft
Eine Möglichkeit ist es verschlüsselte String per Include einzubinden und zur Laufzeit entschlüsseln.
Code: Alles auswählen
DataSection
StartPass:
IncludeBinary "Data\passwort.sec"
EndPass:
EndDataSection
Re: Im Kompilat klar lesbare Passwörter...
Verfasst: 03.01.2016 14:32
von es_91
GPI hat geschrieben:Warum sollten die Compiler die Strings irgendwie verschlüsseln? Das ist doch unsinnig. Die Exe muss doch mit den Strings arbeiten.
Nja, die kann sie ja vorher entschlüsseln ...
GPI hat geschrieben:Du kannst zwar das Passwort verschlüsselt in die Exe einbauen *ABER* du musst den Schlüssel zum entschlüsseln *auch* in der Exe speichern.
Der liegt dann aber wenigstens nicht leserlich in Reinschrift drin, sondern muss mühseelig aus dem Maschinencode geklaubt werden ...
Abgesehen davon musst du verhindern, das zwei Programme zeitgleich auf den FTP-Server zugreifen, sonst wird dein Zähler zerstört.
Es können doch mehrere Instanzen einen FTP-Account gleichzeitig nutzen, oder irre ich?
Wenn das nicht der richtige Weg ist, sich anzumelden, also lieber ein PHP-Skript, welches eine Datei auf dem Server schreibt?
mk-soft hat geschrieben:Eine Möglichkeit ist es verschlüsselte String per Include einzubinden und zur Laufzeit entschlüsseln.
Das ist doch genau das Selbe, nur umständlicher, als wenn ich die verschlüsselten Zeichen direkt in einem String speichere, oder?
Re: Im Kompilat klar lesbare Passwörter...
Verfasst: 03.01.2016 16:43
von GPI
es_91 hat geschrieben:Nja, die kann sie ja vorher entschlüsseln ...
Unnötige Resourcenverschwendung
Der liegt dann aber wenigstens nicht leserlich in Reinschrift drin, sondern muss mühseelig aus dem Maschinencode geklaubt werden ...
Genau das wird aber früher oder später passieren. Das ist nur eine Frage der Zeit.
Es können doch mehrere Instanzen einen FTP-Account gleichzeitig nutzen, oder irre ich?
Dürfte das nicht auch konfigurationssache sein? Ansonsten seh ich eher das Problem, das auf die Datei zeitgleich zugegriffen wird.
Wenn das nicht der richtige Weg ist, sich anzumelden, also lieber ein PHP-Skript, welches eine Datei auf dem Server schreibt?
Auf jeden Fall.
mk-soft hat geschrieben:Das ist doch genau das Selbe, nur umständlicher, als wenn ich die verschlüsselten Zeichen direkt in einem String speichere, oder?
Jup, weil du auch hier erst entschlüsseln musst und der Schlüssel in der Exe ist.
Re: Im Kompilat klar lesbare Passwörter...
Verfasst: 04.01.2016 11:31
von TroaX
Allgemein ist das Speichern eines Passwortes für ein kleines Tool nicht gerade leicht umzusetzen. Aber erstmal zur Frage: Wurde ja schon beantwortet. Unnötiger Ressourcenverbrauch bei genereller Verschlüssellung und das für nur einen oder zwei Variablenwerte, die es brauchen. Schlüssel muss auch gespeichert werden, damit das entschlüsseln klappt. Wenn der Compiler dies von Haus aus regelt, ist die Wahrscheinlichkeit groß, das der Schlüssel am Anfang der Datei liegen wird und somit für Editoren oder sogar Hex-Editoren leicht auszulesen ist.
Ich habe dafür auch keine plausible Lösung. Aber wenn ich auf die schnelle einen Ansatz dafür finden müsste, würde ich das Programm normal nach dem Passwort fragen lassen und dieses dann zur Laufzeit generisch verschlüsseln sowie in eine extra Datei schreiben. Der Schlüssel würde auch dynamisch erzeugt werden. Die Frage ist dann nur, wohin mit dem Schlüssel. Denn da wäre spätestens mein Problem. Aber ich würde es wirklich zur Laufzeit der fertigen Anwednung verschlüsseln und nicht in die Executable packen.
Re: Im Kompilat klar lesbare Passwörter...
Verfasst: 04.01.2016 11:50
von Kurzer
es_91: Wenn Du nur die Strings vor DAUs verstecken willst, dann reicht wohl auch das packen der EXE mit einem EXE-Packer (UPX oder so). Evtl. gibts sogar Packer die man nicht so einfach wieder entpacken kann?
Re: Im Kompilat klar lesbare Passwörter...
Verfasst: 04.01.2016 11:55
von RSBasic
Das Problem bzw. der Nachteil von solchen zusätzlichen Executable-Packers wie UPX ist, dass die Gefahr groß ist, dass ein Antivirenprogramm eine Virusmeldung anzeigt.
Und wenn der "DAU"-User die angezeigte Meldung sieht, denkt er, die Anwendung wäre verseucht oder nicht sicher und würde die EXE-Datei löschen (lassen).