Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.06.19;
Скачать: CL | DM;

Вниз

Восстанавливаем исходники   Найти похожие ветки 

 
Luidji   (2003-06-01 20:36) [40]

Ihor Osov"yak, очень интересно. Поделись, как делал ?

P.S. 60 kb - это кода там было немало.


 
Ihor Osov'yak ©   (2003-06-01 23:23) [41]

В общих чертах так. Для начала нужно было подобрать набор стандартных библиотечных функций.. Модуль system линкуется самым первым, пишем тестовое приложение, вызывающие все функции модуля system. Дисассемблером проходимся по тестовом приложении и по иследуемом. Сравнением кода первых модулей кода определяем набор функций, которые использовались из модуля систем. Играем опциями компилятора так, чтобы образы функций были идентичными.. Задача упрощается тем, что функции идут в образе модулей последовательно, то-есть код некоторой функции может отсутствовать, но функции не могут быть "помешаны" - в смысле, порядок расположения функций в образе модуля детерминирован...
.. Завершение первого этапа - образы модуля system для исследуемого приложения и тестового - одинаковые. Потом по адресам точек входа в код соотв. функций востанавливаем их имена (это когда уже делаем разборку с custom-units)..

После system смотрим до следующего модуля - есть ли он стандартный или уже пользовательский, если стандартный - повторяем процедуру, аналогичную system. В моем случае был еще один стандартный - dos, далее шли пользовательские... Определение пользовательский или стандартный - сравнение кода одной или двух первых функций с несколькими первыми функциями из стандартных модулей - благо в пятом паскале их не так много, да и посмотрев программу в работе, можно было понять, что ни graph, ни crt там не использовались :-)..

Далее кустом модули.. Отправные точки - по адрессам вызова стандартных модулей определеямем стандартные функции, которые зовутся.. По манипуляциям со стеком на момент входа в процедуру - размер локальных переменных.. По построению стека вызова - прикидки о количестве и типах формальных параметров..

Потом методом подбора всякие там цыклы, ифы и тд и тп... Понятно, что пользовался дизассемблером, а не на уровне машинного кода..
Плюс неисчеслимое число компиляций и сравнения на уровне бинарного кода..


.. на завершальной стадии давал некоторым процедурам и переменным осмысленные имена, так как эту программу в последующем нужно было немного модифицировать..

.. жуть одним словом.. Но тогда еще молод был, сейчас наверное за такое не брался бы.. Хотя от условий зависит..

Зы. Дело было где-то в 92-94, могу по архивам точно посмотреть.. Но думаю, это уже не столь важно..






 
evvcom ©   (2003-06-02 01:20) [42]

Не вижу смысла в точном повторении кода до бита/байта. Достаточно обработать файл IDA Pro, он многое возьмет на себя (количество формальных параметров, соглашения о вызовах, имена общеизвестных функций и др.). А далее действительно кропотливая работа, но главное - понять логику работы.
А лучше писать свое, а чужое только исследовать, чтобы научиться и/или понять почему так, а не эдак.


 
p77 ©   (2003-06-02 01:33) [43]

2 Ihor Osov"yak © (01.06.03 23:23):
Нехило...


 
Oleg_Gashev ©   (2003-06-02 01:45) [44]

Dede не восстанавливает dfm, etc если просто exe сжать чем нибудь.


 
Ihor Osov'yak ©   (2003-06-02 09:33) [45]

2 evvcom © (02.06.03 01:20)

Нужно было иметь гарантию корректного декомпилирования. Никакого более умного критерия, чем 1 к 1 повторения на уровне кода не смог придувать...

А относительности целесообразности той задачи.. Инета тогда не было, информация для реализации изделия нужна была специфическая.. Расколупывать информацию было бы еще более проблематично. А так было под рукой изделие, несколько глючивое и немного функциональность нужно было расширить.. А автора установить невозможно было..


 
Игорь Шевченко ©   (2003-06-02 14:52) [46]

Malder © (28.05.03 20:31)
> Исходный код восстановить нельзя. Могу даже поспорить


Мы говорим о точном исходном коде или о восстановлении кода, выполняющего ту же самую задачу ? Первое - нельзя, второе можно.



Страницы: 1 2 вся ветка

Текущий архив: 2003.06.19;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.023 c
4-60456
LIK
2003-04-19 19:16
2003.06.19
TreeView


1-60127
Yarix
2003-06-06 14:55
2003.06.19
Добавление события к форме


1-60125
MSTX
2003-06-06 08:50
2003.06.19
Как осуществить подсветку?


1-60198
Valeron
2003-06-05 09:52
2003.06.19
Как лучше реализовать векторные обьекты?


1-60137
Андрю-ХА
2003-06-06 01:33
2003.06.19
MSXMLDOM + Unicode