(const char *string) von system in EXE Datei einsehbar
-
hallo zusammen,
Ich habe ein C-Programm geschrieben, welches die system-funktion nutzt.
Komischerweise ist (const char *string) dieses Befehls in meiner Exedatei als Klartextpassage einsehbar.
Ich weiss, dass der system-Aufruf nicht zu empfehlen ist, da ich aber der Ansicht war, dass es "eh" nur eine Miniprogramm ist, welches zur Anbindung eines Netzlaufwerkes dienen soll, ist system() ok...Kann man es umgehen, dass der Parameter von system() in Klartext erschein oder soll ich gänzlich auf eine andere Methode umsteigen und ganz von system() ablassen ?
Grüße,
wiesel_123
-
Irgendwo müssen ja deine String-Literale untergebracht sein
Und da ist es für den Compiler am einfachsten, sie im Klartext im EXE-File abzuspeichern.
(wenn du nicht willst, daß der String sofort auffällt, müsstest du ihn verschlüsselt abspeichern und vor dem system()-Aufruf wieder entschlüsseln)
-
Wie ist es denn am sichersten, so einen verschlüsselten String abzuspeichern ?
Einfach z.B. per ROT13 -was eigentlich schon genügen würde - verschlüsseln, den String in eine Datei schreiben und vor dem system()-Aufruf wieder einlesen ?Wenn ja, würde es dann nicht das Gleiche zur Folge haben ? Weil in dem Augenblick, wo ich die verschlüsselte Sequenz wieder einlese und entschlüssele, um es mit dem system()-Befehl an die cmd zu übergeben, ist es ja wieder im Klartext vorhanden ?
Hoffe ich hab das so richtig verstanden
?!
-
Wie du deinen Kommandostring intern schützt, ist dir selber überlassen
(ROT13 könnte ausreichen, eventuell auch eine einfache XOR-Verschlüsselung)
An den system()-Aufruf mußt du das Kommando allerdings im Klartext übertragen, sonst versteht dein System dich nicht. Du könntest höchstens den Aufruf ganz vermeiden, indem du ihn in C++ nachbildest (da hängt es von der Aufgabe ab, die du bewerkstelligen willst, wie das geht).
-
Mh, da es anscheinend nicht über system realisierbar ist, ohne dass jemand reinschauen kann, bräuchte ich ein wenig Hilfestellung beim C++ Ansatz
Das Programm tut eigentlich nicht mehr, als einen system()-Aufruf zur Netzlaufwerkanbindung umzusetzen:
system("net use x: \\\\Server\\share USER PASSWORT");
Da halt dann Domänenpasswort und -benutzername im Klartext einsehbar sind, ist es nicht so das Gelbe vom Ei
-
Es gibt fertige Klassen zum Verschlüsseln von Stings - benutz einfach eine solche
wenn du ein wenig mit Google suchst wirst du schnell fündig
-
Versuche mal das hier:
char* string = {'a', 'b', 'c' };
EDIT:
Richtig heißt es:char string [] = {'a', 'b', 'c', 0 };
Wobei der String dann "abc" wäre.