# xex2tractor A tool for extracting and inspecting Xbox 360 XEX2 executable files, written in Rust. ## Usage ### Inspect Display XEX2 file information (headers, security info, etc.): ```sh xex2tractor inspect ``` #### Example Output ``` === XEX2 Header === Magic: XEX2 (0x58455832) Module Flags: 0x00000001 [TITLE] Header Size: 0x00003000 (12288 bytes) Reserved: 0x00000000 Security Offset: 0x00000090 Header Count: 15 === Optional Headers (15 entries) === [ENTRY_POINT] 0x824AB748 [IMAGE_BASE_ADDRESS] 0x82000000 [DEFAULT_STACK_SIZE] 0x00080000 (524288 bytes) [SYSTEM_FLAGS] 0x00000400 [PAL50_INCOMPATIBLE] [EXECUTION_INFO] Media ID: 0x2D2E2EEB Title ID: 0x535107D4 Version: 0.0.0.2 ... [FILE_FORMAT_INFO] Encryption: Normal (AES-128-CBC) Compression: Normal (LZX) Window Size: 0x8000 (32 KB) ... === Security Info === Header Size: 0x00000F34 (3892 bytes) Image Size: 0x00920000 (9568256 bytes) RSA Signature: 2C94EBE6...11A6E8AA (256 bytes) Image Flags: 0x00000008 [XGD2_MEDIA_ONLY] Load Address: 0x82000000 Region: 0xFFFFFFFF [ALL REGIONS] Allowed Media Types: 0x00000004 [DVD_CD] ... ``` ### Extract Extract the decrypted and decompressed PE image from a XEX2 file: ```sh xex2tractor extract [output.exe] ``` If no output path is given, defaults to the input filename with `.exe` extension. #### Example ```sh $ xex2tractor extract default.xex default.exe Encryption: Normal (AES-128-CBC) Compression: Normal (LZX) Extracted PE image (9568256 bytes) -> default.exe ``` Supports: - AES-128-CBC decryption (retail, devkit, and XEX1 master keys) - No compression, basic (zero-fill), and normal (LZX) decompression - PE header verification (MZ signature, PE signature, POWERPCBE machine type) ## Building ```sh cargo build --release ``` ## Testing Place a sample XEX2 file at `tests/data/default.xex`, then run: ```sh cargo test ``` ## Documentation See [doc/xex2_format.md](doc/xex2_format.md) for the XEX2 file format specification. ## License This project is licensed under the MIT License. See [LICENSE](LICENSE) for details.