Delphi Восстановление классов delphi

Roentgen

Новичок
Сообщения
20
Реакции
15
Прошу прощения, если не в тот форум.
Недавно ковырял прогу одну, написанную на дельфях, и задумался. Вот есть метод, по которому работает, например, плагин IDA-For-Delphi. До сих пор рабочий. Ищется функция назначения ивентов компонентам/формам и можно восстановить имена функций.
Написал свою dll с таким функционалом, работает, красота. Но хочу большего.
Хочу восстанавливать имена классов/методов классов, как это делают DeDe/IDR. Существуют ли какие-то туториалы с описанием, как это работает в дельфях?
Сорсы IDR64 начал смотреть, но там чот сложна-сложна-нипанятна пока что.

Буду рад помощи
 

PE_Kill

Мудрец
Сообщения
178
Реакции
891
Я в свое время немного ковырял процесс. Но меня больше интересовало восстановление исходного кода, а не классов. Delphi паттерновый компилятор и зная какую конструкцию во что он превращает на АСМе можно 1 в 1 восстановить код на паскале. Где был if, где else, где while а где фор. Использовался Cardinal или Integer и т.д.

Тогда я дочитался до архивов фидо. Там чел на спор восстановил один Unit в исходник, который ему для спора прислали. Только названия переменных сам придумал, этого не восстановить. Тогда все очень удивлялись, подозреваю с фидо оно и началось.

Смотреть можно начать с RTTI, на нем построена рефлексия в делфях. Сами делфи позволяют с этим работать с помощью юнита TypInfo.
Подключи, посмотри там куча работы со структурами и куча ассемблера. Вот например при создании формы можно узнать из какого она юнита:

Код:
procedure TfrmMain.FormCreate(Sender: TObject);
begin
  ShowMessage(GetTypeData(PTypeInfo(Sender.ClassInfo))^.UnitName);
end;
Выдает "uMain"
 

Roentgen

Новичок
Сообщения
20
Реакции
15
Смотреть можно начать с RTTI, на нем построена рефлексия в делфях. Сами делфи позволяют с этим работать с помощью юнита TypInfo.
Подключи, посмотри там куча работы со структурами и куча ассемблера. Вот например при создании формы можно узнать из какого она юнита:

Код:
procedure TfrmMain.FormCreate(Sender: TObject);
begin
ShowMessage(GetTypeData(PTypeInfo(Sender.ClassInfo))^.UnitName);
end;
Выдает "uMain"
Спасибо за информацию. Хотя, я думал, что такое работает только для нестрипнутых экзешнеков, разве нет?

IDR (уникальная утилита в своем классе)
базируется на наработках Алексея Хмельнова
http://hmelnov.icc.ru/DCU/
спасибо
 

PE_Kill

Мудрец
Сообщения
178
Реакции
891
Спасибо за информацию. Хотя, я думал, что такое работает только для нестрипнутых экзешнеков, разве нет?
Хз, часть данных делфи вообще в ресурсах хранит. Смотри секцию RC Data
PACKAGEINFO
И формы там же, можешь копировать и в проект вставлять.
 

Roentgen

Новичок
Сообщения
20
Реакции
15
Покопался тут еще в закромах Родины :)
мож чего интересного найдете для себя по поводу ДеДе и иже с ними...
https://www.sendspace.com/file/6aqbgy
спасибо. К сожалению, всё это уже устарело и не могёт ни в современные версии, ни, тем более, в x64

Хз, часть данных делфи вообще в ресурсах хранит. Смотри секцию RC Data
PACKAGEINFO
И формы там же, можешь копировать и в проект вставлять.
видимо, в моей проге интересующие меня классы находятся в юнитах с другими именами... спасибо за информацию к размышлению...
 
Верх Низ