让一个十年前的矢量编辑器复活

2020-05-02 18:02:04

Pmicroma等离子体是Pmicroma公司下属的Wolfram von Funck编写的矢量图像编辑器。它的一些使用视频可以在Pmicroma的YouTube频道上找到。

Pmicroma/Wollay也是游戏魔方世界的作者,因此,游戏的GUI是使用等离子图形构建的。我在2016年开始对这些等离子图形文件感兴趣,因为我开始进入逆向工程和编程,而且我刚刚完成了另一种更简单的、无文档记录的图像文件格式的转换器。在此之前,还没有其他人设法对魔方世界的图像文件进行任何有用的修改。

几年过去了,在我朋友Andoryuuta的帮助下,我创建了PLXML,这是一个可以将等离子图形文件(称为.PLX、.PLD或.PLG)与XML文件格式相互转换的工具。然而,由于这些都是矢量图形,所以为它们创建编辑器比较困难,而且除了等离子本身之外,没有基于GUI的编辑器。

血浆是Pmicroma的第一个产品(在他们看来,很可能是他们的主要产品),但只有一次发布,那是在2011年。它使用的身份验证服务器最终宕机了,所以当它停止工作时,大多数人只是摆脱了软件,继续前进。直到2020年4月20日,2011年的安装器才重新浮出水面,我们可以开始工作,让这个古老的艺术工具再次发挥作用。

那么,我们从哪里开始呢?启动等离子体时,它希望使用HTTP联系pmicroma.de上的身份验证服务器,如果您尝试登录或激活该产品,它将无法工作:

好吧。最明显的下一步是找到负责激活等离子体的代码,只需修补一些代码,使其始终处于激活状态,无论身份验证服务器做什么。

二进制文件中有几个位置引用了几个数据成员,以便确定程序是否已被激活。但是,任何修补这些跳转或向这些数据成员写入肯定值的尝试都将导致程序崩溃。通常,这是在DesignSheet的父类Sheet对象(请注意,RTTI在此二进制文件中,因此可以恢复一些类名)的构造中进行的,但是修补只会造成更多的异常。这是不可能的..。

整个函数专用于错误处理。我用Flask设置了我自己的服务器来处理它对各种输入的响应方式,但是除了更改它显示的错误消息之外,我不能让任何有趣的事情发生。它可以尝试访问以下任何路径:

它似乎还可以联系/下载/等离子/release ase.xml以获取更新,但这对我来说还没有价值。

在这一点上,我不知道该怎么处理它,但我认为它在某种程度上代表了机器和系列。

啊,所以如果在处理响应时引发PLALENT::IOException,就会调用错误处理函数。

我开始在周围放置断点,看看哪个函数引发了异常,我发现它发生在一个相当特殊的函数中……。

我认识逆向工程Cube World中的这段代码来创建PLXML。这是解析等离子图形文件的代码。由于某些原因,等离子体似乎希望从认证服务器发回一个等离子体图形文件。因为它无法解析我的响应,所以它正在触发错误处理代码。

该函数(同时调用解析器和错误处理程序)使用传递给它的std::Vector*接收数据:

但是,检查矢量中包含的数据会发现毫无意义,即使我的服务器为其提供了有效的PLX文件。进入此函数的向量大小与我的服务器发送的数据大小相同,但数据不是我发送的数据。在小缓冲区的更多实验中,它似乎通过对字节执行加法/减法并以某种方式交换它们来进行(去)混淆,所以它看起来不是一个特别强的混淆算法。(#39;{#**$$}{##**$$}。

目前,我决定在执行时只用未接触的数据覆盖内存中的向量。这有效地绕过了正在发生的任何模糊算法。植入这个有效的PLX数据后,我在尝试进行身份验证时不再收到错误消息,但它反而导致了异常。这最终是由于我构造的PLX文件中缺少元素,并导致空指针取消引用。很多这样的问题都是由寻找物体引起的。

我解决了这些异常,直到我使用PLXML构建了一个PLX文件,它具有足够的最低要求来加载Cube World的PLX文件之一。

这并不美观,但这可能是近十年来第一次有人能够使用血浆。似乎Wollay从等离子体中删除了一个关键的UI文件(用于存放艺术品的工作表),并将其设置为使服务器能够