Nicht hackbares Programm möglich?

...komplette Frage anzeigen

5 Antworten

Es gibt sogenannte CrackMes, das sind Programme, die zu einer Passwort-Eingabe auffordern, und im Erfolgsfall einen einfachen Text oder gar ein Bild anzeigen.

Diese CrackMes werden von Reversern für Reverser zu Übungszwecken erstellt. Es gibt sie in allem Möglichen Programmiersprachen für alle möglichen Plattformen und natürlich in verschiedenen Schwierigkeitsgraden.

Normalerweise nutzt man Disassembler oder Decompiler, um solche Programme zu knacken. Für sehr einfache reicht auch ein Debugger, oder einfach nur ein Hexeditor bzw. andere gängige Kommandozeilentools wie "ltrace" unter Linux.

Generell kann man einem Programm IMMER alles vorgaukeln. Du kannst ein Programm während der Ausführung dazu bringen, dass es unmöglich merkt, dass es gerade genau untersucht wird und jede einzelne CPU-Instruktion und jeden Wert jeder Variablen oder Konstanten kannst du prüfen, ändern, manipulieren. Du kannst das Programm anhalten, weiter laufen lassen, rückwärts laufen lassen, Abschnitte aufzeichnen und beliebig oft wiederholt ablaufen lassen ... und von alledem merkt das Programm selber gar nichts!

Dass ein Programm die Kontrolle über sich selbst hat, ist eine reine Illusion. Wenn zum Beispiel - was sehr oft vorkommt - in deinem Programm irgendwo steht:

if (isDebuggerActive()) {
exit(1);
}

... dann kann sich das Programm unmöglich darauf verlassen, weil die Bedingung sowieso übersprungen wird, auch wenn die Funktion "true" zurück liefert! Solche Sachen lassen sich trivial umgehen, und normalerweise beschäftigt sich ein Cracker auch nicht damit, da das ein automatisiertes Skript erledigt. Der Schutz von soetwas ist exakt Null. :)

Ein Programm, welches im Debugger läuft, ist wie ein völlig unter Drogen gesetzter Mensch, der alles glaubt, was man ihm sagt und keinerlei eigenen Willen mehr hat.

Trotzdem ist das Szenario aus deinem Beispiel möglich: Und zwar kann man Code und Daten mit einem guten Algorithmus verschlüsseln, und bei einem entsprechend langen Passwort bringt dann auch die vollständige Schlüsselsuche nichts mehr.

Allerdings müsstest du für jeden deiner Kunden eine neue individuell verschlüsselte EXE-Datei erzeugen. Und selbst dann, wird früher oder später einer dieser Kunden gehackt werden, wobei ihm durch einen Trojaner die EXE-Datei und das Passwort gemopst wird, woraufhin wenige Tage später eine "gecrackte" Version im Internet erscheinen wird.

Wie man es dreht und wendet, es gibt keinen Funktionsfähigen Kopierschutz. Verschwende deine Zeit nicht damit, und vergeude keine Gedanken daran.

Um nochmal auf die CrackMes zurück zu kommen: Ich hatte noch nie eins, was ich nicht knacken konnte! Es hat teilweise zwar Monate gedauert, aber im Endeffekt lagen sie alle darnieder. :)

Allerdings siehst du daran schon, dass gute Ideen durchaus die Zeit zum knacken enorm herauszögern können. Allerdings knacken fast alle Cracker kommerzielle Programme aus "Sport". Denen ist Zeit unwichtig. Es ist eine Art Wettbewerb, wer welches Programm zuerst knackt. Und dabei ziest du als Software-Entwickler immer den kürzeren.

Du kannst also nur hoffen, dass dein Programm ein Nischendasein führt, und ja nicht allzu beliebt / berühmt wird, denn dann ist es nur eine Frage der Zeit, bis die ersten Cracks auftauchen.

Wenn du selber mal CrackMes ausprobieren willst, und deine Fähigkeiten daran üben willst, such mal bei Google nach "crackme". Das ist nichts Illegales und es gibt auch mehrere deutsche offizielle Seiten, die ein Archiv an CrackMes zur Verfügung stellen.

Fazit: Dein Szenario ist realistisch und tatsächlich unknackbar - vorausgesetzt, es gibt nur diese EINE *.exe-Datei und dieses eine sehr gute Passwort mit sehr gutem Algorithmus. Aber selbst dabei weiß man nicht, ob der Algorithmus nicht doch irgendwann mal geknackt wird. :)

Ich weiß nicht was du vor hast, und als Proof-Of-Concept kannst du ja mal so eine EXE bauen, aber als Kopierschutzmaßnahme ist die Idee komplett ungeeignet.

Trotzdem viel Spaß dabei! :)

PS: Noch eine Anmerkung zu deiner Frage aus dem Kommentar der Antwort von ceevee (<= man, ist das ein schlimmer Satz!):

Du hast gefragt, ob man das Dekompilieren oder Disassemblieren verhindern kann. Darauf hast du den Hinweis auf einen Obfuscator erhalten.

Ich muss dazu - aus meiner persönlichen Erfahrung - sagen, dass mir noch nie ein Obfuscator unter gekommen ist, über den ich nicht lachen konnte.

Die arbeiten alle trivial und lassen sich leicht rückgängig machen. Es hält niemanden wirklich auf, wenn die Variablen statt "foo", "bar" und "qux" jetzt "v1", "v2" und "v3" heißen, oder einfach nur noch durch Speicheradressen repräsentiert werden. Wirre Sprünge dazwischen werden ebenfalls rausgefiltert, wenn man sie einmal verfolgt hat.

Darüber hinaus gibt es noch ausgwachsene Kopierschutzmaßnahmen wie z. B. TheMida:

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

Lies dir das ruhig mal durch. Tolle Features, oder?

Klingt gut, ne?

Das ist aber alles Marketing-Bullshit auf den du nicht reinfallen solltest. :)

TheMida ist eines der beliebtesten Ziele für Cracker, und im Schnitt dauert es nur wenige Tage (manchmal sogar fast zwei Wochen!), bis der Schutz einer neuen TheMida-Version geknackt wurde.

Und dann findet man im Internet Programme, die eine mit solch einem System geschützte EXE-Datei wieder "entpacken", sodass man sie herkömmlich reversen kann.

Als Nebeneffekt lassen sich mit Kopierschutzsystemen versehene EXE-Dateien auf vielen Rechnern nicht mehr ausführen, auch wenn ein regulärer Kunde das Programm ehrlich gekauft hat. Vor allem TheMida ist hyperempfindlich und startet den Rechner neu, wenn es denkt, dass es jetzt gerade untersucht wird.

Fazit: Absolut nutzlos, teuer, verschreckt ehrliche Kunden, erhöht Support-Anfragen bei dir und evtl. ärgern sich deine Kunden, weil ihnen durch TheMIda & Co ungespeicherte Daten abhanden gekommen sind.

Also merk dir eins: Diese Kopierschutzsysteme haben ganz tolle Websites mit schicken Grafiken und einer perfekt arbeitenden Marketing-Abteilung. Leider funktionieren sie nicht - zumindest im Bezug auf das Verhindern eines Crackings. Kein einziges. Punkt. :)

0

So als spontane erste Idee würde ich die exe-Datei durch einen Decompiler oder Disassembler jagen und schauen, ob ich das Passwort auslesen oder die Passwortabfrage damit überspringen kann.

Gibt es eine Möglichkeit ein Programm davor zu schützen ?

0
@M1SMR

Decompilern kannst du die Arbeit mit Obfuskation schwerer (aber nicht unmöglich) machen.

https://de.wikipedia.org/wiki/Obfuskation

Da ein Disassembler lediglich den Binärcode der exe-Datei anders darstellt, kannst du dagegen nix machen. Wenn jemand genug Interesse an deinem Passwort hat, dann kommt er auf diesem Wege auch da ran.

Eine andere Herangehensweise wäre es, wenn man die zu schützenden Daten z.B. auf einem Server lagert und das Programm nur darauf zugreift... allerdings wäre das auch wiederum  sehr viel aufwändiger zu erstellen/abzusichern und schützt z.B. nicht vor Social Engineering, also dass ich den Anwender des Programms dazu bringe, mir das Passwort zu verraten. 

1
@ceevee

Könnte man das Passwort also auf einem Server speichern und das Programm vergleicht die Eingabe mit dem Passwort auf dem Server ?

0
@M1SMR

Und dann musst du auch noch 'ne sichere Verbindung aufbauen - oder wie willst du dich vor Man-In-The-Middle-Attacken schützen? Sichere Software zu programmieren ist nicht einfach. ;)

0
@ceevee

Stimmt. Aber Internetseiten mit Passwörtern machen das so oder ?

0
@ceevee

MITM ist eine Sache ... noch einfacher geht Replay.

Das ganze in einen lokalen Mini-Server verpacken, im einfachsten Fall die hosts.txt editieren und zack ... Programm geknackt. :)

Man glaubt gar nicht, wie viele Programme es tatsächlich so machen! Viele Cracks funktionieren auch so. :)

0

Ja, nur zwei Gründe von vielen Gründen

1.) Programm -- der Hacker wird nicht den "normalen" Eingang benutzten (über Kennwort), sonderne einen Seiteneinstieg (z.B. bei C++ bietet sich die malloc-Funtkion an)

2.) du gehst von einem Programm aus, der Hacker will aber Kontroll über den Rechner bekommen, hat er die, kommt er auch ans Programm (falls dies nötig ist)

Gruß

Am besten AES-256, dann passiert nicht viel.

Ja, die gibt es.

Und mein Beispiel, gäbe es dort eine Möglichkeit ?

0
@M1SMR

Siehe meine Antwort. "Passwort zu gut für Brute Force" sagt aus, dass du nicht weißt, was du schreibst, denn Brute Force ist nutzt keine Passwortschwäche sondern eine Programmschwäche, die so etwas zulässt.

0
@priesterlein

Soweit ich weiß, testen Brute Force Attacken alle Passwortkombinationen oder Passwortlisten aus, die möglich sind. Und ein hundert Zeichen langes Passwort mit Bruteforce zu hacken ist quasi "unmöglich" oder irre ich mich ?

0
@M1SMR

Er muss ja nicht alle durchpobieren, sondern nur soweit, bis er es hat

0

Was möchtest Du wissen?