WIP工具将Unity的IL2CPP构建过程逆转到原始的托管DLL。
下面的信息几乎完全适用于GitHub版本上可用的CLI应用程序。有关使用“核心”模块的文档 - CLI只是包装器 - 在您自己的项目中,请参见readme_core.md
使用libcpp2il进行元数据结构的初始解析和加载。如果您想用IL2CPP元数据自己做某事,并且根据MIT许可发布,则可以从构建工件中获得libcpp2il。上面的链接将带您到libcpp2il的文档。
CPP2IL目前正在进行重大重写。该分支代表正在进行的工作,并且可能会发生变化。
可以从我的Nuget Feed获得开发人员的CI构建。
命令行接口已简化,从许多命令行选项到输出格式和处理层的概念。但是,许多此类格式和层尚未实现,因此与先前发布的版本相比,功能受到限制。
已删除了许多选择,例如--analysis-level , --skip-analysis等。忽略了尚未实施分析的事实,这些选项将不会回来。默认情况下,分析将停止,并将通过处理层的使用来启用。
同样,以前抑制CPP2ILINDED属性的选项已被过程层替换为--supress-attributes ,它实际上已实现,称为attributeinjector 。您可以使用--use-processor选项启用此层,并且可以使用--list-processors列出其他选项。
元数据转储和方法转储也将是其自己的输出格式,而不是默认为单位,并通过专用选项进行控制。当前,这意味着如果您需要两个转储,则需要多次运行CPP2IL,尽管如果我们同时增加对多种格式的支持,将来可能会发生变化。与处理层一样,可以通过--list-output-formats选项列出输出格式,并可以通过--output-as选项选择。
在引擎盖下,该应用程序几乎已经完全重写。首先,由于CPP2IL学位取决于单声道库,这是必要的,这有一些局限性。当我们研究切换时,我们意识到自己在图书馆的依赖程度。不再是这样 - 该应用程序是围绕libCPP2IL类型和新的分析上下文对象编写的,并且不再使用Mono.Cecil库,已被Asmresolver.dotnet替换。
最重要的是,我们目前正在基于称为ISIL的中间表示(指令集独立的语言)进行重新进化分析,这将使对新指令集的支持更加容易。然后将伊黎伊斯兰国转换为控制流程图,与原始拆卸相比,它可以更智能地分析。
我们还在插件系统上工作,该系统将允许第三方开发人员编写插件,以增加对自定义指令集,二进制格式的支持,并最终加载混淆或加密的元数据或二进制文件。
此应用程序的最简单用法是Windows X86或X64 Unity游戏。在这种情况下,您只需运行Cpp2IL-Win.exe --game-path=C:PathToYourGame ,而cpp2il将检测您的统一版本,找到所需的文件,然后将输出转储到CPP2IL_OUT文件夹中,无论您从任何地方传递命令。
假设您有一个APK文件(不是APKM或XAPK),并且至少运行CPP2IL 2021.4.0,则可以使用与上述相同的参数,但可以传递到APK的路径,并且CPP2IL将从APK中提取所需的文件。
| 选项 | 参数示例 | 描述 |
|---|---|---|
| - 游戏路径 | c: path to game | 指定游戏文件夹的路径。必需的。 |
| - exe-name | 测试游戏 | 如果自动检测失败,则指定游戏的EXE文件的名称(因为游戏目录中还有其他EXE文件) |
| - verbose | <none> | 记录有关我们正在做什么的更多信息 |
| - 列表处理器 | <none> | 列出可用的处理层,然后退出。 |
| - 使用处理器 | attributeInjector | 选择要使用的处理层,该处理层可以在输出之前更改原始数据。此选项可以多次出现。 |
| - 处理器 - 企业 | 键=值 | 为所选的处理层提供配置选项。这些将由添加处理层的插件记录。 |
| - 列表输出格式 | <none> | 列出可用的输出格式,然后退出。 |
| - 输出 - 是 | Dummydll | 指定要使用的输出格式。 |
| - 输出 | cpp2il_out | 根目录到输出。此路径将传递到所选的输出格式,然后可以在此位置内创建子目录等。 |
| - - 弗拉姆工厂 | c: path to webgl.framework.js | 仅与WASM二进制组合使用。其中一些已经混淆了导出,但可以通过框架文件恢复,您可以提供使用此参数的路径。 |
每个提交都使用github操作构建在CI构建中 - 如果您想自己复制构建,则可以在.github文件夹中找到该操作文件。请注意,这些可能不是最稳定的 - 尽管有测试可以确保与一系列游戏的兼容性,但有时事情会破裂!这些是由它们建立的提交版本的版本。
如果您登录到GitHub,则可以从“操作”选项卡下载发行文件,也可以使用以下链接,该链接始终指向最新的成功CI构建。请注意,为.NET框架构建提供了与葡萄酒/质子的兼容性。
最重要的是,每当我认为已经进行了重大改进时,我都会手动发布“ Milestone”发行版。这些不被标记为GitHub上的预释放,并且(至少在理论上)应该稳定且适合在一系列游戏中使用。
从第一个里程碑构建2021.0及以后,CPP2IL现在将更僵化的数据输出到控制台。这包括日志级别(动词,信息,警告,失败)和相关的颜色(灰色的动词,蓝色,info for Info,warn for Warn,Red for Fail)。
从Milestone 2021.1开始,如果CPP2IL能够检测到您正在葡萄酒/质子中运行,则这些ANSI颜色代码将被禁用,因为它们不受葡萄酒的支持并看起来很糟糕。
只有在使用--verbose选项启动CPP2IL时,动词消息才会记录下来,如果您可以报告启用此标志的问题,这将很有帮助。对于正常操作,除非您很好奇,否则不需要它们。
如果您不希望彩色输出,请设置环境变量NO_COLOR=true 。
该应用程序主要是使用.NET 9.0构建的,但是也出于遗产目的发布了.NET Framework 4.7.2构建。
它使用以下库,我非常感谢:
(除了Xunit(Apache 2.0+MIT)之外,全部均获得MIT许可)
WasmDisassembler子目录中找到。Net472构建使用以下其他库:
一些插件还使用其他库:
CPP2IL(在这一点上非常宽松)基于IL2CppDumper,我在2018年分配了它,并删除了大量代码,重写了很多,并添加了更多。但是从本质上讲,它仍然剩下一些笨蛋,主要是在libcpp2il中。
它包含来自djkaty许可的IL2Cppinspector的碎片和碎片,我想在这里向她表示感谢,以寻求她的宝贵帮助。
我要感谢Audica Modding社区和Discord为该项目提供的最初灵感,在早期的大量支持以及这些天的功能请求。
最后,查看其他一些很酷的项目,这些项目与此相关。当然,我进一步提到了IL2Cppintop,但也请查看使用CPP2IL进行虚拟DLL生成的Melonloader。