Обратные разработки Windows PowerBuilder Binaries


3

Я недавно наткнулся на двоичный файл, созданный с использованием Sybase PowerBuilder 12.5, и я ищу любую помощь в его обратном, поскольку он на самом деле сильно отличается от типичного двоичного файла C++. Мне особенно интересно понимать формат файлов файлов PBD, который, как представляется, содержит большинство, если не весь контент. Моя цель - иметь возможность извлекать значения для определенных переменных и выполнять базовый статический анализ.

Поиск, кажется, указывает на то, что это не популярный тип двоичного кода, поскольку я не мог найти много о них, поэтому я буду документировать мои небольшие заметки здесь, надеясь, что это поможет кому-то, если я не смогу идти дальше.

Во-первых, приложение запускается PE как и любой другой, но PE в основном пуст, он в основном вызывает FN_RunExecutable от PBVM125.dll, отправляя программу. В пределах PBVM125.dll, FN_RunExecutable будет инициализировать программу. Эта DLL, по-видимому, является основной библиотекой, поскольку она экспортирует множество функций, немного похожих на основную библиотеку .NET.

В какой-то момент он наверняка загружает данные из этих файлов PBD. Кажется, что эти файлы PBD содержат имена объектов и переменных. Имена в Unicode, и некоторые из этих объектов следуют дополнительные байты, с префиксом «DAT *»:

enter image description here

А вот еще один пример содержимого файла PBD:

enter image description here

Хотя многие из этих строк ссылаются на компонент или переменную, я пока не нашел их связанных значений. Существует файл .db с приложением. Использование шестнадцатеричного редактора (файл базы данных не является базой SQLlite - я подозреваю, что это какой-то формат Sybase), я не мог видеть ни одну из этих строк внутри нее. Этот файл базы данных открывается каждый раз, когда приложение открывается.

В любом случае, если кто-то с опытом PowerBuilder (или кто-либо) может помочь в понимании формата файла PBD для извлечения данных из него, это значительно ускорит мой проект.

Спасибо,

Update 1: Consulting документацию Sybase, PowerBuilder приложений несколько больше похожи на .NET. PBVM125.dll фактически является виртуальной машиной, которая интерпретирует файлы PBD, делая код независящим от платформы. Файлы PBD представляют собой набор объектов, которые выполняются виртуальной машиной. При описании формата файлов PBL - это файлы PDB с исходным кодом - this reference приближает меня к моей цели. Я буду использовать эту информацию, чтобы попытаться получить значения из файлов.

0

Мне особенно интересно понимать формат файла файлов PBD, который, как представляется, удерживает большинство, если не весь контент. Моя цель - иметь возможность извлекать значения для определенных переменных и выполнять базовый статический анализ.

Вы можете думать о PowerBuilder как другой Java (для PB Classic, так как PB10 или PB11, есть также версия PowerBuilder, что может привести к .Net сборок - Я буду говорить только о PB Classic), в качестве источника скомпилирован в байт-код, который запускается виртуальной машиной, расположенной в PBVMxxx.dll (замените xxx на версию PB, например 90, 100 или 125). Там были Mac, Solaris или AIX VM, но в настоящее время остается только VM.

Каждый объект PB (структура, окно, визуальный или не визуальный объект, меню, ...) скомпилирован в соответствующий двоичный файл, например .java, скомпилирован в .class, который поддерживает расширение, указывающее его природу (например, объект .sro -> .obj, menu srm -> .mnu, struct srt -> str, ...), и все объекты хранятся в файле .pbd (при использовании среды разработки вместо этого вы используете .pbl (= PB), которая также содержит «файлы» исходного кода).

.pbl и .pbd файлы имеют одну и ту же структуру дерева, включая каталог содержащихся файлов и связанный список блоков данных. Он похож на файл игрового ресурса для старожилов. : o)

Формат форматов или библиотека официально не документированы, но структура библиотеки была отменена и published. Основываясь на этом, я сделал dumper, который может извлекать содержащиеся объекты.

Я не закончил работу над изменением формата класса, но вы можете заметить, что он сохраняет имена переменных и объектов по номерам строк оператора, таким образом, можно получить квази идентичный исходный код из скомпилированного байт-кода (вы только теряете комментарии), и я уже видел некоторые коммерческие декомпиляторы.