Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 739

/ вопрос открыт /

Здравствуйте, уважаемые эксперты!
реально ли декомпилировать ехе файл с восстановлением полныx текстов модулей проектов? на сайте есть прога которая восстанавливает только формы, а как же бытъ с процедурами?

Ilia Ermakov Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Ilia Ermakov (статус: 1-ый класс)
Вопрос отправлен: 13 июля 2007, 12:33
Состояние вопроса: открыт, ответов: 2.

Ответ #1. Отвечает эксперт: Вадим К

Здравствуйте, Ilia Ermakov!
Для .NET языков ответ такой "вполне можно"
Для нативных языков (Делфи, С/С++) ответ однозначно нет. Можно восстановить частично, если применять мозги. Но это будет код, который эквивалентен, но не равен исходному. Спросите почему? для начала нужно понять, что о именнах локальных переменных и их типах ничего не сохраняется в коде. Тоесть есть регист, есть ячейка памяти, но нет переменной цикла i,j. С объектами дело обстоит лучше - тут уже можно опознать объект, а потом восстановить названия его методов и свойст. для общеизвестных процедур применяют так называемый сигнатурный поиск - таким образом их можно идентифицировать.

Ответ отправил: Вадим К (статус: Академик)
Время отправки: 13 июля 2007, 12:48
Оценка за ответ: 5

Комментарий к оценке: ок, еще вопросик. значит можно в модуле в принципе хранить приватную инфу: пароли ключи и никто туда не залезет? или может как по-другому надо делать?

Ответ #2. Отвечает эксперт: Матвеев Игорь Владимирович

Здравствуйте, Ilia Ermakov!
Конечно никакую инфу там хранить нельзя, разве что хеши или в шифрованном виде.

Что же косается декомпиляции - декомпилировать что-то сложнее notepad'а так, чтобы исходники потом можно было скомпилировать в рабочий код невозможно. Тому есть ряд причин: отсутствие информации о структурах, информации о пользовательских типах, и, тем более объектах, для delphi RTTI содержит совсем не все что нужно. Кроме того, многие операции, как сравнение, деление, case, with оптимизируются компилятором, что сильно усложняет работу декомпилятора.

Однако энтузиастами (наверное дети милионеров, которые могут себе позволить тратить кучу времени на это!) написанно много дкомпиляторов/дизассемблеров. Для Delphi DeDe http://www.balbaro.com/ - советую посмотреть, интересная вещь - восстанавливает Delphi проекты в готовый набор исходников (*.pas; *.dfm и т.д.), код процедур заменяется ассемблерным листингом и вообще компилироваться эти исходники, естественно, не будут.
Но в деле реверсинга/крекинга/исследования может помочь.

Ответ отправил: Матвеев Игорь Владимирович (статус: Студент)
Время отправки: 13 июля 2007, 14:23
Оценка за ответ: 4

Комментарий к оценке: http://www.balbaro.com/ - у меня не доступен. А все-таки насчет литературы, где данные хранить не подскажете?

Мини-форум вопроса

Всего сообщений: 4; последнее сообщение — 14 июля 2007, 03:00; участников в обсуждении: 3.
Вадим К

Вадим К (статус: Академик), 13 июля 2007, 13:32 [#1]:

а вот это уже ошибка. Не смешивайте данные и код. Нормальный дизассемблер (IDA) данные быстро отобразит. Надо только знать, как они должны выглядеть и найти их не проблема. Другое дело, если вы их храните в неявном виде.
Я несколько раз "подбирал ключик реестрации" для софтин просто открыв exe блокнотом и просмотрев то что получилось.
Тоесть, если в коде вы используете строку, то практически гарантировано, что её потом можно найти в коде.
>>никто туда не залезет
Если ценность информации будет большой - залезут.
Галочка "подтверждения прочтения" - вселенское зло.
Ilia Ermakov

Ilia Ermakov (статус: 1-ый класс), 13 июля 2007, 13:42 [#2]:

Как в этих случаях поступают (то есть где даннье хранить и как их кодировать?). Может литературу подскажете?
Вадим К

Вадим К (статус: Академик), 13 июля 2007, 13:52 [#3]:

Это насколько глобальная задача. Тут нет единственно верного решения. Кто то хранит в реесте, предварительно обработав криптоалгоритмами. кто то хранит на Hasp-ключе.
Советую зайти на кракерские сайты и почитать о том, как они ломают. потом написать пару своих прог и попробывать их сломать (взлом своих же прог абсолютно законен!). Потом у вас появиться представление о том, как делать защиты.
Галочка "подтверждения прочтения" - вселенское зло.
Матвеев Игорь Владимирович

Матвеев Игорь Владимирович (статус: Студент), 14 июля 2007, 03:00 [#4]:

Здесь важен принцип: если пароли хранятся на стороне пользователя - это всегда слабая защита. Вам нужно либо искать другую логику, либо максимально мешать исследованию программы.
Насчет логики: допустим у Вас есть программа, которую Вы хотите распространять с ограниченной функциональностью, а после регистрации (ввода пароля) давать полнае функции. В таком случае я всегда рекомендую шифровать часть кода программы (с ограниченными функциями) симметричным алгоритмом для каждой копии, которую собираетесь распространять, потом вычисляете CRC32 полученного файла и добавляете в специальную таблицу клиентов запись CRC32-Ключ шифрования-Информация о получателе. В таком случае если кто-то хочет получить полную функциональность программа высылает CRC32 файла программы, Вы берете ключ шифрования и отсылаете ему. Программа расшифровывает часть часть своего кода, проверяет его на валидность, полсе чего запрещенные функции можно исполнять.
В то же время, если Вы заметите, скажем в сети, выложенную копию программы с ключем - Вы всегда сможете определить кто является ее владельцем. Я Вас уверяю, такую защиту невозможно сломать, т.е. остается только патчинг (прямая замена зашифрованных функций и изменение функий проверки CRC), а также распространение купленной программы с ключом. Оба варианта, как Вы понимаете недостойны настоящего крекера.

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

Если же Вам все-таки нужно хранить пароли в чистом виде, нужно иметь ввиду, что пароли эти все-равно можно получить, Ваша задача - усложнить этот процесс. Почитайте книжку Дмитрия Склярова - "Искусство защиты и взлома инфорации".

P.S. На счет http://www.balbaro.com/ - только эта ссылка есть а About диалоге, ищите.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:26
Выполнено за 0.03 сек.