[C/C++] Exe "verschlüsseln"

posi90

Erfahrenes Mitglied
Hallo,

In meiner Anwendung befindet sich ein "geheimer" String.
Diesen habe ich bereits AES192 verschlüsselt.
Der Schlüssel und auch die verschlüsselten Daten stehen nun trotzdem im Klartext in der exe drin.

Wie kann ich mich gegen Ressource Hacker schützen und meine exe verschlüsseln oder zumindest die Strings unerkennbar machen?

Habe bereits Programme wie UPX, MEW und Packman gefunden, bin aber noch ein Anfänger in dem Gebiet. Könnt ihr mir vielleicht einen Tipp geben, welches Programm dafür am besten geeignet ist?

Grüße Poseidon
 
Wenn du die Strings im Quellcode angiebst, is klar, dass die in der .exe zu sehn sind. Entweder du liest die Daten aus einer separaten verschlüsselten Datei oder verschlüsselst sie und gibst sie als char-Array im Source an.

MfG Manuel

EDIT.: Um die Strings in der .exe zu sehen reicht ein normaler Texteditor. Also die Ressourcen für den Ressource-Hacker zu sperren würde nich viel bringen.
 
Zuletzt bearbeitet:
Hallo Manuel,

Die erste Variante mit seperater Datei gefällt mir nicht, da ich alles in einer exe haben will.

Bei der zweiten Variante, welche ich im Moment verwende, ist die geheime Botschaft bereits verschlüsselt. Der Schlüssel dazu muss sich trotzdem im Klartext in der Datei befinden oder? Darum verstehe ich den Sinn dahinter nicht ganz. Sobald man die Position und Länge des Schlüssels und der Daten hat, kann man sie einfach entschlüsseln.

mfg Poseidon
 
Hi

Wenn du irgendwelche Binärdaten als Schlüssel nimmst, ist es nicht einfach so erkennbar, wo der Schlüssel ist.
Auch die Verschlüsselungsmethode muss erst einmal bekannt werden...
Die "zweite Methode" ist damit, wenn man es geschickt anstellt, schon so sicher, dass das Programm dekompiliert werden müsste, um was herauszulesen.

Geschickt anstellen heißt in dem Fall zB:
-Schlüssel und Daten char-weise zuweisen.
-Die Zuweisungen nicht der Reihe nach machen (0123...), sondern durchgemischt (2103...).
-Am besten auch noch anderen Codeteilen (andere Variablen initialisieren, Dummycode etc...) durchgemischt.

Dass das Dekompilieren von C-Programmen sowieso eine Kunst für sich ist, ist ein weiterer Schutz.
So einfach wie in C#/Java geht da gar nichts.
Zusätzlich um Ganzen kannst du mit einem Obfuscator (Google...) das Dekompilieren erschweren.

Fazit: 100.00%-Schutz gibt es nicht, aber man kann es so schwer wie möglich machen.
Und je nach dem, was man am Ende bekommt (Einen höheren Punktestand beim Spielen oder eine Million von der Bank?) gibt man sowas relativ schnell auf. Es ist einfach zu langwierig/umständlich.

Gruß
 
Zuletzt bearbeitet:
Nein der Schlüssel muss sich nicht als Klartext in der Datei befinden. Du die Anwendung muss halt nur in der Lage sein den verschlüsselten Text zu entschlüsseln.

Beispiel.:
C++:
// irgendwelcher Source im Programm

// Wenn du es so machst landet der Text natürlich schön in Klartext in der .exe
char GeheimerText[128] = "Ich bin nich besonders geheim!";

// Verschlüssel den String doch schon vorher, wenn dieser fest einprogrammiert sein soll
// Den String habe ich mal mit meinem eigenen Verschlüsselungsalgorithmus verschlüsselt
char GeheimerText[128] = "â±å‰³æÆ÷æǵâ¶îеêǽõÒùæ÷åͱ£";

// GeheimenText entschlüsseln
char Entschlüsselt[128] = decrypt(GeheimerText, /*länge*/);

// irgendwelcher Source im Programm

MfG Manuel
 
Zuletzt bearbeitet von einem Moderator:
Meinen Decrypt Vorgang erfolgt folgendermaßen:

C++:
AES aes;
aes.SetParameters(256);//<- Schlüssellänge
aes.StartDecryption(key);//<- Schlüssel
aes.Decrypt(input,output,1);

Das ist die standard Variante der AES Verschlüsselung. Den Source Code hab ich auf lomont.org gefunden.

Hier brauche ich für den Decrypt Vorgang also den Schlüssel im Klartext.

Ich werde mich sofort über den Obfuscator informieren. Das Durchmischen kingt auch sehr interessant.

Danke auf jeden Fall euch beiden.

mfg Poseidon
 
Das bekannteste tool was solche sachen macht ist wohl Themida

http://www.oreans.com/downloads.php

Themida kann exe files (inclusive seiner daten und code segmente) verschlüsseln und zur laufzeit wieder entschlüsseln. Ist selbstverständlich nicht unknackbar, da der schlüssel ja gezwungermassen irgendwo in deinem Programm steckt, macht es jedoch ziemlich schwer.
 
Zurück