GameMaker 偏门理论:关于反编译器

最后更新于 2018-01-01 2693 次阅读


大家使用 GameMaker 的时候,可能没有想过自己的游戏会被反编译,等到自己的游戏做大的时候被别人拿到源码吹一波的时候,心里肯定会觉得不爽,当然只是你随手的作品也请不要掉以轻心,你努力过的作品也有自身的价值。

下面我将介绍几款已经出现较多的反编译器(翻不了太冷门的),以及防止反编译的方法。

反编译器

这里分为 Undertale 之前和 Undertale 之后

为什么要这样分?

因为 Undertale 使用的游戏引擎正是 GameMaker 的后续版本 GameMaker:Studio ,自从 Undertale 火起来了以后,越来越多的反编译器出现在 GitHub 和 GitLab(据说 Reddit 也有),并且很多也写明了 for Undertale 或类似的字样(为 Toby Fox 默哀 3 秒)。

Undertale 之前

在 Undertale 之前反编译器还是很少的。

GameMaker 8.x Decompiler

此反编译器只支持 GameMaker 7.0-8.1(更旧的就不知道了)。

只是个单文件,只需要把 EXE 拖到反编译器内即可获取到整个项目,不过遇到加了 UPX 的游戏(具体往下翻),会导致反编译器无法运行(还有听群里的 dalao 说游戏改个图标也可以让反编译器无法运行,不知道是不是真的)。

源码托管于 GitHub(5 年前哦)。

QuickBMS 脚本

此反编译脚本只支持较早期的 GameMaker:Studio 。

这是在 GMC 找到的脚本,并且可以在 QuickBMS 官网找到。

此反编译脚本可以将游戏各类素材包括代码通过 data.win 提取出来,不过提取出来的代码基本上是给 GMAssetCompiler.exe “看的”,一般情况下很难看懂。

目前版本会提示错误导致无法成功反编译。

GameMaker-Studio-Decompiler

此反编译器只支持较早期的 GameMaker:Studio 。

这是比 Undertale 早大概 8 个月的反编译器,这个反编译器只支持导出 PNG 精灵,不介意的话影响不大。

源码托管于 GitHub 。

Undertale 之后

自从 Undertale 火了之后,对该游戏的各种反编译器越来越多。。。。。。

这里只介绍几个看起来还能用的。

Altar.NET

此反编译器支持 GameMaker:Studio 和 GameMaker Studio 2 。

此反编译器可以通过 data.win 提取游戏内的资源文件,不过该反编译器的仓库也指明了主要对 Undertale (mainly for Undertale),其他由 GameMaker:Studio 制作的游戏未知。

这个反编译器出来的代码基本上还是给 GMAssetCompiler “看” 的,不过相比 QuickBMS 脚本,这个比反编译脚本更易读。

源码托管于 GitLab 。

GMdsam

此反编译器支持 GameMaker:Studio(GameMaker Studio 2 未知)。

一样是通过 data.win 提取,不过只能提取对应资源(貌似提不出代码),与 Altar.NET 一样是 for Undertale 。

源码托管于 GitHub 。

同时这个反编译器还有个叫 Gamemaker-Project-Recreator 的项目,可以将 GMdsam 反编译出来的资源重新编译一遍(刚好凑一套了),同样在 GitHub 。

还有一些在 Reddit 的就不翻了,自己去找吧。

注释

GMC:全称 GameMaker Community,官方社区,现已转移到 GMF(GameMaker Forum)。

GMAssetCompiler & GMAssetCompiler.exe:GameMaker Asset Compiler,GameMaker:Studio 和 GameMaker Studio 2 的常规编译器,生成的正是 data.win,打开它的则是 YoYo Runner 。

防反编译

升级版本

虽然很玄,但至少 QuickBMS 废了。

Game Maker Anti-Decompiler

此工具只支持 GameMaker 6.1-8.1 。

这个工具的实现原理其实很简单,用 UPX 套个壳就可以让反编译器无法运行,但是这个工具有概率导致游戏无法运行(同样是改个图标一定概率炸)。

YoYo Compiler(YYC)

从 GameMaker:Studio 开始,这个全新的编译器就出现了,这个编译器可以将游戏通过 C++ 重新编译,并且可以提高游戏运行效率(然而我并不知道能提升多少),最重要的是可以保护资源文件什么的(目前所有反编译器对 YYC 无效)(唯一一个有效的只有 IDA)

比起 GMAssetCompiler 会将游戏素材之类的资源打包到 data.win 给反编译器提供了唯一的突破口,YYC 明显好得多。

这个编译器在 GameMaker Studio 2 也有哦 (被当作招牌宣传)

当然这个编译器也有个缺点,就是:配置太 TM 无语了!!!!!!

由于 GameMaker:Studio 混乱的编译器要求外加 VS 各个版本在 GameMaker:Studio 里各种互不兼容,我已经无话可说了。

比如在 GameMaker:Studio 中一会儿要求 VS2012(Windows 8),一会儿要求 VS2013(Windows)。

我:嗯都没问题,那我的 VS2017 肯定能用。

结果:全都不通过,为了 Windows(YYC) 我特地安装了 VS2013 才通过编译。

不过在 GameMaker Studio 2 的时候使用 VS2017 成功通过了编译,可能是因为默认要求 VS2017 的缘故吧。

至于怎么配置,以后有时间的话我会单独发布一篇文章。

演示就不放出来了,太麻烦了,不过有一个使用了 YYC 编译的软件,就是玩过 Minecraft 都知道的 Mine-imator(就是用 GameMaker:Studio 做的哦)。

最后

当然,没有绝对的防反编译方法,YYC 也不是绝对安全的编译方式,世界上本来就没有绝对的程序保护措施,YYC 也有可能被钻个漏洞就能拿到项目什么的。

理论到此为止,感谢观看。