Wie verschlüssel ich eine exe datei?

7 Antworten

Die EXE-Datei enthält Maschinencode, zumindest sofern es sich nicht um eine .NET Assembly handelt.

Der einzig sinnvolle Weg, sie zu "bearbeiten", liegt darin, sie zu disassemblieren (in Assemblersprache der jeweiligen Maschine zu übersetzen), den Assemblercode zu bearbeiten und sie anschließend wieder zu assemblieren.

Größere Änderungen sind auf diese Weise faktisch unmöglich. Kleinere Änderungen (z. B. eine Lizenzprüfung zu umgehen) sind einfach.

Einen wirklichen Schutz gegen Reverse-Engineering gibt es nicht. Was ein Computer ausführen kann, kann ein Mensch auch verstehen (und verändern). Es gibt so genannte Obfuscator, die den Maschinencode so verändern, dass er "komplizierter wird". Er macht das gleiche, wie vorher, nur eben auf sehr umständliche Art und Weise. Damit wird das Verständnis beim Reverse-Engineering erschwert. Ich rate davon allerdings ab, da so etwas negative Auswirkungen auf die Performance (der obfuskierte Code ist komplizierter und benötigt daher in der Regel sehr viel mehr Instruktionen, um das selbe zu tun) haben wird und in Grenzfällen auch die Programmsemantik verändern kann, z. B. wenn der Code sich selbst analysiert/verändert, also z. B. Reflection benutzt, Teile des Codes erst zur Laufzeit übersetzt (JIT-Compiliert) werden oder eine automatische Speicherbereinigung, ein eigener Scheduler oder andere komplexe Operationen zur Laufzeit durchgeführt werden, was gerade moderne Programmiersprachen/Compiler durchaus tun.

Bei manchen Compilern kann es sogar schon fatal sein, wenn man eine erzeugte Executable nachträglich "stripped", d. h. die Debugsymbole entfernt, weil sie Code generieren, der sich darauf verlässt, dass die Symboltabellen zur Laufzeit vorhanden sind oder dass das Speicherlayout sich nicht ändert. Aus diesem Grund rate ich von Obfuscation ab.

Das geht nicht.

Du kannst nur das Kompilat mit einem Obfuskator so unleserlich machen, dass sich ein Mensch darin nicht mehr zurecht findet und sich zumindest sehr schwer tut heraus zu finden wie du Probleme gelöst hast.

Etwas anderes ist aber das Ausführen eines Programms mittels einem Dropper oder ähnlichem, das wird von Viren oft gemacht.

Die Eigentliche Exe enthält nur ein Programm zum entschlüsseln einer DLL. Diese DLL wird jetzt zB Entschlüsselt in den Temporären Ordner geschrieben, dann von der Exe geladen und ausgeführt.

Beim Beenden der Exe wird die DLL Entladen und gelöscht. Vorteil, das Programm kann nach der Auslieferung nicht gelesen werden, außer jemand macht deine Verschlüsselung rückgängig.

Nachteil während der Ausführung ist deine DLL durchaus lesbar.

Ein anderer Ansatz ist es das Programm direkt in den Arbeitsspeicher zu laden, ohne eine eigene Datei zu erzeugen.

Das ist sicherer aber viel Aufwändiger und schützt ebenfalls nicht davor, dass jemand der dein Programm wirklich will, dieses nicht einfach aus dem RAM liest.

Komprimiere deine EXE per UPX - das Ergebnis ist eine neue, jederzeit ausführbare, aber viel schwieriger entschlüsselbare EXE, die genau das tut, was deine ursprüngliche auch tut. 

https://upx.github.io/

Verteile dein Programm nur in dieser komprimierten Form.

Ähm, es ist eine viertel Zeile Code nötig, um eine mit UPX gepackte EXE wieder zu "entpacken". :)

UPX kann man zwar nehmen, um aufgeblasene EXEn kleiner zu machen, wofür es ursprünglich auch entwickelt wurde, aber als Reversing-Schutz taugt das rein gar nichts. :)

5

Leider gibt es immernoch Antivirentools, die mit diesem Packer nicht klar kommen und einen False-Alarm erzeugen, der den Anwender so verunsichert, daß er mit dem Produkt nichts mehr zu tun haben will!

1

Was möchtest Du wissen?