Форум: "Потрепаться";
Текущий архив: 2004.10.17;
Скачать: [xml.tar.bz2];
ВнизЕсть ли декомпилятор прог написаных на делфи ? Найти похожие ветки
← →
Фёдор Мегатронов (2004-09-26 21:43) [0]Просто я уже не знаю что делать с этим подлым HttpQueryInfo 8) , но нашел прогу в которой он есть и корректно функционирует... вот я подумал, что наверняка можно посмотреть как именно она там реализована.
потому что по всем законам физики и квантовой термоджинамики - она работать отказываеться 8) я над ней сижу уже не первый месяц.
← →
reticon © (2004-09-26 21:59) [1]Удалено модератором
← →
Dimaxx (2004-09-26 22:15) [2]DeDe - прога такая DElphi DEcompiler.
← →
_silver © (2004-09-26 23:33) [3]Декомпиляторов не существует по определению компиляторов.
Но DeDe - удобный дизассемблер для delphi.
← →
Gero © (2004-09-26 23:35) [4]
> Декомпиляторов не существует по определению компиляторов.
> Но DeDe - удобный дизассемблер для delphi.
DeDe как раз это декомпилятор.
← →
_silver © (2004-09-26 23:39) [5]Я предполагая что Фёдор Мегатронов спрашивал "как из ехе получить код на паскале", а таких прог не было, нет и не будет.
DeDe - дизассемблер, заточеный под проги написанные на delphi.
← →
Gero © (2004-09-26 23:42) [6]
> Я предполагая что Фёдор Мегатронов спрашивал "как из ехе
> получить код на паскале",
Вобще-то он спрашивал "Есть ли декомпилятор прог написаных на делфи ?".
> а таких прог не было, нет и не будет
Не факт.
> DeDe - дизассемблер, заточеный под проги написанные на delphi.
Декомпилятор. Так как кроме асма мы получаем еще и структуру проекта, и все формы.
← →
_silver © (2004-09-26 23:43) [7]Я долгое время сам занимался проблемой декомпиляции.
Перечитав кучу книг и после многих неудачных опытов я забросил это безнадёжное дело.
← →
_silver © (2004-09-26 23:44) [8]
> Декомпилятор. Так как кроме асма мы получаем еще и
> структуру проекта, и все формы.
Все формы можно получить любым редактором ресурсов.
← →
Gero © (2004-09-26 23:44) [9]А я долгое время занимался проблемой компиляции.
Перечитав кучу книг и после многих неудачных опытов я так же забросил это безнадёжное дело.
← →
Gero © (2004-09-26 23:45) [10]
> Все формы можно получить любым редактором ресурсов.
Конечно можно, хоть и не любым.
А что в твоем определении есть декомпилятор?
← →
_silver © (2004-09-26 23:46) [11]Gero © (26.09.04 23:44) [9]
Я не говорю "что раз я не сделал никто не сделает", но надо смотреть на факты - пока таких прог нет и врядли будет.
← →
DrPass © (2004-09-26 23:48) [12]Декомпилятор восстанавливает исходный код из скомпилированного (не обязательно речь идет о программах и их исходниках). DeDe не попадает под понятие "декомпилятор" - потому что исходный код он не восстанавливает
← →
_silver © (2004-09-26 23:49) [13]Gero © (26.09.04 23:45) [10]
В моём понимании декомпилятор выполняет процесс обратный компиляции.
Т.е из exe - pas(хотябы очень приближённо).
А из exe - asm - это дизассемблер.
← →
Gero © (2004-09-26 23:53) [14]
> Т.е из exe - pas(хотябы очень приближённо).
А оно так и есть.
> но надо смотреть на факты - пока таких прог нет и врядли
> будет.
Почему ты уверен, что их не будет?
← →
_silver © (2004-09-26 23:53) [15]Теоритически зная алгоритм генерации кода delphi можно создать декомпилятор. Но без знания алгоритма это пустой разговор. Таких прог не было, нет и не будет.
← →
_silver © (2004-09-26 23:54) [16]Gero © (26.09.04 23:53) [14]
> А оно так и есть.
Это слишком сильное приближение.
← →
Gero © (2004-09-26 23:55) [17]
> _silver © (26.09.04 23:54)
Никакого приближения, из exe - pas, что и требовалось.
← →
Gero © (2004-09-26 23:55) [18]
> Таких прог не было, нет и не будет.
Почему не будет?
← →
KilkennyCat © (2004-09-27 00:05) [19]опять двадцать пять...
сколько можно обсуждать это?
де-де - фигня полная,и программеры, которые хотят "декомпилятор" - не программеры.
← →
_silver © (2004-09-27 00:06) [20]Gero © (26.09.04 23:55) [18]
Да потому что алгоритм генерации кода изменяется от версии к версии.
И вообще результирующий код зависит от многих причин - оптимизация, и т.д.
А если ассемблерные вставки? Как их переварит декомпилятор?
А если я напишу
a := 1;
b := sqrt(1);
c := a-b;
if a-b = c then ..
врядли декомпилятор выдаст такойже результат.
А апи как с ними быть?
А COM, DCOM?
Не слишком ли много проблем?
← →
_silver © (2004-09-27 00:12) [21]Если кого я не убедил советую задуаться о написании собственного декомпилятора(лучше со всех языков сразу).
← →
Gero © (2004-09-27 00:18) [22]
> _silver © (27.09.04 00:06)
Ну и что, это не значит ведь, что задача невозможна.
← →
_silver © (2004-09-27 00:21) [23]Gero © (27.09.04 0:18) [22]
Не бывает не возможных задач.
Бывают задачи которые не оправдывают вложеные в них затраты.
Декомпилятор совсем не тривиальная задача.
← →
_silver © (2004-09-27 00:22) [24]И самый главный вопрос - "зачем он нужен?"
← →
Gero © (2004-09-27 00:23) [25]
> _silver © (27.09.04 00:21)
Да ну и что, это же не значит, что его никогда не будет!
← →
Gero © (2004-09-27 00:24) [26]
> зачем он нужен
Чтобы из exe"шника получать pas. Ты сам же твердил это.
Или уже забыл?
← →
Profi © (2004-09-27 00:28) [27]Gero © (26.09.04 23:53) [14]
Возьми DeDe, дезассемблирую любой exe и попробуй засунуть получившийся код обратно в компилятор.
← →
_silver © (2004-09-27 00:28) [28]Gero © (27.09.04 0:23) [25]
Это как раз и значит что его никогда не будет.
Один человек врядли справится с этой задачей.
Будут ли оправданы усилия группы разработчиков(в смысле "кто им будет платить" borland:-)?)?
Ктому же полной декомпиляции добиться не возможно.
← →
_silver © (2004-09-27 00:29) [29]
> Profi © (27.09.04 0:28) [27] [Новое
>сообщение][Ответить]
>Gero © (26.09.04 23:53) [14]
> Возьми DeDe, дезассемблирую любой exe и попробуй
> засунуть получившийся код обратно в компилятор.
Вот именно.
← →
_silver © (2004-09-27 00:31) [30]Для особо упрямых:
Компиляция - одно направленый процесс...
Не значит ли это невозможность существования декомпиляторов?
← →
Германн © (2004-09-27 03:48) [31]2_silver © (27.09.04 00:31) [30]
>Для особо упрямых:
>Компиляция - одно направленый процесс...
>Не значит ли это невозможность существования декомпиляторов?
Не значит!
Но значит, что декомпилляция - многовариантный процесс. И, следовательно сложный, неоднозначный и требующий "огромных трудовремячеловекозатрат" процесс! Отсюда может возникнуть тезис о "Невозможности существования декомпилляторов".
← →
Gero © (2004-09-27 07:24) [32]
> Возьми DeDe, дезассемблирую любой exe и попробуй засунуть
> получившийся код обратно в компилятор.
Зачем? Мне что, больше делать нечего?
> Один человек врядли справится с этой задачей.
> Будут ли оправданы усилия группы разработчиков
Декомпилятор невозможен, потому что никто не захочет его написать. Смешно.
А вот представь, что некий Вася и пара его друзей решат написать нечто подобное. Совершенно бескорыстно.
И напишут. А потом ты им тоже будешь доказывать, что это невозможно?..
Ты не привел ни одного нормального аргумента доказующего невозможность декомпиляции.
Так о чем тогда я с тобой спорю?
← →
KSergey © (2004-09-27 07:32) [33]> [31] Германн © (27.09.04 03:48)
> >Не значит ли это невозможность существования декомпиляторов?
> Не значит!
> Но значит, что декомпилляция - многовариантный процесс.
> И, следовательно сложный, неоднозначный и требующий "огромных
> трудовремячеловекозатрат" процесс! Отсюда может возникнуть
> тезис о "Невозможности существования декомпилляторов".
Начало мне понравилось, а вот вывод - не понятен.
Скорее следует то, что невозможно декомпиляцией получить однозначно исходный код.
Что-то получить - да, думаю возможно. Исходный код (сделать полностью обратный процесс) - нет.
← →
KSergey © (2004-09-27 07:34) [34]> [21] _silver © (27.09.04 00:12)
> Если кого я не убедил советую задуаться о написании собственного
> декомпилятора(лучше со всех языков сразу).
Думаю, лучше им попробоват ькомпилятор написать. Только взрослый, с оптимизатором и т.п.
Тогда и вопрос о декомпиляции, думаю, отпадет сам собой ;)
← →
Gero © (2004-09-27 07:50) [35]
> Думаю, лучше им попробоват ькомпилятор написать.
Это мне что ли?
Как нибудь обязательно займусь на досуге...
← →
KSergey © (2004-09-27 08:51) [36]> [35] Gero © (27.09.04 07:50)
> Это мне что ли?
Зудит? ;)
Вообще-то это не было обращено к кому-либо лично
← →
_silver © (2004-09-27 09:31) [37]По моему мы рассуждаем не о том.
Давайте определимся что значит декомпиляция.
Если декомптляция - процесс обратный компиляции то
> _silver © (27.09.04 00:31) [30]
Если нет то тогда что это такое?
Символические имена востановить не получится(никак:)), даже просто востановить структуру программы будет практически не возможно.
Вот список некоторых проблем:
• Разделение кода и данных. В архитектуре Фон-Неймана инструкции и
данные представляются в памяти одинаково. Взяв случайную
последовательность байт из бинарного файла, мы не может однозначно
сказать, что это – инструкции или данные. Даже если процессор
поддерживает разделение сегментов кода и данных, небольшое
количество данных (например, таблицы ветвлений типа case) может
оставаться в сегменте кода.
• Самомодифицирующийся код. Иногда, в силу разных обстоятельств
(экономия памяти, шифрование кода, написание вирусов), программы
используют одни и те же адреса памяти для хранения и исполняемого
кода, и данных.
• Идиомы. Идиома – это последовательность инструкций, которая
формирует логическую единицу, действие, которое не является просто
использованием первичного назначения используемых инструкций.
Например, умножение и деление на степень 2-ки является известной и
широко используемой идиомой: вместо использования обычных
инструкций умножения и деления применяют сдвиг аргумента влево и
вправо соответственно.
• Подпрограммы, добавляемые компилятором и линковщиком.
Компилятор почти всегда добавляет подпрограммы для инициализации,
а также библиотеки поддержки выполнения (RTL). Такие процедуры
обычно написаны на ассемблере и в большинстве случаев не могут быть
декомпилированны в высокоуровневый язык.
← →
_silver © (2004-09-27 09:35) [38]Ну так ещё сомнения остались?
> • Самомодифицирующийся код. Иногда, в силу разных обстоятельств
> (экономия памяти, шифрование кода, написание вирусов), программы
> используют одни и те же адреса памяти для хранения и исполняемого
> кода, и данных.
К этому относится также то, что невозможно предугадать что напишет программист и как это что-то будет откомпилировано.
← →
Gero © (2004-09-27 10:14) [39]
[36] KSergey © (27.09.04 08:51)
> Вообще-то это не было обращено к кому-либо лично
Но ко мне в том числе.
← →
Gero © (2004-09-27 10:25) [40]
> _silver © (27.09.04 09:31)
Все эти утверждения не говорят о том, что декомпиляция невозможна.
Это сложная задача, и исходник в таком виде как он был, восстановить не получится наверняка.
Но утверждать о невозможности этого глупо.
Может через несколько лет будут совсем другие компиляторы и форматы exe?
А ты утверждаешь, что "Таких прог не было, нет и не будет".
← →
_silver © (2004-09-27 10:30) [41]
> Может через несколько лет будут совсем другие компиляторы
> и форматы exe?
Это не доказывыает возможность существования декомпиляторов, а скорее опровергает.
> • Разделение кода и данных.
Обращаю ещё раз внимание на это. В общем случае не возможно определить что в файле код или данные.
← →
Sandman25 © (2004-09-27 10:33) [42][41] _silver © (27.09.04 10:30)
Обращаю ещё раз внимание на это. В общем случае не возможно определить что в файле код или данные.
Программа же как-то выполняется. Значит, нужно сэмулировать ее выполнение и получить ее "код"
← →
Gero © (2004-09-27 10:34) [43]
> В общем случае
В общем случае да.
А в частных можно.
Я могу написать декомпилятор только для своей программы.
От этого он декомпилятором быть не перестанет.
← →
_silver © (2004-09-27 10:35) [44]
> Я могу написать декомпилятор только для своей программы.
:)))))
Такой я тоже могу.
← →
Agent13 © (2004-09-27 10:36) [45]Мужики, давайте смотреть на вещи проще! Какая разница, каое определение мы даём декомпилятору? Юзеру не легче оттого, что вы назовёте ДеДе декомпилятором. Потому как код, сотворённый сей программой обратно компильнуть не выйдет. Так что классификация - проблема философская, а не жизненная.
← →
Gero © (2004-09-27 10:37) [46]
> _silver © (27.09.04 10:35)
Ну вот, а ты говоришь, что он не возможен.
Надеюсь ты убедился в обратном?
← →
Gero © (2004-09-27 10:38) [47]
> Agent13 © (27.09.04 10:36)
Да не, мы тут спорим возможен ли декомпилятор в принципе.
← →
_silver © (2004-09-27 10:42) [48]
> Ну вот, а ты говоришь, что он не возможен.
> Надеюсь ты убедился в обратном?
Нет не убедился.
Для какой-то конкретной программы зная её структуру я могу написать декомпилятор.
Ещё один пункт к моим докозательствам:
-включение объектных модулей написанных на С
← →
Gero © (2004-09-27 10:43) [49]
> Для какой-то конкретной программы зная её структуру я могу
> написать декомпилятор.
Раз ты можешь его написать, значит он возможен, не так ли?
← →
_silver © (2004-09-27 10:50) [50]
> Gero © (27.09.04 10:43) [49]
Я бы не стал называть это декомпилятором.
← →
Игорь Шевченко © (2004-09-27 10:56) [51]Gero © (26.09.04 23:42) [6]
> > DeDe - дизассемблер, заточеный под проги написанные на
> delphi.
>
> Декомпилятор. Так как кроме асма мы получаем еще и структуру
> проекта, и все формы.
Ерунда.
Получаются только формы, созданные по auto-create.
_silver © (26.09.04 23:46) [11]
> но надо смотреть на факты - пока таких прог нет и врядли
> будет.
Ну почему же ? Компилятор Delphi генерирует вполне детерниминированный код, по крайней мере, можно попытаться получить функционально аналогичную программу из скомпилированного исходного кода, только это долго и муторно, и чаще всего не нужно.
Gero © (27.09.04 10:38) [47]
> мы тут спорим возможен ли декомпилятор в принципе.
Возможен
← →
_silver © (2004-09-27 11:01) [52]
> Ну почему же ? Компилятор Delphi генерирует вполне детерниминированный
> код, по крайней мере, можно попытаться получить функционально
> аналогичную программу из скомпилированного исходного кода,
> только это долго и муторно, и чаще всего не нужно.
Да дело не только в компиляторе.
Я же уже приводил доводы.
← →
Gero © (2004-09-27 11:05) [53]
> Я бы не стал называть это декомпилятором.
От того, как ты будешь это называть, он декомпилятором быть не перестанет.
Есть exe"шник, он его прочитает и выдаст тебе исходный текст.
Чем не декомпилятор?
← →
_silver © (2004-09-27 11:13) [54]
> Чем не декомпилятор?
Тем что он будет работать только с одним этим ехешником, на другом засыпется.
И всётаки я наставиваю на том что декомпиляция - процесс обратный компиляции и рассматривать "декомпиляторы" можно только с этой стороны. Если это условие выполняется значит декомпилятор возможен. А так пустой разговор.
З.Ы Чем IDA не декомпилятор.
← →
Gero © (2004-09-27 11:20) [55]
> _silver © (27.09.04 11:13)
Ладно, этот спор ни к чему не приведет.
← →
PVOzerski © (2004-09-27 11:23) [56]Немножко соображений:
1) :^) А комментарии, разбивку по строкам (если нет отладочной информации), отступы, имена всех функций и переменных тоже декомпилируем? BTW, комментарии - иногда почти самое ценное в исходниках.
2) Уже серьезнее: а как быть с тем, что можно из разного Pascal-кода получить на выходе один и тот же набор машинных инструкций? И что будет делать декомпилятор в такой ситуации?
← →
Gero © (2004-09-27 11:24) [57]
> PVOzerski © (27.09.04 11:23)
То есть ты тоже думаешь, что компилятор невозможен в принципе?
← →
_silver © (2004-09-27 11:25) [58]
> Уже серьезнее: а как быть с тем, что можно из разного Pascal-кода
> получить на выходе один и тот же набор машинных инструкций?
>
Так же - один код на Pascalе может привести к разным наборам машинных инструкций.
> Gero © (27.09.04 11:20) [55]
Согласен.
← →
Игорь Шевченко © (2004-09-27 11:29) [59]_silver © (27.09.04 11:01) [52]
> Да дело не только в компиляторе.
Дело в компиляторе. И только в нем. Так как именно компилятор выполняет перевод с языка высокого уровня в машинные инструкции. Причем, перевод этот он выполняет по строго определенному алгоритму и никакой отсебятины, за исключением оптимизации, он не добавляет.
← →
PVOzerski © (2004-09-27 11:30) [60]IMHO, нечто, генерящее компилируемый обратно код на смеси Паскаля с ассемблером, получить можно, но пользы окажется существенно меньше, чем ожидается. Вытянуть себе полезный компонент из экзешника, во всяком случае, не получится почти наверняка. Более того, я не уверен, что можно сделать даже нормальный конвертер DCU-шек с одной версии на другую. Кстати, это было бы куда полезнее на практике, чем декомпилировать приложения. IMHO, конечно.
← →
Суслик © (2004-09-27 11:31) [61]Не знаю, что было сказано в [1], но я его полностью поддерживаю.
Дурацкая тема - неужто непонятно, что полная декомпиляция нереальна?
← →
Игорь Шевченко © (2004-09-27 11:32) [62]
> Вытянуть себе полезный компонент из экзешника, во всяком
> случае, не получится почти наверняка
Получится :)
← →
_silver © (2004-09-27 11:33) [63]
> и никакой отсебятины, за исключением оптимизации, он не
> добавляет.
Может добавить программист
asm
...
jmp @1
@2: db 1111
db 2222
...
@1:
...
jnc @2
...
end;
И как такой код переварит декомпилятор?
← →
easy © (2004-09-27 11:36) [64]
> Просто я уже не знаю что делать с этим подлым HttpQueryInfo
зачем он тебе хоть?..
← →
PVOzerski © (2004-09-27 11:44) [65]2Игорь Шевченко © (27.09.04 11:32) [62]
Могу покаяться: всерьез дизассемблировать дельфийские экзещники не пытался. Но неужели линкер не выбрасывает мертвый код, включая неиспользованные методы и свойства?
← →
_silver © (2004-09-27 11:53) [66]
> PVOzerski © (27.09.04 11:44) [65]
Ещё как выбрасывает и своего добавляет.
← →
Игорь Шевченко © (2004-09-27 11:54) [67]PVOzerski © (27.09.04 11:44) [65]
Выбрасывает. Но то, что ты видишь в коде, есть совокупность методов, обеспечивающих нужную (и видимую тебе) функциональность.
Поэтому "выдранная" часть и будет той самой функционально аналогичной.
hint: виртуальные методы не выбрасываются.
_silver © (27.09.04 11:33) [63]
> Может добавить программист
Я патологию в расчет не принимаю.
← →
_silver © (2004-09-27 11:59) [68]
> Я патологию в расчет не принимаю.
Но я говорю об универсальной программе, а не о той которая работает только в тепличных условиях.
← →
Игорь Шевченко © (2004-09-27 12:01) [69]_silver © (27.09.04 11:59) [68]
> Но я говорю об универсальной программе, а не о той которая
> работает только в тепличных условиях.
У нас с тобой разные понятия о универсальной программе. Надеюсь, язык программы с такими вставками, как ты написал в [63] уже не претендует на название "язык высокого уровня", не так ли ?
← →
PVOzerski © (2004-09-27 12:01) [70]>Выбрасывает. Но то, что ты видишь в коде, есть совокупность >методов, обеспечивающих нужную (и видимую тебе) функциональность.
Всю функциональность или то подмножество, которое было задействовано в экзешнике? Подозреваю, что уж неиспользованные статические public-методы будут выброшены наверняка (насчет published - не знаю).
← →
_silver © (2004-09-27 12:07) [71]Ну разговор становится совсем не интересным.
Я привожу примеры, аргументы, а в ответ
Получится :)
и всё тут. Почему получится, где факты?
← →
DiamondShark © (2004-09-27 12:10) [72]Вот нафлудили....
А проблема-то не декомпиляторе вовсе была...
> Просто я уже не знаю что делать с этим подлым HttpQueryInfo
Читать справку, ставить эксперименты, спрашивать на форуме конкретно про эту функцию...
Декомпилятор... блин...
← →
Игорь Шевченко © (2004-09-27 12:27) [73]PVOzerski © (27.09.04 12:01) [70]
> то подмножество, которое было задействовано в экзешнике?
+ виртуальные методы.
но с другой стороны, как ты можешь узнать, что какая-то функциональность отсутствует ? :)
← →
Petr V. Abramov © (2004-09-27 13:12) [74]>Игорь Шевченко © (27.09.04 10:56) [51]
>> мы тут спорим возможен ли декомпилятор в принципе.
> Возможен
Не обнадеживай :), невозможен, хотя бы потому, что машинный код "не помнит" имен переменных, то есть программу на пас в том виде, в котором она была написана, декомпилятор не восстановит. Он может только сгенерить нечто, что при рекомпиляции даст тот же машинный код.
← →
_silver © (2004-09-27 13:22) [75]Декомпилятор - это программа, которая пытается осуществить процесс,
обратный производимому компилятором: по данному исполняемому файлу
программы, скомпилированному любым высокоуровневым языком, она
стремится выдать программу на языке высокого уровня (причем не обязательно
это будет язык, на котором программа была написана исходно), которая будет
выполнять те же самые функции, что и входная исполняемая программа.<b/>
← →
_silver © (2004-09-27 13:28) [76]2 Игорь Шевченко
Т.е. нет речи о том есть ли в коде asm вставки.
И всё-таки вы говорите "Можно" - я спрашиваю "Почему?".
← →
KSergey © (2004-09-27 13:37) [77]Ну Игорь же давно сказал ключевое слово, которое почему-то не было подхвачено: "функционально аналогичную программу"
← →
_silver © (2004-09-27 13:44) [78]Ладно спорить больше не буду(сказывается психологическое давление голубых значков).
Попробую сново заняться созданием декомпилятора.
Как только получится(или не получится) что-то рабоче расскажу.
← →
Игорь Шевченко © (2004-09-27 13:55) [79]Petr V. Abramov © (27.09.04 13:12) [74]
> машинный код "не помнит" имен переменных, то есть программу
> на пас в том виде, в котором она была написана, декомпилятор
> не восстановит.
И комментариев не вставит. Я в предыдущих постах упоминал про функциональный аналог.
← →
Фёдор Мегатронов (2004-09-28 17:03) [80]ладно я понял что я ламо.
Но как чёрт возьми узнать как работает эта чёртова функция ?
я уже в почти в бешенстве 8) ... над ней сломал голову знакомый, который на асме написал прогу, которая работает с DNS (почти 5000 строк кода)
учителя все знакомые сказали "попробуй какую-нибудь другую функцию" 8) а других функций нет .. сторониие компоненты я использовать не буду из принципа (зачем тогда был сделан ВИН АПИ ?)
Страницы: 1 2 вся ветка
Форум: "Потрепаться";
Текущий архив: 2004.10.17;
Скачать: [xml.tar.bz2];
Память: 0.68 MB
Время: 0.038 c