我最近偶然发现了一个使用 Sybase PowerBuilder 12.5 构建的二进制文件,我正在寻找任何帮助来反转它,因为它实际上与典型的 C++ 二进制文件大不相同。我对理解 PBD 文件的文件格式特别感兴趣,它似乎包含了大部分内容。我的目标是能够检索特定变量的值并进行一些基本的静态分析。
四处搜索似乎表明这不是一种流行的二进制文件类型,因为我找不到太多关于它们的信息,所以我将在这里记录我的一些笔记,希望它可以帮助某人,以防我不能更进一步。
首先,应用程序是由 PE 启动的,但 PE 大部分是空的,它基本上是FN_RunExecutable
从PBVM125.dll
传送程序中调用的。在 中PBVM125.dll
,FN_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 文件——这个参考使我非常接近我的目标。我将使用此信息尝试从文件中获取值。