My tools (various platforms and programming languages)
Apr 27, 2015 21:37:15 GMT -5
punk7890™, dj4uk6cjm, and 1 more like this
Post by nisto on Apr 27, 2015 21:37:15 GMT -5
I was asked by dj4uk6cjm to join the site, so figured I'd start a thread for my tools since I have a few on my back at this point.
General tools
chbyte.py (Python):
A very simple Python script I wrote for someone on hcs64 who needed to change a byte flag at a certain offset across multiple files.
binary-data-search.py (Python)
A binary data searching tool, capable of searching for a string of ASCII text or hexadecimal values acoss directories with optional extension filter(s). Probably needs a bit of work, the algorithm might be slow.. ?
MusyXExtract.py (Python)
MusyXExtract.php (PHP; deprecated!)
A sample extractor for Nintendo GameCube games utilizing the MusyX SDK/API (.sdir + .samp files). The names of the .sdir/.samp pairs must match for everything to work correctly. It has been well tested and works with the following games (but should have no problems extracting samples from other MusyX games you might come across, provided you have the needed data, and in properly named files):
Game specific tools
Biohazard 0 (Resident Evil 0) (GameCube)
arcex (C)
An extractor for the .arc files.
alzdec (C)
A decompressor for the .lz/.alz files. This is my first "serious" C program and first project involving reverse engineering. The decompression routine took me over a week to disassemble! This tool does not compress, but if you want to modify the game data, you can actually change it (with some restrictions) by replacing it with uncompressed data - simply change the compression type (first byte) to 0 and the size (0x1, 32-bit LE) to the uncompressed size of course.
bio0text.py (Python)
A somewhat failed but rather enormous experiment for converting the game's text (codepoints) to ASCII/Unicode. Why failed? At least in the final Japanese release, codepoints from certain areas/files seems to point to different glyphs than in most others, so in some cases (some save location area names for example) the characters are not properly converted... I ended up spending nearly 24 hours writing this script as I had to handcraftedly compile all the codepoints/characters into a Python dictionary. I did so by manually swapping the message codepoints in RAM while Dolphin had the game loaded, then OCRing the glyphs through screenshots. Of course I had AutoHotkey to help me in the process, but it was STILL quite a tedious and slow-paced process. So a lot of work has been put into this, and I really hope some day someone can help figure out why some characters are not correct in some cases, and what needs to be done to fix it. Most of the game's text is stored in compressed files (.lz) within /message/message.arc
Biohazard 4 (Resident Evil 4) (GameCube)
bio4midiex.py (Python)
An extractor for the samples in bio4midi.dat. To clarify, this does NOT extract or convert any MIDI data (notes, instructions, etc.) - only the samples. With somewhat minor modifications, this tool can probably be made to work on doorse.dat and title.snd as well, as they appear to be pretty similar formats.
bio4str.py (Python)
An extractor for the streams in bio4bgm.sbb and bio4evt.sbb.
Evergrace 2 (Forever Kingdom) (PlayStation 2)
eg2vfs.py (Python)
An extractor for its VFS files. Although "universal" VFS extraction tools do exist, this game is a somewhat special case, specifically because .pss file sizes are specified in bytes and others in sectors. It also has some rather special "filenames".
Harvest Moon: A Wonderful Life (GameCube)
hmarcex.py (Python)
A quick script I wrote for someone on hcs64 to extract the data in the sound folder's .arc files to proper separate MusyX files.
Silent Hill (PlayStation)
shdec (C)
A decryptor for "BODYPROG.BIN" and "B_KONAMI.BIN", which contains additional executable code (in addition to the main executable, that is). Opening these files for disassembly can be a pain however, unless you know your way around in IDA or whatever...
Silent Hill 2 (PlayStation 2)
sh2bgmreplace.php (PHP)
This is a tool I wrote to help replace and identify the BGM data in Silent Hill 2, mainly so that I could access unused BGMs. It requires some configuration in the source code before use and was made to work specifically on SLUS-20228.
General tools
chbyte.py (Python):
A very simple Python script I wrote for someone on hcs64 who needed to change a byte flag at a certain offset across multiple files.
binary-data-search.py (Python)
A binary data searching tool, capable of searching for a string of ASCII text or hexadecimal values acoss directories with optional extension filter(s). Probably needs a bit of work, the algorithm might be slow.. ?
MusyXExtract.py (Python)
MusyXExtract.php (PHP; deprecated!)
A sample extractor for Nintendo GameCube games utilizing the MusyX SDK/API (.sdir + .samp files). The names of the .sdir/.samp pairs must match for everything to work correctly. It has been well tested and works with the following games (but should have no problems extracting samples from other MusyX games you might come across, provided you have the needed data, and in properly named files):
- Biohazard (Resident Evil)
- Biohazard 0 (Resident Evil 0)
- Eternal Darkness: Sanity's Requiem
- Harvest Moon: A Wonderful Life
- Paper Mario: The Thousand-Year Door
- Pokémon Colosseum
- Star Fox Adventures
- Wario World
Game specific tools
Biohazard 0 (Resident Evil 0) (GameCube)
arcex (C)
An extractor for the .arc files.
alzdec (C)
A decompressor for the .lz/.alz files. This is my first "serious" C program and first project involving reverse engineering. The decompression routine took me over a week to disassemble! This tool does not compress, but if you want to modify the game data, you can actually change it (with some restrictions) by replacing it with uncompressed data - simply change the compression type (first byte) to 0 and the size (0x1, 32-bit LE) to the uncompressed size of course.
bio0text.py (Python)
A somewhat failed but rather enormous experiment for converting the game's text (codepoints) to ASCII/Unicode. Why failed? At least in the final Japanese release, codepoints from certain areas/files seems to point to different glyphs than in most others, so in some cases (some save location area names for example) the characters are not properly converted... I ended up spending nearly 24 hours writing this script as I had to handcraftedly compile all the codepoints/characters into a Python dictionary. I did so by manually swapping the message codepoints in RAM while Dolphin had the game loaded, then OCRing the glyphs through screenshots. Of course I had AutoHotkey to help me in the process, but it was STILL quite a tedious and slow-paced process. So a lot of work has been put into this, and I really hope some day someone can help figure out why some characters are not correct in some cases, and what needs to be done to fix it. Most of the game's text is stored in compressed files (.lz) within /message/message.arc
Biohazard 4 (Resident Evil 4) (GameCube)
bio4midiex.py (Python)
An extractor for the samples in bio4midi.dat. To clarify, this does NOT extract or convert any MIDI data (notes, instructions, etc.) - only the samples. With somewhat minor modifications, this tool can probably be made to work on doorse.dat and title.snd as well, as they appear to be pretty similar formats.
bio4str.py (Python)
An extractor for the streams in bio4bgm.sbb and bio4evt.sbb.
Evergrace 2 (Forever Kingdom) (PlayStation 2)
eg2vfs.py (Python)
An extractor for its VFS files. Although "universal" VFS extraction tools do exist, this game is a somewhat special case, specifically because .pss file sizes are specified in bytes and others in sectors. It also has some rather special "filenames".
Harvest Moon: A Wonderful Life (GameCube)
hmarcex.py (Python)
A quick script I wrote for someone on hcs64 to extract the data in the sound folder's .arc files to proper separate MusyX files.
Silent Hill (PlayStation)
shdec (C)
A decryptor for "BODYPROG.BIN" and "B_KONAMI.BIN", which contains additional executable code (in addition to the main executable, that is). Opening these files for disassembly can be a pain however, unless you know your way around in IDA or whatever...
Silent Hill 2 (PlayStation 2)
sh2bgmreplace.php (PHP)
This is a tool I wrote to help replace and identify the BGM data in Silent Hill 2, mainly so that I could access unused BGMs. It requires some configuration in the source code before use and was made to work specifically on SLUS-20228.