LINUX.ORG.RU

Декомпилировать exe файл написанный на Delphi

 


1

2

Доброго времени суток! Помогите советом. У меня на пк стоит Kali Linux. Меня попросили найти баг в программе написанной на Delphi и я не знаю каким декомпилятором воспользоватся. Гугл ничего внятного не выдал (может я не верно задал запрос, такое тоже может быть). Посоветуйте какая программа подойдет для декомпиляции исполняемого exe файла, если есть уже предустановленная в системе то даже проще (я не пользуюсь большой частью программ по ненадобности). Заранее спасибо за ответ. Готов ответить на уточняющие вопросы.



Последнее исправление: cetjs2 (всего исправлений: 2)
Ответ на: комментарий от Zhbert

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

tip4ik32
() автор топика

Секундочку. В чём баг? В алгоритме, или в отображении? Если тупо не хватает колонок с данными в таблице - ты их никак не добавишь, хоть обдекомпилируйся.

tiinn ★★★★★
()
Ответ на: комментарий от Zhbert

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

tip4ik32
() автор топика
Ответ на: комментарий от tip4ik32

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

Zhbert ★★★★★
()
Ответ на: комментарий от tiinn

Сам баг в алгоритме, скорей всего, на сколько мне известно, во время выполнения, а именно в момент сильно скачка (программа разработана для проведение экспериментов) происходит зависание, и мне хотелось бы посмотреть структуру вызова файлов и узнать какой именно файл за это отвечает

tip4ik32
() автор топика
Ответ на: комментарий от Anoxemian

меня попросили посмотреть на этот баг и по возможности его исправить, получится хорошо, нет ну и ладно, но попытаться стоит

tip4ik32
() автор топика
Ответ на: комментарий от Legioner

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

tip4ik32
() автор топика

Is True Decompilation Possible?

No, of course not. Fully automated decompilation is not possible - no decompiler could exactly reproduce the original source code.

When a Delphi project is compiled and linked to produce a standalone executable file, most of the names used in the program are converted to addresses. This loss of names means that a decompiler would have to create unique names for all the constants, variables, functions, and procedures. Even if a certain degree of success is achieved, the generated «source code» lacks meaningful variable and function names. Obviously, source language syntax no longer exists in the executable. It would be very difficult for a decompiler to interpret the series of machine language instructions (ASM) that exist in an executable file and decide what the original source instruction was.

gremlin_the_red ★★★★★
()
Ответ на: комментарий от tip4ik32

Тебе надо установить Windows XP, поставить туда Delphi 7 (или на какой там твой проект написан), если использованы нестандартные компоненты - найти, скачать и установить их, потом открыть программу в Delphi, скомпилировать, запустить в режиме отладки и остановить программу в нужный момент. И в отладчике уже разбираться со своими вопросами.

Кали, линукс, машинные коды, ассемблер тебе для этого не нужны.

Legioner ★★★★★
()
Последнее исправление: Legioner (всего исправлений: 1)
Ответ на: комментарий от tip4ik32

Тогда сразу забей, это задача не для начинающего.

Для очистки совести скачай IDA Free, декомпилируй, посмотри с умным видом на миллион инструкций ассемблера и забей.

Legioner ★★★★★
()
Последнее исправление: Legioner (всего исправлений: 2)
Ответ на: комментарий от Anoxemian

ладно, спасибо за советы, в любом случаи попытаться разобраться стоит

tip4ik32
() автор топика
Ответ на: комментарий от Zhbert

во время выполнения эксперимента измеряется давление в барах, дальше оно по формулам преобразуется в амперы, в момент взрыва, идет скачек давления и программа зависает, а файлы которые есть в проекте с расширениями .pas, .ini, .dfm, .dcu, .ddp, .dpr, .res.

tip4ik32
() автор топика
Ответ на: комментарий от Legioner

увы это невозможно, я и сам понимаю что без исходников практически невозможно что либо сделать, но их нету

tip4ik32
() автор топика
Ответ на: комментарий от tip4ik32

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

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

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

Нужны исходники программы.

.pas, .ini, .dfm, .dcu, .ddp, .dpr, .res.

Покажи содержимое *.pas. Это очень похоже на исходники.

*.dpr - это проект Delphi.

Zhbert ★★★★★
()
Последнее исправление: Zhbert (всего исправлений: 2)
Ответ на: комментарий от Legioner

ну в этом деле я новенький и не все понял, раз это исходники то в каком-то из них и есть функция с багом, я думал может дизасемблировав ехе файл я пойму какой именно файл отвечает за это и не искать в сотнях строках кода

tip4ik32
() автор топика
Ответ на: комментарий от tip4ik32

файлы которые есть в проекте с расширениями .pas

😒

Turbid ★★★★★
()
Ответ на: комментарий от tip4ik32

Дизассемблировав ты получишь миллионы инструкций ассемблера. Найти в них что-то куда сложней. А сотни строк кода можно прочитать за пару часов.

Legioner ★★★★★
()
Ответ на: комментарий от tip4ik32

Если это исходники, то тебе дали верный совет: ставишь винду с Delphi, запускаешь в режиме дебага (это такой режим, когда дебаггер показывает состояние всех переменных и так далее), и долго и упорно ловишь свой баг.

А в программировании ты что-нибудь понимаешь?

Zhbert ★★★★★
()
Ответ на: комментарий от Legioner

Всё ещё проще, даже читать особо не надо. Смотришь, после нажатия какой кнопочки у тебя баг, Run to cursor тудысь и по Step into шуруешь до бага. И там уже читаешь код и чешешь тыковку.

gremlin_the_red ★★★★★
()
Ответ на: комментарий от tip4ik32

Это немного. Причем тебе главное найти то место, где падает. А для этого достаточно запустить в делфи с дебаггером, поймать момент падения и… ну ты понял.

Zhbert ★★★★★
()
Ответ на: комментарий от tip4ik32

Да, но чтобы подсказать, надо хотя бы чтобы ты нашел, в каком конкретно месте проиходит падение. Просто так смотреть в 2000 строк не решение.

Zhbert ★★★★★
()
Ответ на: комментарий от tip4ik32

Сам баг в алгоритме, скорей всего, на сколько мне известно, во время выполнения, а именно в момент сильно скачка (программа разработана для проведение экспериментов) происходит зависание, и мне хотелось бы посмотреть структуру вызова файлов и узнать какой именно файл за это отвечает

А, ну, тогда всё не безнадёжно. Будь готов получить ответ вида «Происходит взаимоблокировка процессов при таких-то входных данных». Потом, конечно, тебя попросят баг исправить, а ты, конечно, разведёшь руками.

tiinn ★★★★★
()
Ответ на: комментарий от Zhbert

я постараюсь своими силами разобраться, в крайнем случаи спрошу вас

tip4ik32
() автор топика
Ответ на: комментарий от tip4ik32

меня попросили посмотреть на этот баг и по возможности его исправить

У тебя должны быть исходники этой программы. Или у того кто тебя попросил помочь. Вот проси их, и запускай в отладчике и добавь логирование чтобы отыскать причину бага.

Иначе ты врешь и просто пытаешься хакнуть что-то.

fsb4000 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.