Интерпретация восстановленного кода

DE Decompiler восстанавливает Delphi-подобную логику программы из нативных инструкций и доступных метаданных. Детализация результата определяется информацией, сохранённой в бинарном файле.

Что представляет собой высокоуровневый листинг

Декомпиляция нативного кода восстанавливает выражения, условия if, блоки case, циклы и вызовы, включая распознанные методы VCL. Это помогает изучать логику программы при реверс-инжиниринге и анализе безопасности. Листинг представляет восстановленную реализацию, а не исходный текст программы.

Имена, структуры данных и вызовы

  • Имена переменных: оригинальные локальные имена обычно отсутствуют в бинарном файле. Сгенерированные идентификаторы представляют восстановленные значения; присвоенные аналитиком имена могут прояснить их роль.
  • Типы и структуры: RTTI предоставляет информацию о типах там, где она доступна. Другие структуры могут быть выведены из размеров доступа и адресов, поэтому типы полей, границы и сигнатуры могут требовать дополнительной интерпретации.
  • Вызовы: распознанные методы VCL могут отображаться по имени. Вызов, который не удалось идентифицировать, может остаться вызовом метода или адреса без его оригинального VCL имени.
  • Вариации компилятора: поколения компиляторов, библиотеки и оптимизация влияют на генерируемые машинные инструкции и метаданные. Специфичная для версии информация RTTI помогает в их интерпретации, однако выведенный тип или выражение все еще может требовать коррекции.

Проверяйте существенные выводы

  1. Определите точный бинарный файл, модуль, класс и процедуру, которые рассматриваются.
  2. Изучите декомпилированную логику и объявления, используя нативные инструкции для разрешения неопределенных выражений или типов.
  3. Исследуйте вызывающие объекты, подготовку аргументов, условные переходы и связанные строки.
  4. Используйте HEX-редактор, когда инструкцию или восстановленное значение необходимо проверить по данным файла.
  5. Фиксируйте то, что было замечено непосредственно, и то, что остается выведенной интерпретацией.

Расследование безопасности

Восстановленная структура и код помогают следователям по инцидентам, аналитикам антивирусов и корпоративным командам безопасности находить подозрительную логику, потенциальные бэкдоры и нежелательный функционал. Установите, как используется значение или вызов, прежде чем делать выводы. Сама по себе строка или имя API не доказывают вредоносное поведение или факт выполнения ветви.

Восстановление исходного кода

Восстановленные формы, объявления и код процедур могут сократить объём ручной работы по восстановлению. Декомпиляция нативного кода не воспроизводит компилируемый исходный проект. Перед открытием экспортированного кода в IDE выполните ручной анализ и исправьте неточности декомпиляции и несовместимости, согласуйте предполагаемые типы и неустановленные вызовы, а также обеспечьте наличие недостающих модулей, компонентов и зависимостей. Сборка восстановленного материала требует выполнения ручных работ.

Приложения, созданные в C++Builder

Баз знаний RTTI для библиотек, специфичных для C++Builder, пока нет. Функции вне общей базы VCL, а также нераспознанные свойства и методы объектов могут отображаться без библиотечных имён. Поэтому качество декомпиляции кода C++Builder заметно ниже, чем для программ, написанных на Delphi. Это ограничение касается качества восстановления кода и распознавания библиотечных имён. Остальные возможности доступны для C++Builder по тем же правилам редакций, что и для программ, написанных на Delphi.

Код C++Builder восстанавливается в виде Delphi-подобного Pascal с экспортом в PAS/DFM. Исходный текст на C++ не восстанавливается. Как и при другом восстановлении нативного кода, перед использованием результата в IDE вручную проверьте и исправьте предполагаемые типы, сгенерированные имена и погрешности декомпиляции.