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