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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Viktor-dniwe
0 / 0 / 0
Регистрация: 19.09.2013
Сообщений: 6
#1

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

19.09.2013, 23:56. Просмотров 1017. Ответов 11
Метки нет (Все метки)

Доброго времени суток. Необходимо с помощью С++ открыть файл формата .dll в бинарном виде. После чего вытащить из этого бинарного файла всю возможную информацию (формат, размер файла, количество строк, символов и т.д.) Заранее благодарен за любую помощь в этом вопросе.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.09.2013, 23:56
Здравствуйте! Я подобрал для вас темы с ответами на вопрос открытие и считывание из .dll (C++):

Открытие файла и считывание из него - C++
Здравствуйте! Пишу курсовую работу. В поставленной задаче данные нужно считать из файла, имя которого указывается из окна. Прикол в...

Написание dll - библиотеки и ее открытие средствами Delphi - C++
Есть некоторая dll-библиотека, которая вычисляет площадь и периметр n-угольника. Лабораторная была на Delphi, решил попробовать написать...

Кто может поделиться файлами ogg.dll, vorbis.dll и vorbisfile.dll - 32-х и 64-битными версиями? - C++
Движок перевожу на платформу Win64 и нужно, чтобы разрядность ЕХЕ и DLL совпадали, а в интернете искал 64-битные версии ogg.dll, vorbis.dll...

Заменить считывание с клавиатуры на считывание из файла - C++
Помогите пожалуйста, ни разу не работал со считыванием из файла поэтому не понимаю как и что делать. Почитал в интернете, попробовал, не...

Точка входа в процедуру InterlockedCompareExchange64 не найдена в библиотеке DLL KERNEL32.DLL - C++
День добрый! При запуске моей программы (много моего кода + много разных сторонних dll) на WinXP SP2, получаем соответствующую ошибку...

Добавление своей dll в список dll подгружаемых процессом чужого процесса - C++
Вообще вопрос такой,как можно внедрить свою dll в список Import чужого не запущенного процесса?Не изменяя структуры файла.

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

написать программу, использующую сведения о формате файла и выводящую информацию об обрабатываемом файле вида:
для программ: точка входа, контрольная сумма, компилятор, тип ОС, автор, версия и т.п.
для текстов: количество блоков данных, всего абзацев, всего предложений, всего слов, всего уникальных слов, самое часто используемое слово и т.п.
0
gazlan
3132 / 1908 / 285
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 1
20.09.2013, 01:15 #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.
1
Viktor-dniwe
0 / 0 / 0
Регистрация: 19.09.2013
Сообщений: 6
20.09.2013, 01:30  [ТС] #7
Если бы только я сам знал о чем тут "Контрольная сумма". Задание было дано по принципу: "Вот ваше задание.. бог в помощь".
0
AnyOne697
134 / 106 / 5
Регистрация: 22.05.2010
Сообщений: 533
20.09.2013, 01:45 #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 минуты
Алсо, вот. Глубоко не смотрел, но вроде то.
0
gazlan
3132 / 1908 / 285
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 1
20.09.2013, 02:21 #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" - максимум, чего удалось добиться за эти годы.
1
AnyOne697
134 / 106 / 5
Регистрация: 22.05.2010
Сообщений: 533
20.09.2013, 10:28 #10
Цитата Сообщение от gazlan Посмотреть сообщение
Так что, "human readable C-like pseudocode" - максимум, чего удалось добиться за эти годы.
Спасибо, но... Я не нашёл там ни слова о делфи. А ни Си, ни Делфи не вставляет в программу достаточное количество метаинформации. Больше, чем на это рассчитывать как-то не приходиться.
В рамках оффтопа, можно сказать, что C# и Java очень неплохо дизассемблируются благодаря абстрактному слою между байт-кодом и исполняющей машиной, который использует дополнительную мета-информацию и оперирует более абстрактными объектами, особенно C# с его CIL.
0
gazlan
3132 / 1908 / 285
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 1
20.09.2013, 11:05 #11
Цитата Сообщение от AnyOne697 Посмотреть сообщение
Я не нашёл там ни слова о делфи
Вот здесь попытка разаработки Delphi-декомпилятора: IDR (Interactive Delphi Reconstructor)
Как я понимаю, проект еще очень далек от завершения.

Конечной целью проекта является разработка программы, способной восстановить большую часть исходных Delphi-текстов из скомпилированного файла, но пока IDR, как и другие Delphi-декомпиляторы, сделать этого не может. Тем не менее, IDR может значительно облегчить такой процесс. По сравнению с другими декомпиляторами анализ, выполненный IDR, отличается наибольшей полнотой и достоверностью.
0
AnyOne697
134 / 106 / 5
Регистрация: 22.05.2010
Сообщений: 533
21.09.2013, 09:46 #12
Цитата Сообщение от gazlan Посмотреть сообщение
Конечной целью проекта является разработка программы, способной восстановить большую часть исходных Delphi-текстов из скомпилированного файла, но пока IDR, как и другие Delphi-декомпиляторы, сделать этого не может. Тем не менее, IDR может значительно облегчить такой процесс. По сравнению с другими декомпиляторами анализ, выполненный IDR, отличается наибольшей полнотой и достоверностью.
Да я уже написал, что практически ни один язык "среднего" уровня (компилируемый в непосредственно машинный код) не подлежит точной декомпиляции, в любом случае что-то будет утеряно, что-то будет преобразовано как минимум из-за оптимизаций компилятора. Но, это не значит, что мы не можем получить аналогичный код. А предсказывать, был ли там цикл, и его раскрыл компилятор, и был ли там класс, и его преобразовал компилятор сродни гаданию на кофейной гущи.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.09.2013, 09:46
Привет! Вот еще темы с ответами:

Dll файл в exe файле. Вшить dll libcurl - C++
Проблема такая что приходится таскать всегда libcurl.dll с собой. Надо все носить в одном exe. Enigma Virtual Box использовать нельзя,...

Как узнать путь к загруженной DLL из самой DLL? - C++
Создаю небольшую программку в папке c:/test/app/, есть DLL в папке c:/test/dll/. В коде самой dll, после её подгрузки в программу, можно...

Запись из внедренной dll в другую dll этого процесса - C++
main.cpp #include &lt;Windows.h&gt; extern int writeprocess(); DWORD WINAPI MainThread(LPVOID lpParam) { ...

При компиляции DLL-проекта не создается DLL-ка - C++
Добрый день. создал в Visual Studio 2010 проект C+= типа DLL. В файл dllmain.cpp вставил вот такой код: // test.cpp: определяет...


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

Или воспользуйтесь поиском по форуму:
12
Yandex
Объявления
21.09.2013, 09:46
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru