“Virtools Script Deobfuscation/zh”的版本间的差异

来自Ballance Wiki
跳转至: 导航搜索
你知道吗?
2个标签移动版编辑移动网页编辑
(增加内容)
第11行: 第11行:
 
}}
 
}}
  
'''Virtools Script Deobfuscation''' ('''Virtools反混淆插件''') 是由[[chirs241097]]和[[2jjy]]主要负责开发的一款[[Virtools/zh|Virtools]]插件。
+
'''Virtools Script Deobfuscation''' ('''Virtools反混淆插件''') 是由[[chirs241097]]和[[2jjy]]主要负责开发的一款[[Virtools/zh|Virtools]]插件。可以将在Virtools中显示为<code>--Script Hidden--</code>的脚本变回可查看和编辑的形式。
  
 
== 介绍 ==
 
== 介绍 ==
第19行: 第19行:
 
但是时至今日,Ballance这一步操作反而阻挡了将其发扬光大的操作,因为无法探知游戏内部机制,因而制作各类补丁和新功能变得更加困难。
 
但是时至今日,Ballance这一步操作反而阻挡了将其发扬光大的操作,因为无法探知游戏内部机制,因而制作各类补丁和新功能变得更加困难。
  
chirs241094和2jjy使用了{{zh|Virtools SDK}} 3.5来完成Virtools Script Deobfuscation,通过底层的逆向工程还原了Virtools存储脚本图结构信息的内部模式。
+
chirs241094和2jjy使用了{{zh|Virtools SDK}} 3.5来完成Virtools Script Deobfuscation,通过底层的逆向工程还原了Virtools存储脚本图结构信息的内部模式。由于使用的生成数据插入部分属于硬编码且可能只适用于Virtools 3.5版本,因此在其他版本的Virtools上不能保证工作正常<ref>[[yyc12345]]已在Virtools 5.0版本上测试,不能运行,会出现断言失败</ref>。
  
由于Script Hidden只删除了编辑界面上的图结构信息,并没有删除诸如Building Blocks之间链接线等逻辑信息,因此chirs241094和2jjy通过算法生成了这些缺失的信息,虽然和原脚本相比排布会更加混乱一些(无法完全精确恢复排布位置),但让它们能被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的编辑器所接受,并且基本上可以让人理解。
 +
 
 +
Virtools Script Deobfuscation在Virtools中增加了以下两个Building Block,可以在Custom类别中找到:
 +
 
 +
* BBDecoder: 一个Object Load的修改版本,它将试图展示所有--Script Hidden--的编辑界面
 +
* FreeBlock:此模块除了帮助反向工程进行以外不能做任何事情。您可以根据需要给它增添任意多个bIO与pIOT
  
 
== 下载和使用 ==
 
== 下载和使用 ==
第27行: 第32行:
 
前往[https://github.com/BearKidsTeam/VirtoolsScriptDeobfuscation Github仓库]自行编译使用。编译教程已写在工程中。
 
前往[https://github.com/BearKidsTeam/VirtoolsScriptDeobfuscation Github仓库]自行编译使用。编译教程已写在工程中。
  
使用方法并未写出。<ref>使用方法正在项目中等待被合并到主线</ref>
+
使用方法已写在工程的<code>README</code>文档中。
  
 
== 另请参见 ==
 
== 另请参见 ==
  
 
* 已经完全解析好的游戏内核文件已经释出,参见:[https://github.com/BearKidsTeam/BallanceModding Github仓库]
 
* 已经完全解析好的游戏内核文件已经释出,参见:[https://github.com/BearKidsTeam/BallanceModding Github仓库]
* chirs241097的另一逆向工具:[[Script-Materializer/zh|Script-Materializer]]
+
* chirs241097的另一逆向工具:[[Script-Materializer/zh|Script-Materializer]],用于将脚本转化成JSON文本格式
  
 
== 你知道吗 ==
 
== 你知道吗 ==
  
 
* 2jjy通过分析解析出来的游戏内核文件发现了当时仍然未被发现的[[gravity彩蛋]]。
 
* 2jjy通过分析解析出来的游戏内核文件发现了当时仍然未被发现的[[gravity彩蛋]]。
 +
* 此插件用于了[[Ballance Mod Loader Gamepiaynmo版]]的解析并因此揭示如何构建一个原生BML Mod,开启了使用BML制作Mod的大门。
 
* 解析脚本后发现了“调试模式”与“上帝模式”,开启后按下数字键1,2以及F1等均会产生不同的效果。
 
* 解析脚本后发现了“调试模式”与“上帝模式”,开启后按下数字键1,2以及F1等均会产生不同的效果。
 
** 巧合的是,先前Gamepiaynmo也曾研制过效果相似的“[[调试模式]]” (Debug Mode) 插件。
 
** 巧合的是,先前Gamepiaynmo也曾研制过效果相似的“[[调试模式]]” (Debug Mode) 插件。

2020年4月10日 (五) 18:06的版本

Virtools Script Deobfuscation
Virtools Script Deobfuscation.png
一张使用Virtools Script Deobfuscation进行还原脚本后的Ballance游戏核心文件的截图
基本信息
作者 chirs241097, 2jjy
依赖 Virtools SDK 3.5用作编译库
至少Visual Studio 2017且附带了C++编译环境用于编译插件
发布时间 2018年2月27日
项目地址 发布帖
Github仓库
开发状态 开发停滞

Virtools Script Deobfuscation (Virtools反混淆插件) 是由chirs2410972jjy主要负责开发的一款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上不能保证工作正常[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文档中。

另请参见

  • 已经完全解析好的游戏内核文件已经释出,参见:Github仓库
  • chirs241097的另一逆向工具:Script-Materializer,用于将脚本转化成JSON文本格式

你知道吗

  • 2jjy通过分析解析出来的游戏内核文件发现了当时仍然未被发现的gravity彩蛋
  • 此插件用于了Ballance Mod Loader Gamepiaynmo版的解析并因此揭示如何构建一个原生BML Mod,开启了使用BML制作Mod的大门。
  • 解析脚本后发现了“调试模式”与“上帝模式”,开启后按下数字键1,2以及F1等均会产生不同的效果。
    • 巧合的是,先前Gamepiaynmo也曾研制过效果相似的“调试模式” (Debug Mode) 插件。

引用

  1. yyc12345已在Virtools 5.0版本上测试,不能运行,会出现断言失败