Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на Delphi


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Delphi

Выпуск № 778
от 12.04.2007, 15:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 461, Экспертов: 89
В номере:Вопросов: 3, Ответов: 11


Вопрос № 81362: Здравствуйте. Подскажите пожалуйста как можно декомпилировать *.exe файл написаный на Дельфи....
Вопрос № 81432: Уважаемые эксперты! Вопрос от начинающего изучение delphi. При размещении на форме элемента DBLookupComboBox при запуске формы список значений не раскрывается полностью, а показывает только одно значение. ...
Вопрос № 81439: Здравствуйте! Есть задача: программа висит в фоне и ждет комбинации клавишь (допустим Shift+1), при нажатии которых в активное приложение нужно ввести определенный тект (или нажатие клавишь). Тоесть у нас запущен блокнот нажимаем комбинацию Shift...

Вопрос № 81.362
Здравствуйте.
Подскажите пожалуйста как можно декомпилировать *.exe файл написаный на Дельфи.
Отправлен: 06.04.2007, 20:14
Вопрос задал: Шмаров Сергей (статус: 3-ий класс)
Всего ответов: 6
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Устинов Сергей
Здравствуйте, Шмаров Сергей!

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

Удачи!
---------
Ждешь квалифицированного ответа? Задай правильно вопрос!
Ответ отправил: Устинов Сергей (статус: Практикант)
Ответ отправлен: 06.04.2007, 20:19

Отвечает: Menand
Здравствуйте, Шмаров Сергей!

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

а вот сами процедуры действительно нельзя получить никак
Ответ отправил: Menand (статус: 3-ий класс)
Ответ отправлен: 06.04.2007, 20:26

Отвечает: Gh0stik
Здравствуйте, Шмаров Сергей!

Полный текст программы в исходном виде из exe'шника восстановить не удастся. Если exe'шник был скомпилирован со включенными опциями "Debug information" и "Local symbols", то можно попробовать получить более-менее удобочитаемый асм'овский код, где у переменных и процедур будут их нормальные исходные имена.
Компилятор сохраняет текст, описывающий форму(формы) в секции ресурсов exe файла. Можно взять что-нибудь вроде Restorator'а и посмотреть...
И путем этой же программы можно восстановить часть ресурсов.

Good Luck!!!
---------
Господь Бог - это всего лишь сверхмощный генератор случайных чисел, в соответствии с которыми сочетаются события на Земле. Генератор случайных чисел - и только.
Ответ отправил: Gh0stik (статус: Профессионал)
Украина, Славянск
Организация: Славянский государственный педагогический университет (Кафедра алгебры)
ICQ: 289363162
----
Ответ отправлен: 06.04.2007, 20:38

Отвечает: Lomer
Здравствуйте, Шмаров Сергей!
Декомпиляция exe-шника в Delphi невозможна, но возможно вытащить из него имена классов, формы и используемые компоненты. Функции в код Object-Pascal невозможно перевести, но утилита DeDe (можно скачать с cracklab.ru) генерирует *.pas файлы, где вместо функций в комментарий заключен их дизассемблерный листинг с примечаниями, зачастую очень полезными. (Скажу по секрету: я уже крякнул одну прогу после исследования её DeDe :)
И еще: часто программы бывают запакованы. В большинстве случаев они распаковываются Quick Unpack'ом или Stripper'ом.
Ответ отправил: Lomer (статус: 3-ий класс)
Ответ отправлен: 06.04.2007, 20:43

Отвечает: Iksmensp
Здравствуйте, Шмаров Сергей!

Для начала сразу скажу, что восстановить исходный код в точности каким он был однозначно невозможно, так как не существует в мире такого декомпилятора, который бы смог сотворить такое.
Даже если мы и достигнем какого-то успеха в декомпиляции исполняемого файла, то получим уже другой синтаксис программы. Данная проблема связана с тем, что при компиляции практически идентичные куски кода могут быть скомпилированы в разные последовательности машинных команд (ASM), которые присутствуют в .exe файле.

Когда же применяется декомпиляция ? Для этого существует довольно много причин. Вот некторые из них:

Восстановление исходного кода;
Перенос приложения на другую платформу;
Определение наличия вирусов в коде программы или вредоносного кода;
Исправление ошибок в программе, в случае, если создатель приложения не собирается этого делать :)

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

А теперь к практике: можно попытаться декомпилировать *.exe файлс помощю нескольких программ:

DeDe

DeDe довольно шустрая программка, позволяющая анализировать экзешники, скомпилированные в Delphi. После декомпиляции DeDe даёт Вам следующее:
Все dfm файлы. Вы сможете открывать их и редактировать в Delphi Все объявленные методы с хорошо комментированным кодом на ассемблере с ссылками на строки, импортированных функций, методов и компонент в юните, блоки Try-Except и Try-Finally.
Вы можете создать папку Delphi проекта со всеми файлами dfm, pas, dpr. Не забудьте, что pas файлы содержат ассемблерный код.
Revendepro

MRIP

Позволяет извлекать из Delphi приложения любые ресурсы: курсоры, иконки, dfm файлы, pas файлы и т.д. Но главная его особенность - это способность извлекать файлы, хранящиеся в других файлах.
Поддерживается более 100 форматов файлов. MRip работает под DOS.

Exe2Dpr

Эта программа может восстановить частично потерянные исходники проекта. Не имеет интерфейса и работает с командной строки, например: 'exe2dpr [-o] exeFile' ( исходники проекта будут созданы в текущей директории).

Набирайте в поиске название этих программ и скачивайте их. Надеюсь я Вам помог.
Ответ отправил: Iksmensp (статус: 2-ой класс)
Ответ отправлен: 06.04.2007, 20:46

Отвечает: SashaFAN
Здравствуйте, Шмаров Сергей!
Никак. Это не возможно
Ответ отправил: SashaFAN (статус: 1-ый класс)
Ответ отправлен: 07.04.2007, 15:07


Вопрос № 81.432
Уважаемые эксперты! Вопрос от начинающего изучение delphi. При размещении на форме элемента DBLookupComboBox при запуске формы список значений не раскрывается полностью, а показывает только одно значение.
Отправлен: 07.04.2007, 13:16
Вопрос задал: Василий Шабашов (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Lomer
Здравствуйте, Василий Шабашов!
Используйте ComboBox со вкладки standard или DBComboBox.
Ответ отправил: Lomer (статус: 3-ий класс)
Ответ отправлен: 07.04.2007, 13:59

Отвечает: Dragon
Здравствуйте, Василий Шабашов!
Здравствуйте, Василий Шабашов!
DBLookupComboBox.DropDown;

При запуске программы сразу разворачивается.
Ответ отправил: Dragon (статус: 1-ый класс)
Ответ отправлен: 07.04.2007, 14:13

Отвечает: Алексеев Александр Владимирович
Здравствуйте, Василий Шабашов!

Не знаком с элементом DBLookupComboBox, но у обычного ComboBox есть свойство Dropdown и если его поставить в true то ComboBox разворачивается на все вниз.
Ответ отправил: Алексеев Александр Владимирович (статус: 1-ый класс)
Ответ отправлен: 07.04.2007, 23:24


Вопрос № 81.439
Здравствуйте! Есть задача: программа висит в фоне и ждет комбинации клавишь (допустим Shift+1), при нажатии которых в активное приложение нужно ввести определенный тект (или нажатие клавишь).
Тоесть у нас запущен блокнот нажимаем комбинацию Shift+1 и у нас в блокноте появляется надпись "Привет".
И еще вопрос, можно ли в неактивное приложение послать команды с клавиатуры, например ввести какой-либо текст, или нажать клавишу F1 допустим?
Отправлен: 07.04.2007, 14:25
Вопрос задал: Serj.a (статус: 2-ой класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Решетник Д
Здравствуйте, Serj.a!
Для того, чтобы срабатывали комбинации, нужно копать в сторону registerhotkey, unregisterhotkey, WM_HOTKEY
Далее (после регистрации комбинации) вы получаете сообщение через WM_HOTKEY о нажатии комбинации клавиш. Для того, чтобы написать текст можно использовать
SendMessage. И посылать сообщение, например, WM_CHAR (или пару сообщение WM_KEYDOWN, WM_KEYUP). И так по букве отсылать в активное окно (GetActiveWindow()) сообщение, где паркаметром будет одна из букв текста.
---------
Жизнь коротка, чтобы писать на ассемблере
Ответ отправил: Решетник Д (статус: Студент)
Ответ отправлен: 07.04.2007, 15:44
Оценка за ответ: 4
Комментарий оценки:
Спасибо, примерно так и представлял. Только у меня проблема с горячими клавишами, примеры, которые лежат в сети не работают. Тоесть все компилируется, но хоткей не срабатывает.
Нашел компонент HotKeyManager, там работают хоткеи, так что буду разбираться с посылкой сообщений.

Отвечает: Iksmensp
Здравствуйте, Serj.a!

Можно воспользоваться программой, которая приведена ниже. Там я все подробно попытался обьяснить. Алгоритм ее работы такой: При старте приложениявы видете окно с Edit, Memo and Button. В Edit вводим заголовок, в Memo текст. При нажатии Button форма скрываеся, И выполняеся поиск окна блокнота, а как найдется то сжет нажатия комбинации клавиш. А после этого записывает в блокнот с помощью цикла.
Используем функции:
getasynckeystate(65) - возвращает 1 если нажата клавиша 'A'(в скобках указан код клавиши);

length(s) - возвращает длину строки s;

for i:=1 to length(s) do begin
sendmessage(w,WM_CHAR,Word(s[i]), 0);
end; - цикл посылания сообщения блокноту для записи текста из Memo

Надеюсь, что помог вам и достаточно доступно объяснил Вам ваш вопрос.

Приложение:

Ответ отправил: Iksmensp (статус: 2-ой класс)
Ответ отправлен: 08.04.2007, 12:13
Оценка за ответ: 5
Комментарий оценки:
Спасибо, Iksmensp! Какраз подходит для моего случая.


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Email: support@rusfaq.ru, тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.47 от 06.04.2007
Яндекс Rambler's Top100

В избранное