Frage von M1SMR, 129

Nicht hackbares Programm möglich?

Hallo,

Meine Frage ist, ob ein nicht hackbares Programm möglich wäre. Wenn ich zum Beispiel ein Programm programmiere, bei dem ein Passwort als Eingabe erwartet wird und bei der richtigen Antwort etwas bestimmtes passiert, der Benutzer nur die .exe Datei besitzt und das Passwort zu gut für Bruteforce ö.ä. ist. Gibt es dann noch eine Möglichkeit das Programm zu hacken?

Expertenantwort
von TeeTier, Community-Experte für programmieren, 15

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! :)

Kommentar von TeeTier ,

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. :)

Antwort
von ceevee, 47

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.

Kommentar von M1SMR ,

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

Kommentar von ceevee ,

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. 

Kommentar von M1SMR ,

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

Kommentar von ceevee ,

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. ;)

Kommentar von M1SMR ,

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

Kommentar von TeeTier ,

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. :)

Antwort
von Tschoo, 11

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ß

Antwort
von Wumpratte, 72

Am besten AES-256, dann passiert nicht viel.

Antwort
von priesterlein, 68

Ja, die gibt es.

Kommentar von M1SMR ,

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

Kommentar von priesterlein ,

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.

Kommentar von M1SMR ,

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 ?

Kommentar von Tschoo ,

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

Antwort
von Gewuerzgurke99, 50

Kein System ist sicher

Kommentar von M1SMR ,

Es geht auch nicht um Systeme :D

Keine passende Antwort gefunden?

Fragen Sie die Community