逆向工程 Windows PowerBuilder 二进制文件

逆向工程 视窗 二元分析 二进制格式
2021-06-16 05:27:38

我最近偶然发现了一个使用 Sybase PowerBuilder 12.5 构建的二进制文件,我正在寻找任何帮助来反转它,因为它实际上与典型的 C++ 二进制文件大不相同。我对理解 PBD 文件的文件格式特别感兴趣,它似乎包含了大部分内容。我的目标是能够检索特定变量的值并进行一些基本的静态分析。

四处搜索似乎表明这不是一种流行的二进制文件类型,因为我找不到太多关于它们的信息,所以我将在这里记录我的一些笔记,希望它可以帮助某人,以防我不能更进一步。

首先,应用程序是由 PE 启动的,但 PE 大部分是空的,它基本上是FN_RunExecutablePBVM125.dll传送程序中调用的。在 中PBVM125.dllFN_RunExecutable将初始化程序。这个 dll 似乎是主库,因为它导出了很多函数,有点类似于核心 .NET dll。

在某些时候,它肯定会从这些 PBD 文件中加载数据。这些 PBD 文件似乎包含对象和变量的名称。名称采用 Unicode 格式,其中一些对象后跟附加字节,前缀为“DAT*”:

在此处输入图片说明

这是 PBD 文件内容的另一个示例:

在此处输入图片说明

虽然这些字符串中的许多似乎引用了一个组件或一个变量,但到目前为止我还没有找到它们的相关值。有一个.db包含应用程序文件。使用十六进制编辑器(数据库文件不是 SQLlite 数据库 - 我怀疑它是某种 Sybase 格式),我在其中看不到任何这些字符串。每次打开应用程序时都会访问此数据库文件。

在任何情况下,如果有 PowerBuilder 经验的人(或任何人)可以帮助理解 PBD 文件格式以从中提取数据,这将大大加快我的项目。

谢谢,

更新 1:查阅 Sybase 文档,PowerBuilder 应用程序更类似于 .NET。PBVM125.dll实际上是一个虚拟机解释PBD文件,使代码与平台无关。PBD 文件是由 VM 执行的对象集合。在描述 PBL 文件的格式时——即带有源代码的 PDB 文件——这个参考使我非常接近我的目标。我将使用此信息尝试从文件中获取值。

1个回答

我对理解 PBD 文件的文件格式特别感兴趣,它似乎包含了大部分内容。我的目标是能够检索特定变量的值并进行一些基本的静态分析。

您可以将 PowerBuilder 视为另一种 Java(对于 PB Classic,从 PB10 或 PB11 开始,还有一个 PowerBuilder 版本可以生成 .Net 程序集——我只会谈论 PB Classic),因为源代码被编译成字节码由位于PBVMxxx.dll(替换xxx为 PB 版本,如 90、100 或 125)的 VM 运行曾经有 Mac、Solaris 或 AIX VM,但现在只剩下 Windows VM。

每个 PB 对象(结构、窗口、可视化或非可视化对象、菜单等)都被编译成相应的二进制文件,就像 .java 被编译成一个 .class ,该类保持一个扩展名,说明其性质(例如对象 .sro -> .obj, menu srm -> .mnu, structure srt -> str, ...) 并且所有对象都存储到一个 .pbd 文件中(使用开发环境时,您使用的是 .pbl(=PB 库)还包含源代码“文件”)。

.pbl 和 .pbd 文件具有相同的树结构,包括包含文件的目录和数据块的链表。它看起来像一个老玩家的游戏资源文件。:o)

类格式和库都没有正式记录,但库结构已经颠倒和发布基于此,我做了一个可以提取包含对象转储程序。

我没有完成关于类格式反转的正在进行的工作,但您可以注意到它保留变量和对象名称,以及语句行号,因此可以从编译的字节码中检索准相同的源代码(你只会失去评论)我已经看到了一些中国的商业反编译器。