【Gamemaker】YYC1.4编译的程序研究

前言:

关于GM2023和汉化的部分,详见知乎:【Gamemaker】GMS 1.4 和 GM 2023 YYC 编译和汉化的程序研究 - 知乎 (zhihu.com)

涉及过Gamemaker游戏反编译领域的可能都知道,所有使用Gamemaker Studio 1.4(简称GMS1.4)编译的程序在游戏根目录里都会有一个“data.win”文件。而这个文件里包含了游戏的代码,音效,精灵,着色器...等等等等。因此使用GMS1.4编译的游戏被破解的风险很大,GMS1.4的官方为了防止这个情况特地制作了一个编译选项,叫”YYC“,大概意思是将所有的代码都交给了VS和Windows SDK去编译,在消除了data.win文件的同时也大大提高了游戏被反编译的难度。所有的资源文件全部都被嵌入了一个小小的exe文件里,因此,我特此写出了·这篇文章去详细讲解EXE的文件结构

正文:

实际上,GMS1.4所创建的EXE分成了及其明显的三个部分,我将会用字节码的形式去讲述这些部分

解释器部分——从最开头到FORM(46 4F 52 4D)

这部分写出了Gamemaker的解释器,这个解释器能告诉EXE如何去读取Gamemaker所编译出来的数据,因为YYC严格上说并不是一个真正的C程序编译器,GMS的数据结构仍需要解释器去解释。然而,因为C语言的NB,我们无法反编译出解释器的具体内容

数据包部分——FORM(46 4F 52 4D)到AUDO(41 55 44 4F)

如果该部分未被加密,那么FROM后再四个字节应该是GEN8(47 45 4E 38),如果你检查FROM后有这四个字母,那么恭喜你,这个EXE的数据包文件没有被加密。你可以提取出这个exe的数据包,那么这个数据包能做到什么呢?你已经可以从中提取出音效,精灵,着色器了,如果你不需要更改代码,那么看到这里已经足够了。你可以使用UndertaleModTool这个工具的打开这部分数据包,在打开之前,你只需要将这部分字节复制,然后放到一个新的data.win文件中或是使用脚本"ExtractEmbeddedDataFile"。进行完这个操作后你就可以从里面读取除代码外的所有东西了!

代码部分——AUDO(41 55 44 4F)到最后

这部分是真正的难点,YYC编译使代码完全变了个样子,只要你改动一个字节,这个程序就会立马崩溃。那么我们应该怎么办?别急,实际上我们还是能修改一个东西——字符串

字符串并没有被放置在数据文件里,而是被编译到了字节SetEndOfFile(53 65 74 45 6E 64 4F 66 46 69 6C 65)的后面,这是个很有意思的地方,那就是字符串是被编译到数据包前面的,所以你不用往后找。在更改时我们需要遵守两条原则

1.更改时切勿修改了文件的大小,比如CeyaseOver这个字符串,如果要更改那么就得写成CeyaseEnda,你需要凑字。

2.如果你真的想要缩短文字的长度怎么办?不用担心,我们可以使用空子节(00)来占位,这可以缩短文字的长度,但是,我们不能增加字符串的长度,这个操作是致命的

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值