Форум программистов, компьютерный форум CyberForum.ru

открытие и считывание из .dll - C++

Восстановить пароль Регистрация
 
Viktor-dniwe
0 / 0 / 0
Регистрация: 19.09.2013
Сообщений: 6
19.09.2013, 23:56     открытие и считывание из .dll #1
Доброго времени суток. Необходимо с помощью С++ открыть файл формата .dll в бинарном виде. После чего вытащить из этого бинарного файла всю возможную информацию (формат, размер файла, количество строк, символов и т.д.) Заранее благодарен за любую помощь в этом вопросе.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gazlan
2859 / 1807 / 271
Регистрация: 27.08.2010
Сообщений: 4,891
Записей в блоге: 1
20.09.2013, 00:05     открытие и считывание из .dll #2
Цитата Сообщение от Viktor-dniwe Посмотреть сообщение
файл формата .dll в бинарном виде ... вытащить ... формат, размер файла, количество строк
Формат - DLL (по определению).
Размер - GetFileSize function
количество строк - никаких строк в бинарном файле, по определению, нет.
AnyOne697
 Аватар для AnyOne697
134 / 106 / 5
Регистрация: 22.05.2010
Сообщений: 532
20.09.2013, 00:09     открытие и считывание из .dll #3
Там точно такой же формат, как и у exe-файла. Его можно точно так же дизассемблировать, и даже восстановить Си-код. Можно найти и выдрать ресурсы. Ну и любые строковые константы, которые обычно храняться как данные.
gazlan
2859 / 1807 / 271
Регистрация: 27.08.2010
Сообщений: 4,891
Записей в блоге: 1
20.09.2013, 00:44     открытие и считывание из .dll #4
Цитата Сообщение от AnyOne697 Посмотреть сообщение
восстановить Си-код
У вас довольно наивные представления :-)
Viktor-dniwe
0 / 0 / 0
Регистрация: 19.09.2013
Сообщений: 6
20.09.2013, 00:46  [ТС]     открытие и считывание из .dll #5
прошу прощения за некорректное условие поставленное вначале. вот как оно выглядит в "оригинале".

написать программу, использующую сведения о формате файла и выводящую информацию об обрабатываемом файле вида:
для программ: точка входа, контрольная сумма, компилятор, тип ОС, автор, версия и т.п.
для текстов: количество блоков данных, всего абзацев, всего предложений, всего слов, всего уникальных слов, самое часто используемое слово и т.п.
gazlan
2859 / 1807 / 271
Регистрация: 27.08.2010
Сообщений: 4,891
Записей в блоге: 1
20.09.2013, 01:15     открытие и считывание из .dll #6
Цитата Сообщение от Viktor-dniwe Посмотреть сообщение
для программ: точка входа, контрольная сумма, компилятор, тип ОС, автор, версия и т.п.
1. Точка входа может быть 0 (протектор, ресурсная DLL). А так, если протектор не обнулил, читается из заголовка PE-файла.
2. Контрольная сумма - требует уточнения: это о чем? Если стандартная от M$, то CheckSumMappedFile function. Опять же, в заголовке, обычно, не прописана (исключая драйверы).
3. Компилятор - Хи-Хи! Microsoft от Borland, конечно, можно отличить, но в общем случае, задача нетривиальная. Бывает, что и IDA ошибается. А уж версию - только при везении, по косвенным признакам.
4. автор, версия и т.п. - Хлам. Если в файл добавлен VERSIONINFO resource, то читать его, конечно, можно, но достоверность - 0. Трояны, например, обычно уверяют, что сделаны в Microsoft (даже, если написаны на Delphi).

для текстов - все примитивно (если это, действительно, plain ASCII). Задаете набор разделителей (НЕбукв) и считаете всю нужную статистику. Для подсчета слов создаете словарь (либо слов, либо хэшей).
Например, в моем WordLister (список уникальных слов, размер, счетчик встречаемости) используется SHA-160.
Viktor-dniwe
0 / 0 / 0
Регистрация: 19.09.2013
Сообщений: 6
20.09.2013, 01:30  [ТС]     открытие и считывание из .dll #7
Если бы только я сам знал о чем тут "Контрольная сумма". Задание было дано по принципу: "Вот ваше задание.. бог в помощь".
AnyOne697
 Аватар для AnyOne697
134 / 106 / 5
Регистрация: 22.05.2010
Сообщений: 532
20.09.2013, 01:45     открытие и считывание из .dll #8
Цитата Сообщение от gazlan Посмотреть сообщение
У вас довольно наивные представления :-)
А кто ж спорит =) Хотя, на самом деле, даже delphi-код, скомпилированный в машинный, очень легко дезассемблируется и потом, если повезёт, получиться Си-шный код. Конструкции те же самые, суть одна. Первые компиляторы Си++ сначала транслировали Си++ код в Си и только потом его компилировала (а это ещё я наивный). Наконец - Си это высокоуровневый прообраз ассмеблера. Почти всё (если не всё) что можно на ассемблере i468 можно и на Си.
Цитата Сообщение от gazlan Посмотреть сообщение
Точка входа может быть 0 (протектор, ресурсная DLL). А так, если протектор не обнулил, читается из заголовка PE-файла.
Ну значит и показать нуль (ну или определить отсутствии).
Цитата Сообщение от gazlan Посмотреть сообщение
Контрольная сумма - требует уточнения: это о чем? Если стандартная от M$, то CheckSumMappedFile function. Опять же, в заголовке, обычно, не прописана (исключая драйверы).
А самим посчитать?
Цитата Сообщение от gazlan Посмотреть сообщение
Компилятор - Хи-Хи! Microsoft от Borland, конечно, можно отличить, но в общем случае, задача нетривиальная. Бывает, что и IDA ошибается. А уж версию - только при везении, по косвенным признакам.
Сам улыбнулся. Впрочем, сами же ссылку дали.
Цитата Сообщение от gazlan Посмотреть сообщение
для текстов - все примитивно (если это, действительно, plain ASCII). Задаете набор разделителей (НЕбукв) и считаете всю нужную статистику. Для подсчета слов создаете словарь (либо слов, либо хэшей).
Всё так. Лучше, конечно, хэшей, но для Си++ можно и проще - std::map < String, uint > dict;

Добавлено через 2 минуты
Алсо, вот. Глубоко не смотрел, но вроде то.
gazlan
2859 / 1807 / 271
Регистрация: 27.08.2010
Сообщений: 4,891
Записей в блоге: 1
20.09.2013, 02:21     открытие и считывание из .dll #9
Цитата Сообщение от AnyOne697 Посмотреть сообщение
даже delphi-код, скомпилированный в машинный, очень легко дезассемблируется и потом, если повезёт, получиться Си-шный код
Не повезет.

Вот здесь, классическая работа Cristina Cifuentes по декомпиляции: The dcc Decompiler (1991)

А здесь дальнейшее развитие тезисов ее диссертации: Hex-Rays Decompiler: Overview (2013)

We are pleased to present our flagship product, the Hex-Rays Decompiler, which brings binary software analysis within reach of millions of programmers. It converts executable programs into a human readable C-like pseudocode text
Так что, "human readable C-like pseudocode" - максимум, чего удалось добиться за эти годы.
AnyOne697
 Аватар для AnyOne697
134 / 106 / 5
Регистрация: 22.05.2010
Сообщений: 532
20.09.2013, 10:28     открытие и считывание из .dll #10
Цитата Сообщение от gazlan Посмотреть сообщение
Так что, "human readable C-like pseudocode" - максимум, чего удалось добиться за эти годы.
Спасибо, но... Я не нашёл там ни слова о делфи. А ни Си, ни Делфи не вставляет в программу достаточное количество метаинформации. Больше, чем на это рассчитывать как-то не приходиться.
В рамках оффтопа, можно сказать, что C# и Java очень неплохо дизассемблируются благодаря абстрактному слою между байт-кодом и исполняющей машиной, который использует дополнительную мета-информацию и оперирует более абстрактными объектами, особенно C# с его CIL.
gazlan
2859 / 1807 / 271
Регистрация: 27.08.2010
Сообщений: 4,891
Записей в блоге: 1
20.09.2013, 11:05     открытие и считывание из .dll #11
Цитата Сообщение от AnyOne697 Посмотреть сообщение
Я не нашёл там ни слова о делфи
Вот здесь попытка разаработки Delphi-декомпилятора: IDR (Interactive Delphi Reconstructor)
Как я понимаю, проект еще очень далек от завершения.

Конечной целью проекта является разработка программы, способной восстановить большую часть исходных Delphi-текстов из скомпилированного файла, но пока IDR, как и другие Delphi-декомпиляторы, сделать этого не может. Тем не менее, IDR может значительно облегчить такой процесс. По сравнению с другими декомпиляторами анализ, выполненный IDR, отличается наибольшей полнотой и достоверностью.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.09.2013, 09:46     открытие и считывание из .dll
Еще ссылки по теме:

Запись из внедренной dll в другую dll этого процесса C++
Как узнать зависимость DLL-ки от других DLL-ек? C++
C++ Как подключить dll на C# к проекту (dll) на С++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
AnyOne697
 Аватар для AnyOne697
134 / 106 / 5
Регистрация: 22.05.2010
Сообщений: 532
21.09.2013, 09:46     открытие и считывание из .dll #12
Цитата Сообщение от gazlan Посмотреть сообщение
Конечной целью проекта является разработка программы, способной восстановить большую часть исходных Delphi-текстов из скомпилированного файла, но пока IDR, как и другие Delphi-декомпиляторы, сделать этого не может. Тем не менее, IDR может значительно облегчить такой процесс. По сравнению с другими декомпиляторами анализ, выполненный IDR, отличается наибольшей полнотой и достоверностью.
Да я уже написал, что практически ни один язык "среднего" уровня (компилируемый в непосредственно машинный код) не подлежит точной декомпиляции, в любом случае что-то будет утеряно, что-то будет преобразовано как минимум из-за оптимизаций компилятора. Но, это не значит, что мы не можем получить аналогичный код. А предсказывать, был ли там цикл, и его раскрыл компилятор, и был ли там класс, и его преобразовал компилятор сродни гаданию на кофейной гущи.
Yandex
Объявления
21.09.2013, 09:46     открытие и считывание из .dll
Ответ Создать тему
Опции темы

Текущее время: 20:05. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru