Können Sie alle Daten und Anweisungen über einen Hex-Editor aus einer ausführbaren Datei ziehen?

489
bertieb

Jemand hat mir erzählt, dass das Anzeigen einer Binärdatei eines Programms oder Ähnlichem in einem Hex-Editor die gesamte Summe der Daten / Anweisungen eines Programms freigibt. Wie bei Game-Hackern / Moddern alter Retro-Spiele wie Sonic The Hedgehog ist die binäre ausführbare Datei beispielsweise ein halbes Megabyte (ungefähr).

Das bedeutet, dass die Datei nur einen Scotch-Wert von mehr als 520.000 Bytes enthält. Die Codierung, die der Compiler verwendet, um ausführbaren Code für den Sega Genesis (Motorola 68000-Binärcode) zu erhalten, kann byteweise ausgeführt werden. Byte in einer Hex-Datei und bearbeiten Sie die Werte der im Spiel verwendeten Daten- / Anweisungskodierung (z. B. Prüfsumme, Zaubernummern-Daten, JUMP / MOVE-Anweisungen und -Abweichungen, DATEN-Einträge wie Leben usw.)?

Stimmt das zu 100% oder gibt es eine Unwahrheit?

2
tl; dr: ja, es sei denn, der Code wurde geschrieben, um sich selbst zu ändern. grawity vor 10 Jahren 2
`Die binäre ausführbare Datei ist ein halbes Megabyte. Das bedeutet, dass die Datei nur einen Scotch über 520.000 Bytes enthält. Ja, zwei Finger (4.288) mehr. Synetech vor 10 Jahren 0

1 Antwort auf die Frage

1
gronostaj

Ihre Festplatte ist nur ein Gerät, das Bytes aufnehmen kann . Auf Hardwareebene gibt es kein Konzept von Dateien oder Partitionen, sondern nur Bytes [1] .

Jetzt führen wir ein Partitionskonzept ein (lesen Sie die Einführung hier, wenn Sie wissen wollen, warum). Es gibt eine Partitionstabelle, die auch eine Reihe von Bytes ist. Sie sind nicht sinnvoll, wenn Sie nicht wissen, wie Sie sie interpretieren sollen. Alle modernen Betriebssysteme verwenden MS-DOS-kompatible Partitionstabellen [2], damit sie die Partitionen des anderen erkennen können. Sie können jedoch nur so tun, als gäbe es keine Partitionen, sondern nur Bytes. Das ist, was die Festplatte hält.

Jede Partition muss mit einem Dateisystem formatiert sein, das beschreibt, wie Dateien gespeichert werden. Moderne Windows-Versionen verwenden NTFS-Dateisysteme, ältere basierten auf der FAT-Familie (FAT12, FAT16, FAT32) und Linux-Setups für Consumer-Anwendungen verwenden normalerweise die ext-Familie (ext2, ext3, ext4). Das Dateisystem entscheidet, wie die Dateien auf der Partition angeordnet sind und wo sich das "Inhaltsverzeichnis" befindet (und wie es interpretiert werden soll). Es ist alles nur Bytes, wenn Sie nicht wissen, wie man sie interpretiert.

Dateien können zusätzliche Metadaten enthalten (Name, Pfad, Erstellungsdatum, Datum des letzten Zugriffs usw.). Das Dateisystem gibt an, wie die Metadaten gespeichert werden sollen und wie Sie Dateiränder finden können, nicht jedoch, wie der Inhalt der Datei interpretiert werden soll. Sie müssen herausfinden, was das Dateiformat ist (Tipp: Schauen Sie sich die Dateiendungen oder Zaubernummern an !). Bis Sie das Format kennen, sind es nur ein paar Bytes.

Mein Punkt ist, dass hinter der Dateispeicherung keine tiefere Magie steckt. Es gibt viele Abstraktionsebenen, aber wenn der Computer auf eine der Festplatten zugreifen kann, können Sie auch Daten auf dieser Abstraktionsebene anzeigen oder bearbeiten!

Programme wie Paint oder Word arbeiten auf der höchsten Abstraktionsebene. Sie interpretieren die Dateidaten entsprechend dem Format . Hex-Editoren interpretieren jedoch keine Daten, sondern stoppen auf Dateiebene und präsentieren Ihnen rohe Bytes im Hexadezimal-Format (dies ist das benutzerfreundlichste Format, das Sie auf dieser Ebene erhalten können). Interpretieren einer Datei = Interpretieren ihrer Bytes. So werden ausführbare Dateien ausgeführt, Textdateien gelesen oder Bilder angezeigt. Wenn eine CPU eine Anwendung ausführt, werden genau dieselben Daten angezeigt, die Ihnen ein Hex-Editor zur Verfügung stellt. Wenn Sie ein JPEG öffnen, liest der Bildbetrachter dieselben Daten wie die Hex-Editoren!

Es klingt, als ob Sie sich für Reverse Engineering interessieren. Es gibt einige Tools (Debugger, Decompiler, Disassembler), die diesen Prozess weniger schmerzhaft machen. Die Arbeit mit Bytecode ist schwierig, besonders wenn Sie es mit CPUs zu tun haben, die Anweisungen mit variabler Länge verwenden (ich sehe Sie an, Intel!)


[1] Nicht wirklich, aber nehmen wir das der Einfachheit halber an. Wenn Sie sich für Details interessieren, haben alte Laufwerke das CHS- Schema verwendet, das später von LBA abgelöst wurde .

[2] ... oder moderne GPTs, die gut mit UEFI funktionieren, aber auch hier ist es nicht so wichtig, lassen wir sie einfach weg. Oh, und MS-DOS-Tabellen werden häufiger als MBR-Partitionstabellen bezeichnet .

Streng genommen sieht die CPU ** nicht genau ** die gleichen Bytes, die in der Programm-Image-Datei durch einen Hex-Viewer angezeigt werden. Programmlader führen Verschiebungen und dynamische Verknüpfungen mit Ladezeiten durch. Einige ausführbare Dateiformate (wie z. B. Linear Executable) verfügen über eine Komprimierungsfunktion und die Möglichkeit, Null-Füllseiten vollständig aus dem Programmbild zu entfernen. Dies ändert jedoch nicht den Kern dieser Antwort. Was sich jedoch ändert, ist, dass Sie die Ressourcengabeln übersehen haben. Der Fragesteller hat nach dem Bearbeitungsprogramm ** data ** gefragt, und Hex-Viewer zeigen standardmäßig standardmäßig Datengabeln an. JdeBP vor 10 Jahren 0