Unpacker

aus HaBo WiKi, der freien Wissensdatenbank von http://www.hackerboard.de
Wechseln zu: Navigation, Suche

Unpacker oder Stripper bezeichnen Programme, die einen bestimmten Programmschutz (engl. Protection) automatisiert entfernen.

Inhaltsverzeichnis


Der Programmschutz (Protector)

Der Programmschutz versucht als kommerzielle oder freie Software unbefugte Personen vom Decompilieren bzw. Disassemblieren abzuhalten, sowie eine Manipulation der zu schützenden Anwendung zu unterbinden. Dazu gibt es unterschiedliche Ansätze. Allen gemein ist das Hinzufügen vom zusätzlichen Code, der für die Verschlüsselung und Entschlüsselung des Hauptprogramms sorgt, sowie (optional) den Start von Debuggern und Disassemblern unterbindet.

Beispiele für freie Protectoren:

  • yoda's Crypter
  • tElock
  • PESpin
  • UPX (mit diversen Zusätzen wie Upolyx, UPX-Scrambler, UPX-Lock)

Beispiele für kommerzielle Protectoren:

  • Armadillo
  • ASProtect
  • ExeShield
  • ExeCrypter

Die Programmierer der Protectoren setzen inzwischen verstärkt auf Verschlüsselung der Codebereiche und Virtualisierung bzw. Veränderung des Ursprungscodes, sodass ein einfaches Abbild des Speichers zur Ausführungszeit des Programms nicht ausreicht. Auch werden die für das Starten eines Programms benötigten Informationen gesondert geschützt. Oft übernimmt der Protector selbst das Laden und die Initialisierung der nötigen Programmbereiche (was normalerweise vom Betriebssystem erledigt wird). Besonders kritischer, oft ausgeführter Code wird dadurch jedoch um Faktoren langsamer abgearbeitet, wodurch das geschützte Programm wesentlich mehr Rechenleistung benötigt (Beispiele: Armadillo, ExeCrypter).

Oftmals ist der Schutz erst dann wirklich wirksam, wenn der Programmierer die Protection-Software bereits in den Quelltext seiner Anwendung integriert. Dazu werden den Protectoren Bibliotheken zum Einbinden für verbreitete Programmiersprachen und Compiler beigelegt.

Funktionsweise eines Unpackers

Die Funktionsweise eines Unpackers lässt sich grob in folgende Schritte unterteilen:

  • Codebreich wiederherstellen: Es werden Verschlüsselungen oder Virtualisierungen der Protectorsoftware entfernt.
  • Programm wiederherstellen: Die zum Starten des Programms vom Betriebssystem benötigte Zusatzinformationen werden von Protectoren oft versteckt bzw. in ein eigenes Format überführt, um den Start (genauer den Initialisierungsschritt) selbst vorzunehmen. Dies muss rückgängig gemacht werden.

Um diese Ziele zu erreichen werden mehrere Vorgehensweisen genutzt. Im Wesentlichen wird dabei der Programmfluss durch den Unpacker kontrolliert, um an bestimmten Punkten einzugreifen, bestimmte Änderungen vorzunehmen oder Informationen herauszulesen.

Entgegen der Werbeversprechungen der Softwarefirmen existieren für viele der verbreiteten Programmschutzprodukten geeignete Unpacker. Sie nutzen normalerweise vorhanden Schwächen aus. Dazu wird der Schutzmechanismus per Reverse_Engineering so gut wie es geht analysiert und nach Schwachstellen durchsucht (beispielsweise wenn der Programmcode zur Ausführungszeit entschlüsselt vorliegt, etc.).

Die Herausforderung bei der Entwicklung eines Unpackers

Zum Cracken von Software benötigen (Software-) Cracker keinen Upacker. Unpacker werden nicht zuletzt geschrieben, um zu zeigen, dass dieser Arbeitsschritt auch vollautomatisch funktioniert. Das Schreiben von Unpackern entwickelte sich zur eigentlichen Herausforderung für Cracker, da der Schutzmechanismus von ihm wirklich verstanden und eine allgemeine, programmiertechnisch umsetzbare Gegenlösung entwickelt werden muss. Einen Schutz per Hand zu entfernen, ist dagegen in der Regel um Faktoren einfacher, da ein Mensch besser auf unerwartete Ereignisse reagieren kann als ein Programm.

Computer Forum
Computer Forum
Meine Werkzeuge
Namensräume
Varianten
Aktionen
Navigation
Werkzeuge