Wichtige Daten in .exe's
-
hoi,
folgendes: ich hab letztens bemerkt das alle strings die ich habe in der exe datei sichtbar sind - so auch eventuelle ftp/mysql daten samt passwort etc. das darf natürlich nicht sein.
tjo die frage is jetzt natürlich wie ich das verhindern kann?
thx bw
-
Hi,
ich glaube soetwas nennt man "weichcoden":
Man nimmt einfach die Ascii-Werte der einzelnen Zeichen des Wortes und setzt sie zu einem String zusammen, mit dem man dann arbeiten kann.
char s(33); // Ausrufezeichen
Gruß
ravel
-
Hi!
Ravel hat schon recht mit dem softcoden.
Allerdings solltest du beachten, dass das auf keinen Fall nur annähernd sicher ist. Mit nem simplen Debugger kannst du so die Zugangsdaten wieder finden.
Informationsreich zu dem Thema:
http://www.s-a-ve.com/faq/Anti-Cracking-Tips-1.txt
http://www.s-a-ve.com/faq/Anti-Cracking-Tips-2.htmund auch:
http://www.s-a-ve.com/faq/EXE-Packer_ASPACK.txttschüss
Robert
-
hm ok ich hab jetzt alles was ich brauche als char ... aber wie kann ich das in ein const char* umwandeln? als solches verlangt die funktion das nämlich
thx
-
Hi!
const char x[6] = {72, 65, 76, 76, 79}; //Hallo
Wobei ich mir da jetzt nichtmal huntertpro sicher bin, ob man das vielleicht in nem Hex-Editor lesen kann...
ansonsten müsstest du erst normalen char x[6] machen, dann einzeln füllen, also x[0] = 72 usw. und dann const char y[6] = x;
Achja und const char* bekommst du dann ja mit &x - dürfte ja eh klar sein...
tschüss
Robert
-
es hat leider nix gebracht ... die daten stehen weiterhin in der exe und sind für jeden lesbar
-
Hallo!
Hast du's auch schon mit der 2. von mir genannten Methode versucht?
Mit x[1] = 76 usw...
Hast du dir die Links schon angeschaut, die ich dir aufgelistet habe?tschüss
Robert
-
Hi,
ich habe rowisofts Lösung noch nicht ausprobiert aber, hiermit findet man das Wort "HALLO" nicht in der *.exe.
AnsiString text; text = String(char(72))+char(65)+char(76)+char(76)+char(79); Edit1->Text=text;
EDIT: Stimmt, das hier klappt wirklich nicht:
char x[6] = {72, 65, 76, 76, 79};
Gruß
ravel
-
Hallo!
Ja, stimmt - nimm am besten Ravels Code und const char* bekommst du dann mit
const char *x = text.c_str();
Ist aber alles nicht sicher!! Mit nem Debugger hat's sogar ein Laie im Nu raus!
tschüss
Robert
-
hm weiß nich wenn irgendwer von euch noch ne sicherere methode weiß unbedingt bescheid sagen
aber ich mein so ist es wenigstens schonmal etwas sicherer wenn man das nicht macht kann ja echt jeder lamer kommen der die endung in .txt umbenennen kann ... aber das kann doch nich sein das es da nix sicheres gibt??mfg
-
Passwörter und ähnlich sensible Daten sollte man überhaupt nicht in der EXE-Datei speichern sondern verschlüsseln und in externe Dateien auslagern. IMHO macht es überhaupt keinen Sinn, soetwas "hart" in der EXE zu haben, da niemand garantieren kann, dass sich diese Daten niemals ändern...
-
Hallo!
IMHO macht es überhaupt keinen Sinn, soetwas "hart" in der EXE zu haben, da niemand garantieren kann, dass sich diese Daten niemals ändern...
Das ist kein wirkliches Argument: Wenn sich die Daten ändern, musst du deinen Kunden unweigerlich das neue Passwort zusenden. D.H. die verschlüsselte Datei. Was ändert sich, wenn du nicht die verschlüsselte Datei, sondern die Exe-Datei verschickst? Wo ist der Unterschied?
Ich bin überzeugt, dass du die Verschlüsselung in der eigenen Exe-Datei wesentlich effizienter machen kannst, als in einer externen Datei. Siehe dazu auch die von mir geposteten Links zu den entsprechenden FAQ-Beiträgen bei SAVE.
Am Besten ist es natürlich, das ganze zu vermeiden, indem man gar keine Passwörter zu irgendwelchen FTP-Servern in der Software speichert. Und wenn dann nur zu einem eigenen FTP-Bereich für den Kunden, so dass der das Passwort auch wissen darf, weil er ohnehin nichts zerstören kann, als seine eigenen Daten.
tschüss
Robert
-
rowisoft schrieb:
Was ändert sich, wenn du nicht die verschlüsselte Datei, sondern die Exe-Datei verschickst? Wo ist der Unterschied?
Dass Exe-Dateien in der Regel deutlich grösser sind als eine Textdatei mit (ggf. verschlüsselten) Zugangsdaten?
Dass man das Programm bei jeder Änderung der Zugangsdaten neu kompilieren muss?
Dass man die Verwaltung der Zugangsdaten nicht ggf. auch dritten überlassen kann?
Dass es ungleich schwerer ist, benutzerspezifisch gestaffelte Zugänge zu ermöglichen?
Dass prinzipiell die Möglichkeit besteht, die Zugangsdaten doch allein anhand der Exe zu knacken, weil sie halt drinstehen?
Usw. usf.rowisoft schrieb:
Am Besten ist es natürlich, das ganze zu vermeiden, indem man gar keine Passwörter zu irgendwelchen FTP-Servern in der Software speichert.
Ähh ja, genau das sagte Dasd doch!?
-
yo also ma folgendes:
ich hab keine ftp-daten in meinem projekt drinnen! ich hab lediglich die daten von meiner mysql-db drinnen da ich per mysql++ auf meine datenbank zugreifen muss (ergibt sinn, odda? :D) nyo aber die soll halt auch nich jeder depp rausfinden können. nayo und das pwd zu der ändert sich eigentlich nie und wenn dann würde ich sowieso eine neue version der software rausgeben müssen, die von meinem auto-updater erkannt würde und der sich anschließend die .exe datei ohnehin neu ziehen müsste ... also kommts da auch ziemlich aufs gleiche.
naja das problem bei solchen verschlüsselungen ist halt auch wieder, das diese geknackt werden können also so secure ist das nicht ... aber ich denke das ich das so machen werde ich werd auf jeden fall drüber nachdenkensonst noch vorschläge (oder anregungen :D)
mfg bw
-
BW schrieb:
ich hab keine ftp-daten in meinem projekt drinnen! ich hab lediglich die daten von meiner mysql-db drinnen
Was für Zugangsdaten das genau sind ist doch generell egal.
und das pwd zu der ändert sich eigentlich nie
Andere berühmte Aussagen: "Computer werden nie mehr als 640kB Speicher brauchen", "Zwei Stellen reichen aus, bis zum Jahr 2000 läuft das Programm ohnehin nicht".
wenn dann würde ich sowieso eine neue version der software rausgeben müssen
Bei extern übermittelten Zugangsdaten eben nicht.
Insgesamt sehe ich bei dem von dir beschriebenen Anwendungsszenario aber überhaupt keinen Sinn für die Geheimhaltung der Zugangsdaten. Wenn jeder User über das Programm Zugang zur DB erhalten soll und dabei alle denselben Account verwenden (was sie ja offenbar tun, oder wolltest du jeden Anwender eine eigene Exe mit seinen speziellen Zugangsdaten compilieren?), dann richte einfach einen entsprechenden Account in MySQL ein, mit den erforderlichen Berechtigungen bzw. Restriktionen. Wenn die DB korrekt gesichert ist spielt es doch keine Rolle, wer darauf zugreift.
Falls du wirklich der Meinung bist, etwas geheimhalten zu müssen, dann denk bitte dran, auch die Datenübertragung zwischen Client und Server/DB zu verschlüsseln. Die erfolgt sonst nämlich im Klartext, einschliesslich der von dir zuvor mühevoll in der Exe verschlüsselten Zugangsdaten.
-
Dieser Thread wurde von Moderator/in Jansen aus dem Forum Borland C++ Builder (VCL/CLX) 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.
-
Ravel schrieb:
Hi,
ich habe rowisofts Lösung noch nicht ausprobiert aber, hiermit findet man das Wort "HALLO" nicht in der *.exe.
AnsiString text; text = String(char(72))+char(65)+char(76)+char(76)+char(79); Edit1->Text=text;
Ergibt bestimmt sehr leserlichen Code bei längeren SQL-Statements!
;))
-
Hi!
Ergibt bestimmt sehr leserlichen Code bei längeren SQL-Statements!
Du brauchst deswegen ja nicht gleich alle SQL-Statements verschlüsseln...
tschüss
Robert
-
@jansen folgendes: natürlich hat jeder user hier zugriff auf die db aber dieser datenbank-zugriff dient hier lediglich der speicherung von userdaten auf dem server (username/passwort etc.) das heißt der user kann NICHT eigenmächtig in irgendeiner weise auf die db zugreifen - und so soll das auch bleiben
mfg
-
wie ist es eigentlich bei templates?wie sichtbar is da der code?
müsste es da nich schön viele sprünge geben?template<char a> class safe_char{ string getString{ return string(a); } }; template<class a,class b> class safe_string{ public: string getString(){ return a.getString+b.getString; } }; //in der main string a=safe_string<char<H>,safe_string<safe_string<char<A>,char<L> >,safe_string<char<L>,char<O> > >;