ReverseBox

A set of functions useful in reverse engineering.


Keywords
ReverseBox, reverse, engineering, RE, CRC, Hash, Encryption, Compression, Checksum, Python, image, decode, decoding, RGB, swizzle, swizzling, morton, twiddling, texture, cipher, modding, modding-tools, reverse-engineering, xentax
License
GPL-3.0
Install
pip install ReverseBox==0.11.8

Documentation

Info

ReverseBox is a Python package with a set of functions useful in software reverse engineering.

Why ReverseBox?
It's designed to help with:

  1. Decompressing / compressing data
  2. Decrypting / encrypting data
  3. Tedious reverse engineering tasks e.g. testing different checksum algorithms to find the one that was used in the software or file format
  4. Figuring out file formats
  5. Parsing data structures
  6. Wrapping functions for input/output operations
  7. Searching for raw images

Who should use ReverseBox?
Mostly developers and reverse engineers (e.g. file format researchers or software researchers).

List of functionalities

  • Checksum

    • Adler32 βœ”οΈ
    • Fletcher16 βœ”οΈ
    • Fletcher32 βœ”οΈ
    • Internet Checksum / IPv4 header checksum βœ”οΈ
    • Sum8 βœ”οΈ
    • Sum8 2s Complement βœ”οΈ
    • Unix Sum BSD16 βœ”οΈ
    • Unix Sum SYSV βœ”οΈ
    • Xor8 βœ”οΈ
  • CRC

    • CRC-8 βœ”οΈ
    • CRC-8/CDMA2000 βœ”οΈ
    • CRC-8/DARC βœ”οΈ (wrapper only)
    • CRC-16 (ARC) βœ”οΈ
    • CRC-16 (Modbus) βœ”οΈ
    • CRC-16 (Sick) βœ”οΈ
    • CRC-16 (DNP) βœ”οΈ
    • CRC-16 (EA CRCF) βœ”οΈ
    • CRC-16-CCITT (XModem) βœ”οΈ
    • CRC-16-CCITT (0xFFFF) βœ”οΈ
    • CRC-16-CCITT (0x1D0F) βœ”οΈ
    • CRC-16-CCITT (Kermit) βœ”οΈ
    • CRC-32/CKSUM (Unix cksum) βœ”οΈ
    • CRC-32 (ISO/HDLC) βœ”οΈ
    • CRC-32 (Asobo) βœ”οΈ
    • CRC-64 (Asobo) βœ”οΈ
    • CRC-64/GO-ISO βœ”οΈ (wrapper only)
  • Compression

    • Asobo (TODO) ❌
    • BZE/BZZ (TODO) ❌
    • BZIP2 (TODO) ❌
    • GZIP (TODO) ❌
    • JCALG1 (TODO) ❌
    • LZMA (TODO) ❌
    • LZO / LZO1X βœ”οΈ (wrapper only)
    • LZSS (TODO) ❌
    • NitroSDK (TODO) ❌
    • Oodle (TODO) ❌
    • Refpack (EA Games) βœ”οΈ (wrapper only)
    • RNC (TODO) ❌
    • ZLIB βœ”οΈ (wrapper only)
  • Encryption

    • AES (TODO) ❌
    • DES (TODO) ❌
    • Lucifer / DTD-1 (TODO) ❌
    • ROT13 βœ”οΈ
    • XOR Cipher (Basic) βœ”οΈ
    • XOR Cipher (Basic) Guesser βœ”οΈ
    • (game-specific) XOR Cipher (Retro64 ECO) βœ”οΈ
    • (game-specific) XOR Cipher (Giana’s Return ZDA) βœ”οΈ
  • Hash

    • DJB2 βœ”οΈ
    • FNV0-32 βœ”οΈ
    • FNV0-64 βœ”οΈ
    • FNV1-32 βœ”οΈ
    • FNV1-64 βœ”οΈ
    • FNV1A-32 βœ”οΈ
    • FNV1A-64 βœ”οΈ
    • SHA-1 βœ”οΈ (wrapper only)
    • SHA-2 (256 bits) βœ”οΈ (wrapper only)
    • MD2 βœ”οΈ (wrapper only)
    • MD5 βœ”οΈ (wrapper only)
    • (game-specific) Hercules (TODO) ❌
    • (game-specific) E-racer (TODO) ❌
  • Image

    • Decode RGBA2222 βœ”οΈ
    • Decode RGBX2222 βœ”οΈ
    • Decode RGB565 βœ”οΈ
    • Decode RGB888 βœ”οΈ
    • Decode ARGB4444 βœ”οΈ
    • Decode RGBA4444 βœ”οΈ
    • Decode XRGB1555 βœ”οΈ
    • Decode ABGR1555 βœ”οΈ
    • Decode XBGR1555 βœ”οΈ
    • Decode ARGB8888 βœ”οΈ
    • Decode ABGR8888 βœ”οΈ
    • Decode PAL4_RGBX5551 βœ”οΈ
    • Decode PAL4_RGB888 βœ”οΈ
    • Decode PAL4_RGB565 βœ”οΈ
    • Decode PAL4_RGBA8888 βœ”οΈ
    • Decode PAL4_RGB5A3 βœ”οΈ
    • Decode PAL8_RGBX2222 βœ”οΈ
    • Decode PAL8_RGBX5551 βœ”οΈ
    • Decode PAL8_BGRX5551 βœ”οΈ
    • Decode PAL8_RGB888 βœ”οΈ
    • Decode PAL8_BGR888 βœ”οΈ
    • Decode PAL8_RGB565 βœ”οΈ
    • Decode PAL8_RGBX6666 βœ”οΈ
    • Decode PAL8_RGB5A3 βœ”οΈ
    • Decode PAL8_RGBA8888 βœ”οΈ
    • Decode PAL8_BGRA8888 βœ”οΈ
    • Decode DXT1 βœ”οΈ
    • Decode DXT3 βœ”οΈ
    • Decode DXT5 βœ”οΈ
    • Decode GST121 βœ”οΈ
    • Decode GST221 βœ”οΈ
    • Decode GST421 βœ”οΈ
    • Decode GST821 βœ”οΈ
    • Decode GST122 βœ”οΈ
    • Decode GST222 βœ”οΈ
    • Decode GST422 βœ”οΈ
    • Decode GST822 βœ”οΈ
    • Decode YUY2 βœ”οΈ
    • 3DS Swizzling/Twiddling βœ”οΈ
    • CMPR Swizzling/Twiddling βœ”οΈ
    • PS2 Swizzling/Twiddling βœ”οΈ
    • PSP Swizzling/Twiddling βœ”οΈ
    • GameCube/WII Swizzling/Twiddling βœ”οΈ
    • PSVITA Swizzling/Twiddling βœ”οΈ
    • Switch Swizzling/Twiddling βœ”οΈ
    • XBOX/PS3 Swizzling/Twiddling (Morton Order) βœ”οΈ
    • PS2 GS Texture Swizzling/Twiddling βœ”οΈ
    • PS2 GS Texture Compression βœ”οΈ
  • IO

    • File Reader βœ”οΈ
    • File Writer βœ”οΈ
    • Bytes Handler βœ”οΈ
    • Translation Text Handler βœ”οΈ
    • Mod Handler βœ”οΈ
    • File extension checking βœ”οΈ
    • Padding calculation βœ”οΈ
    • File size checking βœ”οΈ

Checksum calculation - example

// CRC32 calculation

from reversebox.crc import crc32_iso_hdlc
from reversebox.common import common

test_data = b'123456789'
crc32_handler = crc32_iso_hdlc.CRC32Handler()
crc32 = crc32_handler.calculate_crc32(test_data)
print("CRC32_INT: ", crc32)
print("CRC32_STR: ", common.convert_int_to_hex_string(crc32))

// CRC32 output

CRC32_INT:  3421780262
CRC32_STR:  0xCBF43926

XOR encryption - example

// XOR Cipher (Basic)

from reversebox.encryption.encryption_xor_basic import xor_cipher_basic


test_data = b'abcd'
test_key = b'\x3D'
xor_result = xor_cipher_basic(test_data, test_key)
print(xor_result)

// XOR Cipher output

b'\\_^Y'

File Handler - example

// File reading

import os
from reversebox.io_files.file_handler import FileHandler


file_path = os.path.join(os.path.dirname(__file__), "file.bin")
file_reader = FileHandler(file_path, "rb")
file_reader.open()
value = file_reader.read_str(4, "utf8")
print(value)

// File Reader Output

ABCD

Hash calculation - example

// SHA-1 calculation

from reversebox.hash.hash_sha1 import SHA1Handler

test_data = b'abcd'
sha1_handler = SHA1Handler()
sha1 = sha1_handler.calculate_sha1_hash(test_data)
print("SHA-1 hash: ", sha1)

// SHA-1 Output

SHA-1 hash:  b'\x81\xfe\x8b\xfe\x87Wl>\xcb"Bo\x8eW\x84s\x82\x91z\xcf'

More Examples

Need more examples?
Check out list of tools written using ReverseBox: