howdy y'all,
이것은 마스크 롬의 사진을 찍고 비트를 추출하여 ROM의 내용을 복구 할 수있는 CAD 도구입니다.
이 도구의 키보드 바로 가기는 선택 사항이 아닙니다 . 탐색을 시작하기 전에 아래 GUI 문서를 읽으십시오.
이 도구가 유용하다고 생각되면 MicroController Exploits 또는 영리한 학생에 대한 내 책 사본을 구입하십시오.
--travis goodspeed

Gbrom-Tutorial은 Gameboy 's Mask ROM의 사진으로 시작하고 정확한 ROM 이미지로 작업하는 방법을 알려줍니다.
MyK82 ROM은 Fortezza 카드에서 MyK82 칩에서 ROM의 완성 된 덤프를 보유합니다. 이것은 Clipper Chip의 후속 제품이며 저장소에는 모든 ROM 비트뿐만 아니라 오류 수정을위한 재 촬영도 포함됩니다.
WERSI-SLM2-51173은 음악 합성 모듈의 Zilog Z8 ROM입니다.
master - 목록에서 깊은 사본을 피함으로써 성능 향상. 상태 표시 줄에 적절한 비트 수와 상태 표시 줄은 이제 고정형 글꼴을 사용합니다.
2024-08-18-Gatorom의 Solver-Set 옵션은 이제 설명 피일 이름을 사용합니다. GUI는 이제 파일/내보내기/SolversetBytes로 해결 된 결과 세트를 내보낼 수 있습니다. 명확한 선택 사각형. R 과 C 이제 사용자가 혼란 스러울 때 올바른 줄 유형을 그립니다. ^H 이제 홈 위치를 설정합니다. 축소 및 움직임 키는 이제 두 번째보기에서 작동합니다. V 키에 의해 DRC 중에 완벽하게 중복 라인이 컬링됩니다. 행과 열은 이제 세트 대신 정렬 된 목록으로 저장됩니다. 행과 열은 이제 파일 내보내기에서 일관된 순서입니다. 비트 마킹, 배경 비트 마킹 및 정렬의 성능 향상. MACOS 용 유니버설 바이너리. Romalignertilting은 은행 간의 격차가있는 설계에 더 잘 작동합니다. 드래그하는 동안 더 이상 뷰 외 비트가 그려지지 않으며, 긴 줄의 조정 그룹을 속도를 높입니다.
2024-07-14- 이중 선택 항목을 삭제할 때 충돌을 수정합니다. 삭제 및 백 스페이스 이제 D 와 같은 개체를 삭제하십시오. 다수의 분리기. 디코딩 임계 값이 변경됨에 따라 디코딩이 업데이트됩니다.
2024-06-23- 야라 규칙 해결. 안정성 개선. Crosshairs는 선택한 선의 각도로 업데이트됩니다. 공간은 이제 행 또는 열이든 마지막 줄을 반복합니다. 여러 항목을 선택할 수 있으며 Shift+D는이를 복제합니다. 선을 선택하여 선을 제거하려면 더 많은 선 또는 CTRL (CMD)을 추가하십시오. 오른쪽 드래그는 여러 줄을 이동하여 관련 비트 만 미리 보았습니다. 크로스 헤어 및 선택 색상을 선택할 수 있습니다. 확대 할 때 배경이 더 이상 기울어지지 않습니다.
2024-05-19- 비트가 강제되면 DRC 위반이 정리됩니다. gnuplot에서 색상 분포를 플로팅하기위한 히스토그램 내보내기. Wayland에 대한 지원. CLI, GUI, 솔버 및 기본 디코더에서의 명시 적 Wordsize 지원. 솔버 세트, 모든 잠재적 솔루션을 바이너리 파일로 내 보냅니다. 신뢰할 수없는 Aligner는 더 이상 사용되지 않았습니다. GUI 솔버. Disassembler는 Mame의 Unidasm을 요구합니다.
2024-01-28- 실행 취소 및 다시도. 문자열 대화 상자. 레이어 가시성을위한 백 슬래시 키. 신뢰할 수있는 정렬 알고리즘. 닫는 기본 창이 응용 프로그램을 닫습니다.
2024-01-01- 홀수 크기를 해결할 때 Z8 디코더의 버스 오류를 수정합니다. 게토 롬 클리의 장방 모드. GUI 디코더에서 이제 squeeze-lr 모드입니다. 모든 비트 수정을 지우려면 메뉴 항목 편집. E 다음 DRC 위반을 선택합니다. 완벽하게 수직 이미지는 더 이상 정렬 알고리즘을 중단하지 않습니다.
2023-12-07- 선택 하이라이트. 상태 표시 줄의 행/열 계산. ASCII 솔버. 어색한 ROM 크기의 솔버에서 여러 충돌을 수정합니다. GUI에서 게토 롬 디코딩. 중복 디코더 제거. 육각 시청자 및 선택된 바이트의 강조 표시. Gatorom CLI는 이제 불법 접근을 종료하는 것에 대해 매우 엄격합니다. Zilog Z8 ROM 지원.
2023-09-13- OpenGL을 비활성화하는 CLI 옵션. 인쇄 지원. 작동하는 Windows 빌드.
2023-08-06-OpenGL은 이제 기능적이며 기본값입니다. 비트 디코딩에 Gatorom이 포함되어 있습니다.
2023-07-20- 보조 디스플레이 지원. 높은 샘플링. 라인을 삭제 한 후 V 치면 충돌을 수정합니다.
2023-06-17- X86_64 및 ARM64에 MACOS가 추가되었습니다.
2023-05-30- 첫 번째 Windows 릴리스.
이 도구는 Windows, Linux, FreeBSD 및 MacOS에서 작동하며 QTCharts 확장 기능이있는 QT6을 사용합니다.
도구를 구축하는 것이 CLI에서 가장 쉽습니다. 데비안 불스 아이 (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
Windows 및 MacOS에서는 오픈 소스 설치 프로그램에 QT를 사용하여 차트 및 이미지 형식 확장을 포함해야합니다. 그런 다음 프로젝트로 CMakeLists.txt 엽니 다. Ctrl+B maskromtool 컴파일합니다. 잘못된 QT 설치 선택과 같은 가져 오기에 문제가있는 경우 CMakeLists.txt.user 삭제하고 프로젝트를 다시 열어 다시 시도하십시오.
Windows 및 MACOS 사용자의 편의를 위해 일부 사전 빌드 릴리스도 만들었습니다.
먼저 파일/오픈 ROM을 사용하여 ROM 이미지를 사진으로 엽니 다. 압축되지 않은 형식을 사용하지만 MacOS는 TIFF 파일을 좋아하지 않는다고 조심하십시오.
마우스 휠을 굴리는 동안 제어 키 (MACOS의 명령)를 유지하면 확대 및 출력됩니다. 트랙 패드에서 핀치를 핀치 할 수도 있습니다. 중간 버튼으로 드래그하면 운영 체제가 좋아하는대로 두 개의 손가락으로 스크롤됩니다.
임의의 대회에 의해 비트는 짧은 행으로 긴 열에 있어야합니다. 디코더 라인이 보이면 이미지의 맨 위에 있어야합니다. 한 방향으로 사진을 찍고 마크 업을 위해 회전하십시오.
프로젝트를 저장하면 이미지의 파일 이름이 .json 으로 확장됩니다. 이러한 분류 및 들여 쓰기 JSON 파일은 GIT 저장소와 같은 버전 제어에 사용하기에 적합해야합니다.
이 키보드 버튼은 대부분의 입력을 제공합니다. 드로잉 라인의 경우 먼저 한 번 클릭하여 시작 위치로 선택한 다음 마우스가 끝 위치 위에있을 때 키를 누릅니다. 상자를 드래그하여 선을 선택하지 않는 한 항목을 삭제하거나 위치를 설정하면 가장 최근에 배치 된 선에 적용됩니다.
왼쪽 마우스 클릭으로 항목을 드래그하고 녹색으로 변하는 것을 지켜 보면 항목을 선택하십시오. 가장 최근에 배치 된 항목은 자동으로 선택됩니다. 일부 명령은 선택된 여러 항목에 대해 작동합니다. 다른 사람은 단지 하나입니다.
D 로 실수를 삭제하거나 S , 화살표 키 또는 마우스 오른쪽 버튼 클릭 드래그로 위치를 약간 조정할 수 있습니다. 움직일 때 관련된 라인의 비트는 성능을 위해 숨겨져있을 수 있으며, M 키 또는 오른쪽 마우스 버튼을 공개하면 다시 그리됩니다.
MacOS에서 ^ ctrl 대신 명령을 의미합니다.
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.
비트를 처음 표시하기 시작하면 소프트웨어는 아직 하나와 0 사이의 임계 값을 알지 못합니다. View / Choose Bit Threshold 으로이를 구성 할 수 있습니다.
최고의 비트조차도 완벽하게 표시되지 않으므로 SHIFT+F 사용하여 소프트웨어가 잘못되었음을 알 수있는 비트 값을 강제하십시오. SHIFT+A 는 비슷하며 모호하거나 손상된 것으로 표시됩니다. DRC 메뉴에는 약한 비트 또는 깨진 정렬과 같은 프로젝트의 문제를 강조하는 설계 규칙 검사가 포함되어 있습니다.
많은 줄을 배치하는 것이 지루해지면 왼쪽 마우스 버튼이있는 그룹을 선택하고 전체 세트를 SHIFT+D 로 복제하십시오. 그런 다음 오른쪽 마우스 버튼으로 새 위치로 드래그하여 원래 위치에 다른 사본을 남겨 둘 수 있습니다. 이에 프레임 속도가 떨어지면 TAB 키를 사용하여 모든 비트를 일시적으로 숨기므로 밀도가 높은 영역에서 많은 라인을 움직입니다.
십자선은 가장 최근에 배치 된 행과 열에 조정됩니다. 이것은 사진의 현실과 일치하도록 조금 기울어 야합니다.
비트와 스팟을 표시 한 후 DRC와 정확하다는 점을 확인한 후 파일/내보내기를 실행하여 Gatorom, Bitviewer 또는 Zorrom과 같은 다른 도구와 구문 분석하기 위해 ASCII에 덤프하십시오.
GUI 외에도이 도구에는 스크립팅에 유용 할 수있는 명령 줄 인터페이스가 있습니다. --help 스위치를 사용하여 최신 매개 변수를 확인하십시오. GUI가 대화식 용도로 열려 있지 않은 경우 --exit 스위치를 확인하십시오.
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.
GUI없이 실행하려면 -platform offscreen 통과하십시오. 프로그램이 Wayland에서 충돌하는 경우 -platform xcb 통과하여 Xorg 사용을 강제로 사용하십시오.
Windows에서는 실행 파일이 CLI에 로그를 유지하면서 GUI를 갖는 것이 어색합니다. 우리는 두 가지 실행 파이브를 생산하여 이것을 해결합니다. GUI의 경우 maskromtool.exe 사용하고 CLI의 경우 maskromtoolcli.exe 사용하십시오.
별도의 실행 파일 인 gatorom )은 그래픽없이 ROM 비트 디코더를 감습니다. 자세한 내용은 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.
QGraphicsScene 주위에 GUI를 설계했습니다. 기본 데이터 객체는 QT 좌표 시스템을 사용하며 픽셀보다 더 나은 정밀도를 위해 플로트가 있습니다.
ROM 사진을로드 한 후 사용자는 칼럼과 행을 사진에 배치합니다. 열과 행의 모든 교차점은 비트로 간주되며 구성 가능한 색상 임계 값은 해당 비트의 값을 결정합니다. 사진이 잘못 읽히면 비트를 알려진 값으로 강제 할 수도 있습니다.
모든 비트가 표시되고 임계 값이 선택되면 소프트웨어는 모든 빛을 파란색 (0)으로 표시하고 모든 어두운 비트는 빨간색 (1)으로 표시됩니다. 그런 다음이 비트는 다른 도구에 사용하기 위해 ASCII로 내보내기위한 링크 된 행 목록에 정렬됩니다.
오류를 식별하기 위해 DRC (Design Rule Checks) 세트는 공개 프로젝트를 비판합니다. 기본 인터페이스는 GUI이지만 CLI는 스크립팅 및 테스트에도 사용할 수 있습니다.
오류없이 수천 비트가 표시 될 수 있지만, 더 큰 프로젝트는 필연적으로 실수를 관리해야합니다.
좋은 시작은 명백한 오류가 남아있을 때까지 DRC 검사와 비트 임계 값의 신중한 구성을 사용하는 것입니다. 그런 다음 프로젝트를 탐색하고 tab 키를 누르면 주석을 보여주고 숨기고 각 비트가 제대로 인식되도록하십시오.
수십 또는 수백 킬로 비트의 ROM과 같이 불충분 한 경우, 동일한 ROM을 여러 번, 바람직하게는 다른 사진에서 주석을 달 수 있습니다. 물론 각 사진에 주석을 달 때 비트 오류가 발생하지만 다른 장소에서 발생합니다. 그런 다음 --export-ascii 의 출력에 대해 --diff-ascii 기능을 사용하여 이미지를 비교하여 모든 프로젝트 파일이 동의 할 때까지 차이를 조정할 수 있습니다.
대부분의 ROM은 Bit 's Center에서 단일 픽셀의 색상을 읽어서 간단히 읽을 수 있습니다. 이를 위해 Default 샘플링 알고리즘이 잘 작동합니다.

비트가 약간 지연된 확산 ROM의 경우 비트의 중심에는 독특한 색이 없지만 약간 어두운 선으로 둘러싸여 있습니다. Wide 알고리즘은 너비 크기의 비트 가치를 샘플링 한 후 각 채널에서 가장 어두운 색상을 취하고 Tall 만 수직으로 수행됩니다.

마스크 ROM 도구에 대한 패치 및 개선은 가장 환영 받지만 기능 요청이있는 문제 추적기를 스팸하지 마십시오. 풀 요청은 github 페이지를 통해 제출해야하며, 타사 라이브러리에 의존적으로 프로젝트를 얽매이지 않아야합니다.
이 코드는 고급 기능을 최소한으로 사용하여 C ++의 보수적 인 방언으로 작성됩니다. 코드와 클래스 정의를 철저히 주석하려고했습니다.
Gatorom은 비트 배열을 해결하는 명령 줄 디코더로 포함됩니다. CLI 문서, 특히 GUI에서 아직 지원되지 않은 솔버 메소드에 대해서는 자체 readme 파일을 참조하십시오.
별도로 Gatorom은 MaskRomtool GUI 내에서 디코딩을위한 라이브러리로 사용됩니다. 편집/디코딩을 사용하여 디코딩 스타일을 정의하고 View/HexpReview를 정의하여 비트를 16 진수로 라이브 디코딩하는 것을보십시오.

디코더에서 육각 바이트를 강조 표시하고보기/강조적으로 16 진수 선택을 사용하여 선택한 바이트를 시각화 할 수 있습니다. 여기서 우리는 MyK82 ROM의 처음 세 단어를 볼 수 있으며, 각 위치에 32 비트를 포장합니다. MAME의 unidasm 경로에있을 때 분해가 가능합니다.

스크립트 솔버도 지원되며 간단한 마스크 또는 야라 규칙은 예상 펌웨어를 설명합니다. 모든 경기는 열거되고, 그것들 사이를 점프하면, 상호 작용, 행 반전 또는 기타 합병증을 사용하지 않는 이미지를 빠르게 해독 할 수 있습니다.

John McMaster의 Zorrom은 훌륭한 디코더 이며이 도구에서 디코딩 라이브러리에 대한 영감입니다.
Adam Laurie의 Rompar는 공개적인 최초의 비트 마킹 도구 일 수 있습니다.
Chris Gerlinsky의 Bitract는 비트 마킹을위한 또 다른 오픈 소스 도구이며 Bitviewer는 비트를 바이트로 디코딩하기위한 그의 일치 도구입니다.
Peter Bosch의 PLA Decode는 오래된 Intel Microcode를 추출하는 데 사용되는 약간 마킹 도구입니다. 자세한 내용은 2020 년의 Hardwear.io Talk를 참조하십시오.