mrtitanic777/XexTool-RE

GitHub: mrtitanic777/XexTool-RE

用现代 C++17 从头重构的经典 Xbox 360 `.xex` 可执行文件处理工具,通过逆向工程实现了与原 XexTool 逐字节一致的输出并附带原生 GUI。

Stars: 0 | Forks: 0

# XexTool-RE 这是对用于 Xbox 360 `.xex` 文件的、xorloser 的 **XexTool**(v6.3,2011)进行的干净室 C++17 重构版本——带有原生 GUI,并且其输出与原工具**逐字节完全一致**。 ## 这是什么? XexTool *是*用于处理 Xbox 360 可执行文件的*必备*实用程序:提取 basefile、转换压缩/加密、移除区域和媒体限制、为开发套件重新签名。自 2011 年以来,它一直是闭源且无人维护的。 XexTool-RE 是通过逆向工程原始二进制文件,从头开始重新实现的。它不是简单的封装——每种格式、每条 hash 链以及 LZX 压缩器都用现代 C++ 进行了重新实现,并通过对真实文件的原始输出进行比对来加以验证。 **28 项操作中的 28 项都产生了逐字节相同的输出**,已通过零售游戏、自制软件以及 Xbox 360 NAND 系统文件(`xam.xex`、`xbdm.xex`)进行了验证。 ## 状态 | 操作 | 原始命令 | 状态 | |---|---|---| | 信息 / 列表 | `-l` | 逐字节一致 | | 提取 basefile | `-b` | 逐字节一致 | | 导出资源 | `-d` | 逐字节一致 | | 输出 XML | `-x` | 逐字节一致 | | IDA 脚本 | `-i` | 逐字节一致 | | 压缩 (LZX) | `-c c` | 逐字节一致 | | 解压 | `-c u` | 逐字节一致 | | 扁平二进制 | `-c b` | 逐字节一致 | | 加密 / 解密 | `-e e` / `-e u` | 逐字节一致 | | 机器类型 | `-m d` / `-m r` | 逐字节一致 | | 移除限制 | `-r` | 逐字节一致(见说明) | | 边界路径 | `-a` | 逐字节一致 | | Delta patching | `-p` / `-u` | 17/18 个样本 | | 特殊补丁 | `-s` | **无法使用——见下文** | ### 已知缺失 - **`-s`(特殊补丁)尚不完整。** 补丁逻辑本身已经解决,并且修补后的 data region 是逐字节一致的,但是修改 basefile 映像需要重新计算 XEX **page-hash 链**,这部分尚未被逆向工程。输出将带有陈旧的 page hash 并且无法通过主机验证。该命令会拒绝执行,而不是写入损坏的文件。 - **`-r i/y/v/k/c`**(主机/日期/keyvault/吊销限制)未被映射——没有任何可用的样本带有这些限制,因此没有可供验证的内容。它们会被忽略而不是被盲目猜测。 - 18 个 delta-patch 样本中的一个(`xam`)在 delta-LZX 的一个边缘情况下有 7 个字节的差异。 ## 构建 需要 C++17 编译器。在 Windows 上使用 MinGW-w64 g++ 进行了构建和测试。 ``` mingw32-make # CLI + GUI mingw32-make cli # XexTool-RE.exe mingw32-make gui # XexTool-RE-gui.exe mingw32-make clean ``` ## 用法 ``` xextool-re [args] info summary info list extended info (libs, resources, sections) extract [out] dump the decrypted/decompressed basefile resources [dir] dump embedded resources xml [opts] machine-readable XML idc dump an IDA script compress [enc|unenc] LZX-compress decompress convert to uncompressed basic binary convert to flat binary basic encrypt|decrypt toggle encryption machine force machine type remove-limits strip limits (a/m/r/z/b/d/l) bounding-path add a bounding path special [mask] [out] xex-specific patches patch apply a delta patch selftest crypto known-answer tests ``` GUI(`xextool-re-gui.exe`)提供了每一项操作:打开 `.xex`,读取解析出的信息,并通过保存对话框运行任何转换。 ## 关于格式的说明 这是重构过程中必须弄清楚的一些内容,记录在这里是因为它在其他任何地方都没有文档记载: - **规范标头布局。** XexTool 写入的每一个 XEX 都将 security info 放置在 `0x18 + optional_header_count*8 + 0x80`——*而不是*固定的 `0x120`。Blob 按照键的顺序以其精确大小打包;import-libraries blob 紧贴在标头末尾,并且 `data_offset = round_up(other_blobs_end + import_size, 0x1000)`。 - **Import digest 链。** 每个 import library 都存储了**下一个** library 块的 SHA-1(跳过该块 4 字节的 size 字段);最后一个为零,而头部位于 `ImageInfo.ImportDigest` 中。采用从后往前的方式构建。 - **基本格式。** 零区域在 32 KB 的粒度上被省略;*在*加密*之后*,存储的 payload 会被零填充到一个完整的粒度。 - **开发套件签名。** `sig = (PSS · R²)^d mod N`(R = 2^2048,e = 3),所有 bignums 都进行了 qword 反转;PSS DB mask 是一个**由 H 作为密钥的 RC4 keystream**,而不是 MGF1。 ## 来源 这是出于保存和互操作目的的干净室重新实现。它不包含原工具的任何代码。 密钥材料和格式常数是从原始的 XexTool 二进制文件中恢复的,该文件自 2011 年以来一直被公开分发。原始二进制文件、其反汇编代码以及任何测试 `.xex` 文件**均不**包含在此代码仓库中,并且被 `.gitignore` 排除——请自备。 XexTool 是 **xorloser** 的作品。这个项目的存在是因为它已闭源且无人维护,而不是为了取代或贬低它。 ## 许可证 MIT — 见 [许可证](LICENSE)。
标签:Bash脚本, C++17, GUI, HTTP头分析, Xbox 360, 云资产清单, 文件处理, 游戏开发, 逆向工程