Grüß dich, du bist alle,
Dies ist mein CAD -Werkzeug, um Fotos von Masken -ROMs zu machen und die Bits zu extrahieren, damit der Inhalt des ROM wiederhergestellt werden kann.
Die Tastaturverknüpfungen in diesem Tool sind nicht optional. Bitte lesen Sie die GUI -Dokumentation unten, bevor Sie beginnen, zu erkunden.
Wenn Sie dieses Tool nützlich finden, kaufen Sie bitte eine Kopie meines Buches über Microcontroller -Exploits für sich selbst oder einen klugen Schüler.
-Stravis Goodspeed

GBROM-TUTORIAL lehrt Sie, wie Sie mit Fotografien des Masken-ROM des Gameboys beginnen und sich auf ein genaues ROM-Bild bearbeiten.
Myk82 ROM hält eine fertige Müllkippe des ROM vom MyK82 -Chip in einer Fortezza -Karte. Dies ist der Nachfolger des Clipper -Chips, und das Repository enthält nicht nur alle ROM -Bits, sondern auch Neustände für die Fehlerkorrektur.
Wersi-SLM2-51173 ist ein Zilog Z8 ROM aus einem Musiksynthese-Modul.
master - Leistungsverbesserungen durch Vermeidung von tiefen Kopien in Listen. Die ordnungsgemäße Bitzahl in der Statusleiste und in der Statusleiste verwendet jetzt eine Schriftart fest.
2024-08-18-Gatoroms Solver-Set-Option verwendet jetzt beschreibende Fiilenamen. GUI kann jetzt eine Reihe von gelösten Ergebnissen mit Datei/Export/SolversetBytes exportieren. Clearer Selektion Rechteck. R und C zeichnen nun den richtigen Zeilenart, wenn der Benutzer sie verwirrt. ^H setzt nun die Heimposition. Zoomen und Bewegungsschlüssel funktionieren jetzt in der zweiten Ansicht. Perfekt doppelte Linien werden jetzt während der DRC von der V -Taste ausgeschaltet. Zeilen und Spalten werden jetzt als sortierte Listen anstelle von Sets gespeichert. Zeilen und Spalten befinden sich jetzt in einer konsistenten Reihenfolge im Dateiexport. Leistungssteigerung bei Bit -Markierung, Hintergrund -Bit -Markierung und Ausrichtung. Universelle Binärdatei für macOS. Romaligignertiling funktioniert besser für Designs mit einer Lücke zwischen Banken. Bits außerhalb der Ansicht werden beim Ziehen nicht mehr gezeichnet, wodurch die Einstellungsgruppen langer Linien beschleunigt werden.
2024-07-14-Behebung des Absturzes beim Löschen eines doppelt ausgewählten Elements. Löschen und Rückraum jetzt löschen Sie Objekte wie D . Mehrere Disassembler. Decodierungen werden jetzt aktualisiert, da die Dekodierungsschwellen geändert werden.
2024-06-23-Yara-Regellösung. Stabilitätsverbesserungen. Crosshairs -Update auf die Winkel ausgewählter Linien. Space wiederholt jetzt die letzte Zeile, ob Zeile oder Spalte. Mehrere Elemente können ausgewählt werden, und das Verschieben von+D dupliziert sie. Wählen Sie mit Verschiebung, um mehr Zeilen oder Strg (CMD auf macOS) hinzuzufügen, um Zeilen zu entfernen. Das rechte Ziehen bewegt mehrere Zeilen und Vorschau nur relevante Bits. Fadenkreuz und Auswahlfarben sind jetzt ausgewählt. Der Hintergrund wird beim Auszoomen nicht mehr gekachelt.
2024-05-19-DRC-Verstöße werden nun gelöscht, wenn die Bits erzwungen werden. Histogrammexport für die Darstellung der Farbverteilungen in Gnuplot. Unterstützung für Wayland. Explizite Wortse -Unterstützung in CLI, GUI, Solver und Basic Decoder. Solver -Sets und exportieren alle potenziellen Lösungen als Binärdateien. Unzuverlässiger Aligner wurde veraltet. GUI -Löser. Disassembler ruft zum Unidasmus von Mame auf.
2024-01-28-Rückgängigmachen und Redo. Saitendialog. Backslash -Taste für die Sichtbarkeit der Ebenen. Zuverlässiger Ausrichtungsalgorithmus. Das Schließen des Hauptfensters schließt die Anwendung.
2024-01-01-Behebt den Busfehler im Z8-Decoder beim Lösen von ungeraden Größen. Ausführlicher Modus im Gatorom CLI. squeeze-lr Modus jetzt im GUI-Decoder. Bearbeiten des Menüelements, um alle Bitreparaturen zu löschen. E wird den nächsten DRC -Verstoß auswählen. Perfekt vertikale Bilder brechen den Alignment -Algorithmus nicht mehr.
2023-12-07-Auswahlhighlight. Zeilen/Spalten zählt in der Statusleiste. ASCII -Löser. Fixiert mehrere Abstürze im Solver aus unangenehmen ROM -Größen. Gatorom decodieren in der GUI. Entfernung von redundanten Decoder. Hex -Zuschauer und Hervorhebung ausgewählter Bytes. Gatorom CLI ist jetzt sehr streng, wenn es darum geht, den illegalen Zugang zu beenden. Zilog Z8 ROM Support.
2023-09-13-CLI-Option zum Deaktivieren von OpenGL. Druckunterstützung. Arbeitsfenster bauen.
2023-08-06-OpenGL ist jetzt funktional und Standard. Gatorom zur Bitdekodierung enthalten.
2023-07-20-Sekundäranzeigeunterstützung. Hohe Probenahme. Korrekturen Crash, wenn Sie V nach dem Löschen einer Linie treffen.
2023-06-17-MACOS auf x86_64 und arm64 hinzugefügt.
2023-05-30-Erste Windows-Version.
Dieses Tool funktioniert in Windows, Linux, FreeBSD und macOS unter Verwendung von QT6 mit der Erweiterung von QTcharts.
Das Aufbau des Werkzeugs ist am einfachsten aus der CLI. In Debian Bullseye (11.x),
% sudo apt install make gcc g++ cmake git qt6-base-dev libqt6charts6-dev
qt6-translations-l10n linguist-qt6 qt6-l10n-tools qt6-tools-* qt6-image-formats-plugins
% git clone https://github.com/travisgoodspeed/maskromtool/
...
% cd maskromtool
% mkdir build; cd build
% cmake ..
% make -j 8 && sudo make install
Verwenden Sie in Windows und MacOS das QT für Open -Source -Installateur, wobei Sie die Diagramme und Bildformate erweitern können. Dann öffnen Sie CMakeLists.txt als Projekt. Ctrl+B kompiliert dann maskromtool . Wenn Sie ein Problem mit Ihrem Import haben, z. B. die Auswahl der falschen QT -Installation, löschen Sie CMakeLists.txt.user und eröffnen Sie das Projekt wieder, um es erneut zu versuchen.
Für die Bequemlichkeit von Windows und MacOS -Benutzern haben wir auch einige vorgefertigte Veröffentlichungen vorgenommen.
Verwenden Sie zuerst Datei/Öffnen Sie ROM, um ein ROM -Bild als Foto zu öffnen. Versuchen Sie, unkomprimierte Formate zu verwenden, aber achten Sie darauf, dass MacOS TIFF -Dateien nicht mag.
Wenn Sie den Steuerschlüssel (Befehl auf macOS) beim Rollen des Mausrads halten, wird ein- und ausgeschaltet. Sie können auch auf einem Track-Pad zoom. Das Ziehen mit der mittleren Taste wird schwenken oder mit zwei Fingern scrollen, wie es Ihrem Betriebssystem mag.
Durch willkürliche Konvention sollten die Bits in langen Säulen mit kürzeren Zeilen sein. Wenn Decoder -Linien sichtbar sind, sollten sie oben auf dem Bild stehen. Fühlen Sie sich frei, es in eine Richtung zu fotografieren und dann für Markup zu drehen.
Wenn Sie Ihr Projekt speichern, wird der Dateiname des Bildes mit .json erweitert. Diese sortierte und eingebaute JSON -Datei sollte für die Verwendung in der Versionskontrolle wie Git -Repositorys geeignet sein.
Diese Tastaturtasten bieten dann den größten Teil Ihrer Eingabe. Klicken Sie zum Zeichnen von Zeilen zuerst einmal, um als Startposition auszuwählen, und drücken Sie dann die Taste, wenn die Maus über der Endposition liegt. Das Löschen eines Elements oder das Einstellen seiner Position gilt für die zuletzt platzierte Zeile, es sei denn, Sie ziehen ein Feld, um eine Zeile auszuwählen.
Wählen Sie ein Element aus, indem Sie ihn mit einer linken Mausklick darüber ziehen und darauf ansehen, dass es grün wird. Das zuletzt platzierte Element wird automatisch ausgewählt. Einige Befehle funktionieren an mehreren ausgewählten Elementen. andere nur einer.
Sie können einen Fehler mit D delte oder seine Position ein wenig mit S , den Pfeiltasten oder einem rechten Klick-Drag anpassen. Während der Bewegung können die Teile nicht verwandter Linien für die Leistung verborgen sein, und die M -Taste oder die Freigabe der rechten Maustaste zeichnen sie neu.
Auf macOS bedeutet ^ , den Befehl anstelle von Strg.
Tab -- Show/Hide bits.
-- Show/Hide rows and columns.
^ -- Show/Hide background.
ALT -- Show/Hide crosshair.
R -- Draw a row from the last left-click position.
SHIFT R -- Repeat the last row.
C -- Draw a column from the last left-click position.
SHIFT C -- Repeat the last column.
SPACE -- Repeat the last row or column.
D -- Delete the selected objects.
SHIFT D -- Duplicate the selected lines.
S -- Set the selected object to the mouse position.
F -- Jump to the selected item.
ARROWS -- Move the selected items.
right-drag -- Move the selected items. (SHIFT or ^)
middle-drag -- Pan the view.
^ wheel -- Zoom.
Q -- Zoom to zero.
A -- Zoom in.
Z -- Zoom out.
H -- Jump to home position.
^H -- Set the home position.
SHIFT F -- Force a bit's value. (Again to flip.)
SHIFT A -- Force a bit's ambiguity. (Again to flip.)
M -- Remark all of the bits.
SHIFT M -- Update hex decoding and disassembly.
V -- Run the Design Rule Checks.
SHIFT V -- Clear the DRC violations.
E -- Jump to next violation.
^Z -- Undo
SHIFT ^Z -- Redo
^S -- Save changes.
Wenn Sie anfangen, Bits zu markieren, kennt die Software den Schwellenwert zwischen einem und einer Null noch nicht. Sie können dies mit View / Choose Bit Threshold konfigurieren.
Selbst die besten Bits sind nicht alle perfekt gekennzeichnet. Verwenden Sie also SHIFT+F um Bitwerte zu erzwingen, bei denen Sie sehen, dass die Software falsch ist. SHIFT+A ist ähnlich und markiert ein wenig mehrdeutig oder beschädigt. Das DRC -Menü enthält Konstruktionsregelprüfungen, die Probleme in Ihrem Projekt hervorheben, wie z. B. schwache Bits oder kaputte Ausrichtung.
Wenn das Platzieren vieler Zeilen mühsam wird, wählen Sie eine Gruppe mit Ihrer linken Maustaste aus und duplizieren Sie den gesamten Satz mit SHIFT+D . Sie können es dann mit der rechten Maustaste an die neue Position ziehen und eine weitere Kopie in der ursprünglichen Position lassen. Wenn der Framerate dafür abfällt, verwenden Sie die TAB vorübergehend, um alle Bits vorübergehend zu verbergen, wodurch sich viele Linien in dichten Bereichen erheblich beschleunigen.
Das Fadenkreuz wird sich an Ihre zuletzt platzierte Reihe und Spalte anpassen. Dies sollte sie ein wenig neigen lassen, um der Realität Ihrer Fotos zu entsprechen.
Nachdem Sie die Bits markiert und geprüft haben, dass sie mit DRC genau sind, führen Sie Datei aus/exportieren Sie sie, um sie in ASCII zu bringen, um mit anderen Tools wie Gatorom, BitViewer oder Zorrom zu analysieren.
Zusätzlich zur GUI verfügt dieses Tool über eine Befehlszeilenschnittstelle, die beim Skript hilfreich sein kann. Verwenden Sie den Switch --help , um die neuesten Parameter und den --exit -Switch anzuzeigen, wenn Sie es vorziehen, dass die GUI nicht offen für interaktive Gebrauch ist.
forum% maskromtool --help
Usage: maskromtool [options] image json
Mask ROM Tool
Options:
-h, --help Displays help on commandline options.
--help-all Displays help, including generic Qt options.
-v, --version Displays version information.
-V, --verbose Print verbose debugging messages.
--stress Stress test bit marking.
-e, --exit Exit after processing arguments.
--disable-opengl Disable OpenGL.
--enable-opengl Enable OpenGL.
-d, --drc Run default Design Rule Checks.
-D, --DRC Run all Design Rule Checks.
--sampler <Default> Bit Sampling Algorithm.
--diff-ascii <file> Compares against ASCII art, for finding errors.
-a, --export-ascii <file> Export ASCII bits.
-o, --export <file> Export ROM bytes.
--export-histogram <file> Export histogram.
--export-csv <file> Export CSV bits for use in Matlab or Excel.
--export-json <file> Export JSON bit positions.
--export-python <file> Export Python arrays.
--export-photo <file> Export a photograph.
Arguments:
image ROM photograph to open.
json JSON lines to open.
Um ohne GUI zu laufen, passieren Sie -platform offscreen . Wenn das Programm unter Wayland abstürzt, erzwingen Sie die Verwendung von Xorg, indem Sie -platform xcb übergeben.
Unter Windows ist es unangenehm für eine ausführbare Datei, eine GUI zu haben, während ein Protokoll auf der CLI beibehalten wird. Wir lösen dies, indem wir zwei ausführbare Sachen produzieren. Bitte verwenden Sie maskromtool.exe für die GUI und maskromtoolcli.exe für die CLI.
Eine separate ausführbare Datei, gatorom , wickelt den ROM -Bit -Decoder ohne Grafik. Weitere Informationen finden Sie in Gatorom.
forum% gatorom
Usage: gatorom [options] bitstream
Gato ROM: A Decoder for Mask ROM Bits
Options:
-h, --help Displays help on commandline options.
--help-all Displays help, including generic Qt
options.
-v, --version Displays version information.
-V, --verbose Talk too much.
-w, --wordsize <8> Word size.bits
-r, --rotate <degrees> Rotates the image in multiples of 90
degrees.
--flipx Flips the bits along the X axis.
--flipy Flips the bits along the Y axis.
-i, --invert Inverts the bits.
-o, --output <out.bin> Output file.
--random Randomize a ROM for testing.
--Random Randomize a crazy ROM.
--rawwidth, --seanriddle <width> Width of a raw binary input, in Sean
Riddle's style.
-I, --info Info about input.
-d, --dis <arch> Disassemble.
--print Print with a GUI dialog.
--printpdf <file.pdf> Print to a PDF file.
--decode-tlcs47font Decodes as a TMP47C434N Font.
--decode-z86x1 Decodes as a Zilog Z86x1.
--decode-cols-downl-swap Decodes as a uCOM4 ROM.
--decode-cols-downr Decodes first down then right like a
Gameboy.
--decode-cols-downl Decodes first down then left.
--decode-cols-left Decodes left-to-right.
--decode-cols-right Decodes right-to-left.
--decode-squeeze-lr Decodes even bits from the left, odd bits
from right like in the TMS32C15.
-z, --zorrom Zorrom compatibility mode, with flipx
before rotation.
--leftbank Only the left half of the bits.
--rightbank Only the right half of the bits.
-a, --print-bits Prints ASCII art of the transformed bits.
-A, --print-pretty-bits Prints ASCII art with spaces.
--solve Solves for an unknown format.
--solve-bytes <bytes> Bytes as a hint to the solver.
0:31,1:fe,2:ff
--solve-ascii Look for ASCII strings.
--solve-string <bytes> Byte string as a hint to the solver.
31,fe,ff
--solve-yara <rule> Yara rule file.
--solve-set <prefix> Exports all potential solutions.
Arguments:
bitstream ASCII art of ROM to decode.
Ich habe die GUI um eine QGraphicsScene entworfen. Die zugrunde liegenden Datenobjekte verwenden das QT-Koordinatensystem mit Floats für eine bessere Präzision als Pixel.
Nach dem Laden eines ROM -Fotos legt der Benutzer Spalten und Reihen auf das Foto. Jeder Schnittpunkt einer Spalte und einer Zeile wird als ein bisschen angesehen, und ein konfigurierbarer Farbschwellenwert bestimmt den Wert dieses Bits. Wenn das Foto falsch verstanden wird, können Sie das Bit auch zu einem bekannten Wert erzwingen.
Sobald alle Bits markiert und der Schwellenwert gewählt wurden, markiert die Software jedes helle Bit als blau (0) und jedes dunkle Bit als rot (1). Diese Bits werden dann in verknüpfte Zeilenlisten für den Export als ASCII für die Verwendung in anderen Tools ausgerichtet.
Um Fehler zu identifizieren, kritisiert eine Reihe von Entwurfsregelprüfungen (DRC) das offene Projekt. Während die primäre Schnittstelle die GUI ist, ist auch eine CLI für Skript- und Testen verfügbar.
Während ein paar tausend Bits ohne Fehler gekennzeichnet sein könnten, müssen größere Projekte unweigerlich ihre Fehler verwalten.
Ein guter Start ist die Verwendung der DRC -Überprüfungen und die sorgfältige Konfiguration der Bitschwellen, bis keine offensichtlichen Fehler bestehen. Navigieren Sie dann durch das Projekt und klicken Sie auf die tab , um die Anmerkungen anzuzeigen und zu verbergen, um sicherzustellen, dass jedes Bit ordnungsgemäß erkannt wird.
Wenn dies nicht ausreicht, wie bei ROMs, die zehn oder Hunderte von Kilobits sind, hilft es, das gleiche ROM mehrmals zu kommentieren, vorzugsweise aus verschiedenen Fotografien. Natürlich werden bei der Annotation jedes Fotos ein bisschen Fehler auftreten, aber sie werden an verschiedenen Orten auftreten. Sie können dann die Funktion --diff-ascii gegen die Ausgabe von --export-ascii verwenden, um Bilder zu vergleichen und ihre Unterschiede in Einklang zu bringen, bis alle Ihre Projektdateien zustimmen.
Die meisten ROMs können einfach gelesen werden, indem die Farbe eines einzelnen Pixels im Zentrum des Bits gelesen wird. Für diese funktioniert der Default -Stichprobenalgorithmus gut.

Für Diffusionsroms, deren Teile etwas zu verzögert waren, hat die Mitte des Bits keine einzigartige Farbe, aber es ist von leicht dunkleren Linien umgeben. Der Wide Algorithmus nimmt die dunkelste Farbe in jedem Kanal, nachdem er seine Größe von Bits in Breite probiert hat, und Tall tut das gleiche, aber vertikal.

Patches und Verbesserungen zum Mask -ROM -Tool sind sehr willkommen. Spam den Ausgabe -Tracker jedoch nicht mit Feature -Anfragen. Pull-Anfragen sollten über die Github-Seite eingereicht werden und sie sollten das Projekt nicht mit Abhängigkeiten von Bibliotheken von Drittanbietern verwickeln.
Der Code ist in einem konservativen Dialekt von C ++ mit minimaler Verwendung erweiterter Funktionen geschrieben. Ich habe versucht, den Code und die Klassendefinitionen gründlich zu kommentieren.
Gatorom ist als Befehlszeilendecoder enthalten, die für Bitarrangements löst. Eine eigene LEADME -Datei für die CLI -Dokumentation finden Sie insbesondere für die Lösermethoden, die in der GUI noch nicht unterstützt werden.
Unabhängig davon wird Gatorom als Bibliothek zur Dekodierung innerhalb der Maskromtool -GUI verwendet. Verwenden Sie Bearbeiten/Decodieren, um den Dekodierungsstil und den Ansicht/HexPreview zu definieren, um eine Live -Decodierung der Bits zu hexadezimal zu sehen.

Aus dem Decoder können Sie Hex -Bytes hervorheben und die SEX -Auswahl ansehen/hervorheben, um die ausgewählten Bytes zu visualisieren. Hier sehen wir die ersten drei Wörter des Myk82 -ROM, die 32 Bit in jede Position einpacken. Die Demontage ist auch verfügbar, wenn unidasm von Mame auf dem Weg ist.

Ein Skriptlöser wird ebenfalls unterstützt, bei dem einfache Masken oder Yara -Regeln die erwartete Firmware beschreiben. Alle Übereinstimmungen werden aufgezählt, und indem Sie zwischen ihnen springen, können Sie schnell Bilder entschlüsseln, die keine Verunglehre, Zeilenumkehr oder andere Komplikationen verwenden.

John McMaster's Zorrom ist ein ausgezeichneter Decoder und die Inspiration für die Dekodierungsbibliothek in diesem Tool.
Adam Lauries Rompar könnte das allererste Bit -Markierungswerkzeug sein, das offen ist.
Chris Gerlinskys Bitract ist ein weiteres Open -Source -Tool für Bit -Markierung, und BitViewer ist sein passendes Tool für die Dekodierung von Bits zu Bytes.
Peter Boschs PLA -Dekodus ist ein Bit -Markierungswerkzeug zum Extrahieren des alten Intel -Mikrocode. Weitere Informationen finden Sie in seinem Hardwear.io -Vortrag von 2020.