Udon Decompiler

使用

For English version, refer to Usage.

完成本项目的安装后, 你就可以反编译世界中的 Udon 程序了.

获取世界文件

本项目不提供这方面的指引. 你应当有一个 .vrcw.vrcw 格式的文件.

提取 Udon 程序

使用 安装一节下载的 UdonProgramDumperUdonProgramDumper 程序提取 .vrcw.vrcw 中的程序文件, 具体而言, 你需要执行

UdonProgramDumper dump <world.vrcw>
UdonProgramDumper dump <world.vrcw>

你应该得到类似这样的输出

$ UdonProgramDumper dump example.vrcw
[example.vrcw] dumped 8 program(s), 8 public var file(s) to /path/to/example-dumped
$ UdonProgramDumper dump example.vrcw
[example.vrcw] dumped 8 program(s), 8 public var file(s) to /path/to/example-dumped

然后可以在 .vrcw.vrcw 文件相同目录下找到所生成的 example-dumpedexample-dumped 文件夹, 其中包含:

  • programs/programs/: 提取出的 .hex.hex 程序文件
  • vars/vars/: 提取出的 .b64.b64 public var 文件
  • program-var-map.jsonprogram-var-map.json: program 与使用它的 GameObject/public var 文件之间的映射

反编译

运行

udon-decompiler dc example-dumped/programs --info UdonModuleInfo.json
udon-decompiler dc example-dumped/programs --info UdonModuleInfo.json

此处需要填写 example-dumped/programsexample-dumped/programs 文件夹和 UdonModuleInfo.jsonUdonModuleInfo.json 文件的实际路径.

控制台应当显示日志如

2026-03-18T03:15:38.832775Z INFO udon_decompiler: logging initialized level=info
2026-03-18T03:15:38.832843Z INFO udon_decompiler: start command mode=Dc input=example-dumped/programs output=None template=None
2026-03-18T03:15:38.837946Z INFO udon_decompiler: processing directory mode=Dc input_dir=example-dumped/programs output=None template=None
2026-03-18T03:15:38.842021Z INFO udon_decompiler: processing "example-dumped/programs/27d9de9b1e2d2424cadf167f75a47d24.hex"
2026-03-18T03:15:38.845832Z INFO udon_decompiler::decompiler::context: class name inferred: Sonic853.Udon.Keypad.UdonVRCheckerObjects
2026-03-18T03:15:38.845873Z INFO udon_decompiler::decompiler::context: decompile context loaded bytecode_len=468 instruction_count=60 entry_points=1 symbols=15 heap_entries=23
2026-03-18T03:15:38.846975Z INFO udon_decompiler::decompiler::variable: 23 variables identified from heap
2026-03-18T03:15:39.018584Z INFO udon_decompiler::decompiler::module_info: successfully loaded module info
2026-03-18T03:15:39.019550Z INFO udon_decompiler::decompiler::basic_block: 7 basic blocks identified
2026-03-18T03:15:39.019791Z INFO udon_decompiler::decompiler::cfg: 1 functions discovered with their cfgs built
2026-03-18T03:15:39.019884Z INFO udon_decompiler::decompiler::ir::builder: 1 IrFunctions built
2026-03-18T03:15:39.020321Z INFO udon_decompiler::decompiler::transform::pipeline: IR transformed.
2026-03-18T03:15:39.020411Z INFO udon_decompiler::decompiler::codegen: c# code for UdonVRCheckerObjects generated!
2026-03-18T03:15:39.073924Z INFO udon_decompiler: example-dumped/programs/27d9de9b1e2d2424cadf167f75a47d24.hex -> example-dumped/programs-decompiled/Sonic853_Udon_Keypad_UdonVRCheckerObjects.cs
...
2026-03-18T03:15:39.710051Z INFO udon_decompiler: done!
2026-03-18T03:15:38.832775Z INFO udon_decompiler: logging initialized level=info
2026-03-18T03:15:38.832843Z INFO udon_decompiler: start command mode=Dc input=example-dumped/programs output=None template=None
2026-03-18T03:15:38.837946Z INFO udon_decompiler: processing directory mode=Dc input_dir=example-dumped/programs output=None template=None
2026-03-18T03:15:38.842021Z INFO udon_decompiler: processing "example-dumped/programs/27d9de9b1e2d2424cadf167f75a47d24.hex"
2026-03-18T03:15:38.845832Z INFO udon_decompiler::decompiler::context: class name inferred: Sonic853.Udon.Keypad.UdonVRCheckerObjects
2026-03-18T03:15:38.845873Z INFO udon_decompiler::decompiler::context: decompile context loaded bytecode_len=468 instruction_count=60 entry_points=1 symbols=15 heap_entries=23
2026-03-18T03:15:38.846975Z INFO udon_decompiler::decompiler::variable: 23 variables identified from heap
2026-03-18T03:15:39.018584Z INFO udon_decompiler::decompiler::module_info: successfully loaded module info
2026-03-18T03:15:39.019550Z INFO udon_decompiler::decompiler::basic_block: 7 basic blocks identified
2026-03-18T03:15:39.019791Z INFO udon_decompiler::decompiler::cfg: 1 functions discovered with their cfgs built
2026-03-18T03:15:39.019884Z INFO udon_decompiler::decompiler::ir::builder: 1 IrFunctions built
2026-03-18T03:15:39.020321Z INFO udon_decompiler::decompiler::transform::pipeline: IR transformed.
2026-03-18T03:15:39.020411Z INFO udon_decompiler::decompiler::codegen: c# code for UdonVRCheckerObjects generated!
2026-03-18T03:15:39.073924Z INFO udon_decompiler: example-dumped/programs/27d9de9b1e2d2424cadf167f75a47d24.hex -> example-dumped/programs-decompiled/Sonic853_Udon_Keypad_UdonVRCheckerObjects.cs
...
2026-03-18T03:15:39.710051Z INFO udon_decompiler: done!

然后可以在 example-dumped/programs-decompiledexample-dumped/programs-decompiled 目录中找到所有反编译结果, 也即 .cs.cs 格式的伪代码.