
RenoDX着色器逆向入门decomp.exe与3Dmigoto如何反编译SM6.0游戏着色器【免费下载链接】renodxRenovation Engine for DirectX Games项目地址: https://gitcode.com/GitHub_Trending/re/renodxRenoDXRenovation Engine for DirectX GamesDirectX 游戏翻新引擎是一套游戏模组工具集替换着色器、注入缓冲、升级交换链、添加叠加层。它的逆向工作流核心就是两个反编译器——decomp.exe负责 Shader Model 6.0 的 HLSL 还原3Dmigoto的cmd_Decompiler.exe负责 SM5.0 及以下。本文带你用最小成本跑通从游戏里拿到着色器 → 反编译成可读 HLSL → 替换回游戏的完整流程。一、为什么着色器逆向需要双反编译器现代游戏运行时使用的着色器是二进制字节码.cso/ DXIL不是源码。不同 Shader Model 需要不同的工具链Shader Model工具说明SM 6.0ps_6_0~ps_6_6decomp.exeRenoDX 自带基于 DirectXShaderCompilerD3DCompiler实现SM 5.0 及以下3Dmigotocmd_Decompiler.exe第三方经典工具仓库最低要求版本1.3.16见 cmake/tool-versions.cmake 分界线就是 DXILSM6 开始微软改用新的 DXIL 字节码格式旧工具看不懂所以 RenoDX 专门写了一个基于 D3DCompiler 的反编译器。RenoDX 之所以能做到通吃是因为它建立在 Reshade 的 add-on 体系上见 README.md无需针对特定游戏 exe 打补丁兼容性极宽。二、decomp.exeSM6.0 着色器反编译decomp.exe是命令行单文件工具入口在 src/decompiler/cli.cpp核心反编译逻辑指令映射、签名解析、lerp/pow 模式识别等在 src/utils/shader_decompiler_dxc.hpp。它的工作分两步反汇编调用 D3DCompiler 把二进制着色器还原成中间指令文本反编译解析指令流、输入/输出签名、cbuffer 与资源绑定表重建接近可读的 HLSL。快速上手3 条命令搞定# 1. 把 .cso 反编译成同目录 .hlsl不指定输出时自动用输入名 decomp.exe shader.cso # 2. 指定输出路径--flatten 把复杂控制流展开为平坦代码更易读 decomp.exe shader.cso output.hlsl --flatten # 3. 批量处理时用 --skip-existing 跳过已反编译的文件 decomp.exe *.cso --skip-existing完整的参数帮助可以直接运行decomp.exe查看用法提示见 cli.cpp 第 23~24 行。--flatten值得单独说DXIL 里常有编译器生成的复杂分支结构展开后代码更原始但更好改逆向圈常用它来确认循环和条件的真实逻辑。三、3Dmigoto老一代着色器的兜底方案SM5.0 及以下的着色器如大量 DX11 老游戏的ps_5_0、cs_5_0用 3Dmigoto 的cmd_Decompiler.exe处理即可。仓库的官方贡献指南 docs/CONTRIBUTING.md 明确列出了它作为环境依赖之一从 3Dmigoto 的 release 页下载工具包把cmd_Decompiler.exe放入.\bin或直接跑 scripts/setup-dev-env.ps1 的-Tools 3dmigoto -Install脚本会自动拉取配置好的版本。工具链版本基准全部集中在 cmake/tool-versions.cmakeDXC、Slang、glslang、3Dmigoto 各一条改版本只动这一个文件。四、着色器文件命名规范一眼看懂逆向产物RenoDX 对反编译产物的命名有严格约定构建系统会自动扫描src/games/下的所有.hlsl见 docs/CONTRIBUTING.md 的Automated configuration一节{名称}_0x{CRC32}.{ps|cs|vs}_{大版本}_{小版本}.hlsl例如 tonemap_0x756E88B2.ps_4_0.hlsltonemap是人为起的名字0x756E88B2是该着色器在游戏中的 CRC32 哈希用于运行时精确匹配ps_4_0是像素着色器 SM4.0。你从 decomp.exe 拿到的文件按此规则改名放进游戏模组目录就能被构建系统识别并编译替换。仓库里几百个游戏模组都是这么组织出来的随便挑一个看结构即可比如 src/games/valheim/ 或 src/games/fallout76/。新建模组可以从模板目录 src/games/generic 复制起步。五、进阶devkit 实时转储不进游戏编辑器想确认游戏当前到底在跑哪个着色器RenoDX 提供devkit游戏内检查插件 mcp_bridge桥接进程构建目标见 docs/DEVKIT_MCP.mddevkit_list_shaders/devkit_get_shader列出并查看帧内着色器devkit_dump_shader把指定着色器转储为二进制交给上面的 decomp.exe 反编译转储目录约定为renodx-dev/dump热替换用renodx-dev/live。官方建议的排查思路是从一帧的末尾往回找最终 blit、UI 合成、场景合成先定位HDR 数据在哪一步丢失再反编译对应的 pass——这套流程在 DEVKIT_MCP.md 第 91~108 行 有完整描述。六、常见问题与技巧Q1反编译出来的代码为什么全是exp2(log2(x)*y)这种怪写法这是编译器优化痕迹。decomp.exe 已内置了常见模式还原如((b-a)*t)a→lerp(a,b,t)映射表可参考 notes.md实现见 shader_decompiler_dxc.hpp 的 OptimizeString。Q2反编译失败或输出为空先确认 DXC 工具链版本达标CMake 配置时会自动检查并警告用 scripts/setup-dev-env.ps1-Update更新即可再确认 Reshade 已正确安装RenoDX 基于其 add-on 系统是硬性依赖。Q3SM6 和 SM5 的转储文件有什么区别转储扩展名按 API 走DirectX 系统一是.csoVulkan 是.spv逻辑见 src/utils/shader_dump.hpp。拿到文件后按版本号选工具即可_6_x找 decomp.exe_5_x及更低找 3Dmigoto。Q4改完之后如何验证把 HLSL 按命名规范放进游戏目录重新构建模组devkit 的devkit_load_live_shaders支持热加载改一行 shader 不用重启游戏——这是 RenoDX 相比传统 mod 开发最大的效率优势。七、小结SM6.0→decomp.exe一行命令出 HLSL--flatten辅助阅读SM5.0-→ 3Dmigotocmd_Decompiler.exesetup-dev-env.ps1可一键装好产物按{名称}_0x{CRC}.{type}_{x}_{y}.hlsl命名即可被构建系统自动接管拿不准目标 pass 时用 devkit mcp_bridge 从帧尾倒查再转储反编译。照着这条链路走从游戏里的一坨二进制到可修改的着色器源码通常只需要半小时。【免费下载链接】renodxRenovation Engine for DirectX Games项目地址: https://gitcode.com/GitHub_Trending/re/renodx创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考