“Virtools Script Deobfuscation/zh”的版本间的差异
(增加内容) |
小 |
||
(未显示2个用户的2个中间版本) | |||
第1行: | 第1行: | ||
{{Appbox/zh | {{Appbox/zh | ||
− | |name=Virtools Script Deobfuscation | + | |name=Virtools Script Deobfuscation {{HLine|0|0}} {{Resize|Virtools反混淆插件}} |
|screenshot=Virtools Script Deobfuscation.png | |screenshot=Virtools Script Deobfuscation.png | ||
|screenshotDesc=一张使用Virtools Script Deobfuscation进行还原脚本后的Ballance游戏核心文件的截图 | |screenshotDesc=一张使用Virtools Script Deobfuscation进行还原脚本后的Ballance游戏核心文件的截图 | ||
第6行: | 第6行: | ||
|suit= | |suit= | ||
|link=[https://tieba.baidu.com/p/5568364314 发布帖]<br />[https://github.com/BearKidsTeam/VirtoolsScriptDeobfuscation Github仓库] | |link=[https://tieba.baidu.com/p/5568364314 发布帖]<br />[https://github.com/BearKidsTeam/VirtoolsScriptDeobfuscation Github仓库] | ||
− | |dependency=[[Virtools SDK/zh|Virtools SDK]] 3.5用作编译库<br />至少Visual Studio 2017且附带了C++编译环境用于编译插件 | + | |dependency=[[Virtools SDK/zh|Virtools SDK]] 3.5或2.5用作编译库<br />至少Visual Studio 2017且附带了C++编译环境用于编译插件 |
|status=pause | |status=pause | ||
|date=2018年2月27日 | |date=2018年2月27日 | ||
第19行: | 第19行: | ||
但是时至今日,Ballance这一步操作反而阻挡了将其发扬光大的操作,因为无法探知游戏内部机制,因而制作各类补丁和新功能变得更加困难。 | 但是时至今日,Ballance这一步操作反而阻挡了将其发扬光大的操作,因为无法探知游戏内部机制,因而制作各类补丁和新功能变得更加困难。 | ||
− | chirs241094和2jjy使用了{{zh|Virtools SDK}} 3.5来完成Virtools Script Deobfuscation,通过底层的逆向工程还原了Virtools存储脚本图结构信息的内部模式。由于使用的生成数据插入部分属于硬编码且可能只适用于Virtools 3. | + | chirs241094和2jjy使用了{{zh|Virtools SDK}} 3.5来完成Virtools Script Deobfuscation,通过底层的逆向工程还原了Virtools存储脚本图结构信息的内部模式。由于使用的生成数据插入部分属于硬编码且可能只适用于Virtools 3.5版本,因此在其他版本的Virtools上不能保证工作正常。且由于程序代码中断言的设置,不能解析含有不可展开的Behavior Graph<ref>也就是所谓的加密的,但是Virtools中的脚本不存在加密一说,是可以反向推演的</ref>的脚本。 |
当保存Virtools文件时启用了<code>hide script representation in schematic view</code>(隐藏脚本)选项时,Virtools会丢弃脚本中行为模块的位置和尺寸数据,只保存脚本逻辑。显而易见,这些被丢弃的数据对于让Virtools正确展示脚本原理图非常重要。启用隐藏脚本选项,将有效地保护脚本被轻易地复制。然而这种保护有些类似于Java的字节码混淆——可以通过一些手段将脚本恢复成人类可读的形态。这也是本工程Virtools Script Deobfuscation名字的由来。chirs241094和2jjy通过算法生成了这些被Virtools在保存时抛弃了的信息,并通过观测Virtools保存行为推测了行为模块的可视化坐标数据偏移(这部分在Virtools SDK中没有显式接口提供调用),然后将生成好的结构数据写入。虽然和原脚本相比排布会更加混乱一些(无法完全精确恢复排布位置),但让它们能被Virtools Dev的编辑器所接受,并且基本上可以让人理解。 | 当保存Virtools文件时启用了<code>hide script representation in schematic view</code>(隐藏脚本)选项时,Virtools会丢弃脚本中行为模块的位置和尺寸数据,只保存脚本逻辑。显而易见,这些被丢弃的数据对于让Virtools正确展示脚本原理图非常重要。启用隐藏脚本选项,将有效地保护脚本被轻易地复制。然而这种保护有些类似于Java的字节码混淆——可以通过一些手段将脚本恢复成人类可读的形态。这也是本工程Virtools Script Deobfuscation名字的由来。chirs241094和2jjy通过算法生成了这些被Virtools在保存时抛弃了的信息,并通过观测Virtools保存行为推测了行为模块的可视化坐标数据偏移(这部分在Virtools SDK中没有显式接口提供调用),然后将生成好的结构数据写入。虽然和原脚本相比排布会更加混乱一些(无法完全精确恢复排布位置),但让它们能被Virtools Dev的编辑器所接受,并且基本上可以让人理解。 | ||
第25行: | 第25行: | ||
Virtools Script Deobfuscation在Virtools中增加了以下两个Building Block,可以在Custom类别中找到: | Virtools Script Deobfuscation在Virtools中增加了以下两个Building Block,可以在Custom类别中找到: | ||
− | * BBDecoder: 一个Object Load的修改版本,它将试图展示所有--Script Hidden-- | + | * BBDecoder: 一个Object Load的修改版本,它将试图展示所有--Script Hidden--的编辑界面。 |
− | * | + | * FreeBlock:此模块除了帮助反向工程进行以外不能做任何事情。您可以根据需要给它增添任意多个bIO与pIOT。 |
== 下载和使用 == | == 下载和使用 == | ||
第33行: | 第33行: | ||
使用方法已写在工程的<code>README</code>文档中。 | 使用方法已写在工程的<code>README</code>文档中。 | ||
+ | |||
+ | == Virtools版本可用性 == | ||
+ | |||
+ | [[yyc12345]]已在Virtools 5.0版本上测试,不能运行,会出现断言失败。 | ||
+ | |||
+ | 在经过另一测试后,在附带有{{zh|virtools-shimmer}}的Virtools 2.5上运行成功,可以正常工作(据此推测Virtools 2.5和3.5对于Building Block的存储结构至少在本程序所用范围内一致。)virtools-shimmer只是提供了Ballance的Building Block的环境,使得最后产生的文件不报错,与运行成功与否误关。并且在使用加装有virtools-shimmer的Virtools 2.5作为基础进行脚本解析后,保存解析后的文件再打开也不会出现类似Virtools 3.5上的找不到Dll报错(实指找不到对应的Parameter参数定义,这些参数被定义在Ballance的BuildingBlocks Dll中)了。此前,即使使用加装有virtools-shimmer的Virtools 2.5打开之前在Virtools 3.5中解析出来文件,也会出现一些找不到Dll报错,推测是解析的时候就抛弃了这些当时查找无源数据,导致之后即使可以找到但仍然无法读取。此外在装有virtools-shimmer的Virtools 2.5上进行脚本解析所用时间较Virtools 3.5大幅增长(约4-5倍所用时间),原因未知。 | ||
== 另请参见 == | == 另请参见 == | ||
第42行: | 第48行: | ||
* 2jjy通过分析解析出来的游戏内核文件发现了当时仍然未被发现的[[gravity彩蛋]]。 | * 2jjy通过分析解析出来的游戏内核文件发现了当时仍然未被发现的[[gravity彩蛋]]。 | ||
− | * 此插件用于了[[Ballance Mod Loader Gamepiaynmo版]] | + | * 此插件用于了[[Ballance Mod Loader Gamepiaynmo版]]的解析后揭示了如何构建一个原生BML Mod,开启了使用BML制作Mod的大门。 |
* 解析脚本后发现了“调试模式”与“上帝模式”,开启后按下数字键1,2以及F1等均会产生不同的效果。 | * 解析脚本后发现了“调试模式”与“上帝模式”,开启后按下数字键1,2以及F1等均会产生不同的效果。 | ||
** 巧合的是,先前Gamepiaynmo也曾研制过效果相似的“[[调试模式]]” (Debug Mode) 插件。 | ** 巧合的是,先前Gamepiaynmo也曾研制过效果相似的“[[调试模式]]” (Debug Mode) 插件。 | ||
− | == | + | == 备注 == |
<references /> | <references /> | ||
[[Category:工具箱]] | [[Category:工具箱]] |
2021年2月15日 (一) 22:02的最新版本
Virtools Script Deobfuscation Virtools反混淆插件 | |
---|---|
一张使用Virtools Script Deobfuscation进行还原脚本后的Ballance游戏核心文件的截图 | |
基本信息 | |
作者 | chirs241097, 2jjy |
依赖 |
Virtools SDK 3.5或2.5用作编译库 至少Visual Studio 2017且附带了C++编译环境用于编译插件 |
发布时间 | 2018年2月27日 |
项目地址 |
发布帖 Github仓库 |
开发状态 | 开发停滞 |
Virtools Script Deobfuscation (Virtools反混淆插件) 是由chirs241097和2jjy主要负责开发的一款Virtools插件。可以将在Virtools中显示为--Script Hidden--
的脚本变回可查看和编辑的形式。
介绍
众所周知,Virtools的CMO文件,又或者NMO文件中可以嵌入脚本,使得可以通过一些事件的触发来产生另一些事件,同时也可用于编辑游戏本体的逻辑,Ballance的游戏逻辑就是这样被编码在其中的。而Virtools提供了一个特性,开发者可以通过勾选一个选项来使得发布后的脚本结构被隐藏,显示为Script Hidden从而避免一些用户自行修改脚本而篡改游戏。
但是时至今日,Ballance这一步操作反而阻挡了将其发扬光大的操作,因为无法探知游戏内部机制,因而制作各类补丁和新功能变得更加困难。
chirs241094和2jjy使用了Virtools SDK 3.5来完成Virtools Script Deobfuscation,通过底层的逆向工程还原了Virtools存储脚本图结构信息的内部模式。由于使用的生成数据插入部分属于硬编码且可能只适用于Virtools 3.5版本,因此在其他版本的Virtools上不能保证工作正常。且由于程序代码中断言的设置,不能解析含有不可展开的Behavior Graph[1]的脚本。
当保存Virtools文件时启用了hide script representation in schematic view
(隐藏脚本)选项时,Virtools会丢弃脚本中行为模块的位置和尺寸数据,只保存脚本逻辑。显而易见,这些被丢弃的数据对于让Virtools正确展示脚本原理图非常重要。启用隐藏脚本选项,将有效地保护脚本被轻易地复制。然而这种保护有些类似于Java的字节码混淆——可以通过一些手段将脚本恢复成人类可读的形态。这也是本工程Virtools Script Deobfuscation名字的由来。chirs241094和2jjy通过算法生成了这些被Virtools在保存时抛弃了的信息,并通过观测Virtools保存行为推测了行为模块的可视化坐标数据偏移(这部分在Virtools SDK中没有显式接口提供调用),然后将生成好的结构数据写入。虽然和原脚本相比排布会更加混乱一些(无法完全精确恢复排布位置),但让它们能被Virtools Dev的编辑器所接受,并且基本上可以让人理解。
Virtools Script Deobfuscation在Virtools中增加了以下两个Building Block,可以在Custom类别中找到:
- BBDecoder: 一个Object Load的修改版本,它将试图展示所有--Script Hidden--的编辑界面。
- FreeBlock:此模块除了帮助反向工程进行以外不能做任何事情。您可以根据需要给它增添任意多个bIO与pIOT。
下载和使用
前往Github仓库自行编译使用。编译教程已写在工程中。
使用方法已写在工程的README
文档中。
Virtools版本可用性
yyc12345已在Virtools 5.0版本上测试,不能运行,会出现断言失败。
在经过另一测试后,在附带有virtools-shimmer的Virtools 2.5上运行成功,可以正常工作(据此推测Virtools 2.5和3.5对于Building Block的存储结构至少在本程序所用范围内一致。)virtools-shimmer只是提供了Ballance的Building Block的环境,使得最后产生的文件不报错,与运行成功与否误关。并且在使用加装有virtools-shimmer的Virtools 2.5作为基础进行脚本解析后,保存解析后的文件再打开也不会出现类似Virtools 3.5上的找不到Dll报错(实指找不到对应的Parameter参数定义,这些参数被定义在Ballance的BuildingBlocks Dll中)了。此前,即使使用加装有virtools-shimmer的Virtools 2.5打开之前在Virtools 3.5中解析出来文件,也会出现一些找不到Dll报错,推测是解析的时候就抛弃了这些当时查找无源数据,导致之后即使可以找到但仍然无法读取。此外在装有virtools-shimmer的Virtools 2.5上进行脚本解析所用时间较Virtools 3.5大幅增长(约4-5倍所用时间),原因未知。
另请参见
- 已经完全解析好的游戏内核文件已经释出,参见:Github仓库
- chirs241097的另一逆向工具:Script-Materializer,用于将脚本转化成JSON文本格式
你知道吗
- 2jjy通过分析解析出来的游戏内核文件发现了当时仍然未被发现的gravity彩蛋。
- 此插件用于了Ballance Mod Loader Gamepiaynmo版的解析后揭示了如何构建一个原生BML Mod,开启了使用BML制作Mod的大门。
- 解析脚本后发现了“调试模式”与“上帝模式”,开启后按下数字键1,2以及F1等均会产生不同的效果。
- 巧合的是,先前Gamepiaynmo也曾研制过效果相似的“调试模式” (Debug Mode) 插件。
备注
- ↑ 也就是所谓的加密的,但是Virtools中的脚本不存在加密一说,是可以反向推演的