吉里吉里Z固有的破解对策

吉里吉里2/Z由于其扩张性之高,在试图破解时存在多处入手点。

在此记述吉里吉里固有的对策。

可执行文件替换对策

如果进行校验时,如果可以用不执行任何校验的可执行文件替换并执行,那么就等于没有采取任何措施。
需要确保替换可执行文件后无法正常运行。
补丁和体验版发布等公开的可执行文件的替换行为也要注意。
目标游戏数据、DLL等应该只能在特定的可执行文件中运行。
如果将加密的xp3的处理程序集成到可执行文件中,则其他可执行文件将无法启动。
但是,如果生成了解密的归档文件,则意义将消失,因此最好添加其他独特的功能。
为了使过去被破解的可执行文件无法继续使用,需要持续开发。

禁止自动加载插件

虽然具有自动读入带有tpm扩展名的dll的功能,但如果被自动读入的话,就会出现嵌入式API置换等,所以有必要禁止。
但是,如果采取这种措施,则无法使用嵌入式功能插件进行加密。

禁止自动加载脚本

因为data.xp 3内的startup.tjs等初期被加载的脚本是固定的,如果这些被替换的话,嵌入API替换等就会发生,所以有必要禁止。
将初期读入脚本的场所固定为1处,进行脚本的窜改检测,加密xp3,读入时每次都进行解密,在某种程度上可以回避特定脚本以外的替换。
通过将TVP_START_UP_SCRIPT_NAME设置为任意字符串并进行编译,实现初期执行任意脚本,或禁用-startup选项执行任意脚本。
还可以指定TVPSystemSecurityOptions强制从data.xp3读取。

插件替换对策

通过重命名原来的插件并放置同名的插件,可以读取任意的插件,可以劫持该插件公开的API,或者替换嵌入式API。
如果替换krmovie.dll等进行文件读入的dll的话,可以简单地取得被传递到那个dll的数据(1.3以后krmovie.dll被编入主体,关于krmovie.dll这个问题就消失了)。
krmovie.dll则可截取动画文件,KAGParser.dll则可截取KAG脚本。
为了避免这种情况,有必要检测dll的篡改。
查看读入dll的散列,检查电子签名。
但是,如果检查耗时长的话,会对运行产生影响,因此需要能够进行高速的检查。
如果将插件编入本体,使插件本身无法使用的话,就不用担心这一点了。
Extension功能提供了附加功能,但在没有更改插件源代码的情况下,目前无法执行此操作。
目标是在不更改源代码的情况下,通过更改构建方法创建静态库,并将其与主体链接,使其能够嵌入到主体中。

使用热键禁用控制器、脚本编辑器、监控和控制台

吉里吉里Z中“控制器、脚本编辑器、表达式监视器”被删除,控制台成为命令行。
已删除的功能 这些功能的禁用。
在吉里吉里Z中,由于通过插件可以得到控制台输出,所以也可以抑制它。
如果将控制台输出本身禁用,估计会稍微加快速度。
如果在不使用TVP_LOG_TO_COMMANDLINE_CONSOLE的情况下进行构建,则命令行不显示日志(公开二进制文件显示为ON)。
如果要禁用控制台输出,请注意,某些类型的插件会将OSS许可证输出到日志中,因此在使用此类插件时,必须附加单独的描述许可证的文本。

字节编码化

TJS2脚本以原样的状态被收纳的话,容易解析,因此将脚本字节编码化。
字节编码可通过Scripts.compileStorage实现。
即使归档文件被加密了,也有被破解的时候,但使脚本的解析变得困难的意义是有的。
字节码的读取速度也比脚本快(因为脚本是预先编译的)。

字节码混淆处理

为了使字节码的解析变得困难,进行混淆。
难读化主要是通过置换可读字符串,使处理的类推变得困难。
如果同时进行编入函数的难读化,则会更加强大。

归档加密

xp3归档可以通过将加密dll传递给Releaser来加密。
解密通过读取tpm插件来进行。



此文档的许可证