Текущий архив: 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.53 MB
Время: 0.01 c