Stringtable in Exe sichtbar
-
Hi ho,
nach langer Zeit mal wieder ne Frage im Fachbereich.
Ich hab ein Programm geschrieben welches eine Stringtable nutzt.
Nun kompiliere ich die im Release und wenn ich die Exe im Notepad aufmache hab ich die Infos der Stringtable ganz unten im klartext...das ist aber mist.Wie kann ich das verhindern? Manuelle verschlüsslung?
Danke
Gruß
christian
-
Es gibt verschiede Möglichkeiten:
Zunächst wo man mit der Stringtable "sicher"
verstecken kann:- In einer DLL, die irgendwo in
"C:\Windows\system32\..." liegt.
Bei dieser System und Verstecktattribut setzen.- In der Reistry unterbringen. Ein Pfad,
der so gut wie nie gefunden wird,ist
"HKEY_CLASSES_ROOT/CLSID/#Dein_Programm_Name#/...".- Als Textdatei in das Projekt einfügen,
(Ressurcentab -> Kontextmenu ->
Einfügen -> Benuzerdefiniert ...)
und daraus dann während der Laufzeit lesen.Da selbst der beste Ort in der Registy nichts bringt,
wenn in der Registry gesucht wird,
sollte sie verschlüsselt werden:- Zeichen mittels "xor" manipulieren.
Beispiel:
TCHAR _s[_MAX]; TCHAR _k[_MAX]; // _s sei der String. // _k sei der kodierte String. // _MAX sei die Maximale Länge. TINT _i = 0; // _i dei der Counter. /*A:*/ for(;_s[_i];_k[_i]=_s[_i] xor _i++); /*B:*/ for(;_s[_i];_k[_i]=_s[_MAX-_i] xor _i++);- Zeichen werden umtauscht, A-> Z, b -> y
- Microsoft hat doch eine Klasse, DLL oder
wwi (was weiß ich) zum chefrieren
bereitgestellt ... .- Anstatt die Zeichen zu speichern, nur
die Relationen zueinander. Beispiel:
Das erste Element ist das erste Zeichen,
die darauffolgenden sind nur die Abstände
der jeweiligen (ASCII-) Zeichen als Integer.
Zeichenkette: "ABC"
IntegerArray: {'A',1,1}, denn
'A' + 1 = 'B'oder:
TCHAR _s[_MAX]; TINT _k[_MAX]; // Diesmal TINT TINT _i = 1; //offendlich 'signed' _k[0] = _s[0]; for(;_s[_i];_k[_i]=(TINT)_S[_i] -(TINT)_S[_i-1],_i++);- DER BESTE WEG IST ABER: "<< x" DIES VERSCHIEBT
ALLE BITS UM X STELLEN,
DADURCH WIRD ALLES UNLESERLICH GEMACHT!!!#define __S 3 // __S sei die Stellen die verschoben werdeb sollen TCHAR _s[_MAX]; TINT _k[_MAX]; TINT _i = 0; ASSERT(__S < sizeof(TINT)); // Sonst würde es nix werden for(;_s[_i];_k[_i]=((TINT)_S[_i])<<__S || ((TINT)_S[_i])>>__S); // Es muss "doppelt" sein, // denn sonst würden die Bits // links bei "<<" wegfallen: // 0xFF00 << 1; // 0xF000 // 0xF000 << 1; // 0x0000Die Rechtschreib-, Syntax- oder logische Fehler waren beabsichtigt! ;->
-
C-O-M-M-A-N-D-E-R schrieb:
Nun kompiliere ich die im Release und wenn ich die Exe im Notepad aufmache hab ich die Infos der Stringtable ganz unten im klartext...das ist aber mist.
Mal nur so am Rande: Warum ist das für Dich ein Problem?
-
Hi,
weil das kleine Programm was ich geschrieben habe FTP Zugangsdaten enthält.
Sinn und Zweck des Tools ist es, damit Kunden keinerlei Daten zu gesicht bekommen
Naja und ich dachte ich könnte die schön in die String Table packen, aber wenn die dann im Klartext quasi abzulesen sind nene...
-
Also ich lege solche Daten immer in einer extra Datei ab, die mit AES verschlüsselt wird.
Den Artikel hatte ich damals als Hilfe genommen:
http://www.codeproject.com/cpp/filecryptapp.asp
-
Na ja ein User der schon so erfahren ist in der Exe nach dem Passwort zu suchen, der kommt auch auf die Idee einen Sniffer zu benutzen. Das bringt doch alles nix. Ihr müsst auf jeden Fall darauf vorbeitet sein das ein User mit einem normalen FTP Client auf euren Server geht.
-
Wenn schon Internet besteht kann man sich diese Daten auch mit einem SSL-Webservice holen. Die FTP ist dann aber SFTP sonst bringt das nichts.