Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2003.06.19;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.53 MB
Время: 0.009 c
14-60409
kaif
2003-06-02 19:18
2003.06.19
Можно ли примирить эволюционизм и креационизм?


1-60170
deedlit
2003-06-06 15:19
2003.06.19
Оскомина работы с эксплорером...


6-60306
ZDN
2003-04-15 08:55
2003.06.19
Передача потока данных с аудиокарты на стевуху.


3-60064
Smashich
2003-05-28 13:55
2003.06.19
TrbMakeTextHalcyonLink


7-60433
Вовчик
2003-04-15 13:15
2003.06.19
ico в shell32.dll





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский