想把 Clickteam Fusion 老游戏的素材"拆"出来?3 步跑通 CTFAK 2.0 逆向工程
【免费下载链接】CTFAK2.0Updated version of the Clickteam Fusion Army Knife Decompiler项目地址: https://gitcode.com/gh_mirrors/ct/CTFAK2.0
你有没有遇到过这种情况:玩到一款用 Clickteam Fusion 2.5 做的独立游戏,特别喜欢它的美术和音效,想提取出来学习或者做 MOD,结果发现资源全部"焊死"在可执行文件里,连个图片都捞不出来。市面上针对 Fusion 引擎的逆向工具寥寥无几,而且大多年久失修。今天要介绍的 CTFAK 2.0(Clickteam Fusion Army Knife 2.0)就是专门解决这个问题的开源工具,由 Kostya 开发、Yunivers 协助维护。读完这篇文章,你会知道它到底能干什么、怎么在 10 分钟内跑通第一次资源提取,以及踩坑时该往哪儿看。
先把话说清楚:它是做什么的
CTFAK 2.0 是一个针对 Clickteam Fusion 2.5 引擎游戏的反编译与资源提取工具。它能把引擎打包在 exe、apk、ccn、dat、bin 甚至 mfa 项目文件里的图片、声音、音乐、字体、事件逻辑等数据完整读出来,再通过插件系统转成你想要的形态。它最打动人的一点是:你不需要任何逆向基础,把文件拖进命令行,按几次回车就能拿到结果。
10 分钟跑通第一次提取:跟着走一遍
先说环境。CTFAK 2.0 基于 .NET 6.0 构建,官方建议直接下载预编译版本而不是自己编译(README 里甚至明确写了"Compiling CTFAK is not recommended")。安装三个运行时(Runtime、Core Runtime、Desktop Runtime)后,把压缩包解压到空文件夹,记得把ctfakrequirements.zip里的内容也解压到同一目录——验证标准是template.mfa和CTFAK.Cli.exe在同一层,这个文件是后面导出 MFA 项目时必需的模板。
准备好一个 Fusion 2.5 游戏的 exe 文件,然后:
- 运行
CTFAK.Cli.exe,把游戏文件拖进窗口,回车; - 看到 "Parameters:" 提示时直接回车(默认参数够用);
- 等它读完,你会看到一行
Reading finished in _ seconds,接着列出游戏名、作者、帧数和 Fusion 构建版本; - 按提示选择一个插件,比如 Image Dumper,回车执行;
- 打开同目录下的
Dumps文件夹,里面就是按游戏名命名的输出目录。
整个流程在Interface/CTFAK.Cli/Program.cs里写得非常直白:程序按扩展名自动选解析器(exe 走ExeFileReader,apk 会先解包出application.ccn再走CCNFileReader,mfa 走MFAFileReader),读完后从Plugins文件夹加载所有 DLL 插件列给你选。这就是全部交互。
背后的两个核心机制:Chunk 与插件
第一次用可能会觉得"这也太简单了",但简单背后是两个值得理解的设计。
第一,Fusion 文件本质上是一串 Chunk(数据块)的堆叠。你可以把游戏文件想象成一盒乐高:每个 Chunk 是一块积木,上面贴着标签(类型 ID),里面装着图片、声音、事件这类具体数据。CTFAK 的CCN模块就是按这些标签逐块拆解积木的流水线。拆解时还会根据游戏版本选择不同的"拆法"——注意Core/CTFAK.Core/CCN/Chunks/Banks/ImageBank/ImageBank.cs里那个CreateImage()方法:它会根据运行环境(Android、Fusion 2.5+、Fusion 3、老版本 MMF)new 出不同类型的图片解析器。也就是说,同一个工具在不同平台上解析图片的代码路径是分叉的,这也是它敢自称"Army Knife(瑞士军刀)"的原因。
第二,所有输出功能都是插件。核心读取逻辑和输出逻辑被严格分离,插件只需实现一个极简接口:
public interface IFusionTool { string Name { get; } void Execute(IFileReader reader); }只有三个成员:名字、进度、执行方法。你写个类实现它,编译成 DLL 丢进Plugins文件夹,下次启动 CTFAK 就会自动发现它——Program.cs里就是扫描Plugins目录下所有 DLL、用反射加载的。这带来的实际好处是:想要新输出格式,不用动核心代码,改一行插件就行。
实战:一个完整任务能产出什么
假设你拿到一个老 Fusion 游戏,想把它拆成"能重新编辑"的状态。最合适的路径是选Export as MFA插件(源码在Plugins/CTFAK.Decompiler/FTDecompile.cs)。它会读取游戏里的图片、声音、字体、音乐,填入template.mfa模板,最后生成一个可在 Fusion 编辑器里直接打开的项目文件——相当于把"已编译的成品"还原回"工程源码"。注意看它的实现:mfa.Name = game.name、遍历game.Sounds.Items填音频、mfa.Images.Items = imgs填图片,全程靠GameData这个统一的数据模型(定义在Core/CTFAK.Core/CCN/GameData.cs),所以无论输入是 exe 还是 apk,导出的 MFA 结构都是一致的。
如果只是想快速拿素材,选Dump Everything(Plugins/Dumper/SimpleDumper.cs)更省事,它会一次性把所有图片、声音、打包数据倒出来。注意它的图片导出是多线程并行的——new Task(() => bmp.Save(...))每个图片一个任务——所以大游戏也能跑得挺快。
过来人踩坑清单
这些坑我基本都踩过,提前给你打个预防针:
| 现象 | 原因 | 解决思路 |
|---|---|---|
| 启动报错找不到 zlibwapi.dll | 少了原生依赖 | 确认x64目录下的 CTFAK-Native.dll 和 zlib 库完整 |
| 拖入 ccn/dat/bin 文件后弹出选择器 | 这些格式需要手动指定解析器 | 直接输入1选 CCN,官方也是这么建议的 |
| 导出图片缺透明通道或颜色发灰 | 没加参数,或引擎版本特殊 | 试-notrans关掉 Alpha/着色器处理,或用-f1.5、-f3强制指定版本 |
| 想跳过不关心的数据但读取太慢 | 默认读全量 | 用-onlyimages只读图片,或-noevnt跳过事件 |
| 想把输出路径当参数传 | 交互模式不支持 | 用命令行参数-path指定文件、-forcetype指定类型、-tool直接跑某个插件 |
另外提一句:trace_chunks参数会把所有 Chunk 写到CHUNK_TRACE,dumpnewchunks会把解析器不认识的新 Chunk 写到UnkChunks文件夹(需要自己先建这个目录)。遇到新版本引擎游戏读不全时,这两个参数是你排查的第一站。
想更进一步?给你三条路
第一,写自己的插件。实现IFusionTool,Execute里拿reader.getGameData(),里面有Images、Sounds、Frames、globalStrings等一堆现成数据。想做图片自动分类、音频转码、导出成别的引擎格式,都从这几十行开始。
第二,研究 MFA 往返转换。README 的 To-Do 里写着 MFA2Pame 完成度 80%——把 MFA 转回 exe 同构格式以便统一 dump。这块是社区最活跃的方向之一,代码在Core/CTFAK.Core/MFA/下,适合想深入理解文件格式的人啃。
第三,关注兼容性边界。目前对 Fusion 2.5 的支持最成熟,MMF 2.0 只有 10%、Fusion 3 只有 45%,Klik & Play 和 TGF 系列还是空白。给这些旧引擎补解析器,是实打实能上贡献榜的活。
最后说两句
CTFAK 2.0 的价值不在于界面多华丽(它连 GUI 都没有),而在于它把"拆 Fusion 游戏"这件事的复杂度藏了起来:你拖一个文件进去,回车,素材就出来了;你想定制输出,写个插件就行。相比同类工具要么只支持单一格式、要么早已停更,它的插件架构和持续维护让它成了这个细分领域事实上的首选。
如果你手里正好有个 Fusion 游戏想拆,现在就下载跑一遍试试;跑通了,记得去给项目点个 star;如果遇到官方插件解决不了的问题,带着报错信息去提 issue——顺手提 PR 改进一个解析器,可能就是社区下一个里程碑的一部分。
行动号召就一句话:花 10 分钟跑通第一次提取,你会立刻理解它为什么叫"军刀"。
【免费下载链接】CTFAK2.0Updated version of the Clickteam Fusion Army Knife Decompiler项目地址: https://gitcode.com/gh_mirrors/ct/CTFAK2.0
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考