Как вытащить dll из exe

Обновлено: 04.07.2024

Иногда возникает ситуация при которой необходимо извлечь иконку из EXE и DLL-файла. Windows дает возможность использовать для ярлыков и программ иконки встроенные в файлы DLL и EXE, но не позволяет извлечь их и сохранить в формате ICO или PNG.

В этой статье мы рассмотрим несколько бесплатных программ, которые могут извлечь иконку из EXE и DLL файлов в Windows 10.

Файл ICO

В Windows 10 есть свои иконки, которые находятся в файлах:

  • C:\Windows\system32\shell32.dll
  • C:\Windows\system32\imageres.dll
  • C:\Windows\system32\moricons.dll
  • C:\Windows\explorer.exe

Как извлечь иконку из EXE и DLL

Чтобы извлечь иконку из файла, вам потребуется сторонний софт. Для этого есть множество утилит. Я расскажу о трех надежных бесплатных программах, которые я использую.

Начнем с утилиты Resource Hacker.

Извлечь иконку из EXE или DLL с помощью Resource Hacker

Шаг 1: Скачайте Resource Hacker.

Шаг 2: Установите приложение.

Шаг 3: Запустите приложение Resource Hacker.

Открыть файл иконок Resource Hacker

Шаг 5: На левой панели разверните группу значков и перейдите к нужному значку (используйте область предварительного просмотра справа).

Шаг 7: Выберите папку для сохранения файла ICO и нажмите Сохранить.

Теперь значок извлечен и сохранен в файле *.ico:

Несколько советов по использованию Resource Hacker

Некоторым пользователям может быть сложно использовать Resource Hacker. Пара альтернативных приложений: IconViewer и IcoFX, позволят сохранять значков в других форматах изображений, включая PNG и BMP.

Извлечение иконки из файлов EXE и DLL с помощью IconViewer

Шаг 1: Скачайте IconViewer (есть как 32-битные, так и 64-битные версии программы).

Шаг 2: Установите приложение IconViewer.

Шаг 3 Откройте проводник и откройте папку, содержащую файл, из которого хотите извлечь иконки. Например, перейдите в c:\Windows\System32.

Шаг 4: Щелкните правой кнопкой мыши по файлу с иконками, например, «shell32.dll» и выберите «Свойства» из контекстного меню.

Шаг 5: Перейдите на вкладку «Icons», добавленную приложением IconViewer.

Шаг 6: Выберите значок, который надо извлечь, и щелкните значок дискеты, чтобы сохранить его.

Шаг 7: Укажите папку назначения, имя файла и выберите формат файла (ICO, PNG или BMP). Далее нажмите на кнопку «Сохранить».

Извлечь иконку из EXE или DLL-файла с помощью IcoFX

Чтобы извлечь значок из файла с IcoFX:

Шаг 1: Скачайте бесплатную версию 1.6.4 из архива FileHippo.

Шаг 3: Выберите файл для извлечения значка. Появится диалоговое окно со всеми значками, которые приложение смогло найти в данном файле.

Шаг 4: Выберите иконку и нажмите «Extract». Это откроет значок в редакторе.

Шаг 6: Укажите папку для хранения файла, нужный формат файла (PNG, BMP, JPEG, GIF или JP2) и присвойте имя файлу.

Шаг 7: Нажмите на кнопку «Сохранить».

Заключение

На этом все. Теперь вы знаете как извлечь иконки из DLL и EXE-файлов. В следующей статье я расскажу, как изменить иконку любой программы.

P.S.
Мог бы и сказать, что за файл такой, где лежит, чтобы не гадать.

ICQ: 827887

Во-вторых:
Если у меня есть ехе, в котором есть те же функции, которые есть в dll, (что предполагается), и мне эти ф-ции нужны, то ничто не помешает мне их оттуда достать. Как два пальца об асфальт. И на что рассчитывал автор программы, меня не интересует. Возможно на то, что ты не сможешь этого сделать.
А вырипать код - это делалось и до меня, и мною, и будет делаться впредь. Если тебе это кажется невозможным, то это всего лишь твоё заблуждение.

ICQ: 827887

Во-вторых
Мало того, что в большинстве случаев рипание кода не оправдано, хотя дейтсвительно, можно рипнуть, что угодно и как угодно, тут лишь зависит от того, насколько ты в этом заинтересован и в твоих человеческих способностях, ибо терпения для этого надо вагон. Но самое неприятное не в этом, а в том, что даже на пункте "а" ты можешь встать и ничего дальше не сделаешь, если там будет стоять путёвый протектор. Но и тут не всё, рипнуть код программы написанной на ассемблере или С труда не составит, а вот попробуй рипни код программы скомпелированной в ООП среде(Delphi хотя бы) с VCL и прочими фишками, и уж тем более я не говорю о программах написанных на ВБ, и уж тем более скомпилерированных в p-code. Думаю перечислять причины по которым ни один здравомыслящий человек не возьмётся рипать код из таких файлов нет нужды.

PS Я не говорю о программах "Hello World!", я говорю о серьёзных проектах, а если уж создатели той длл продают своё творение, то там должно быть что-то стоящее.

ICQ: 827887

А все "сложности" типа протектор - это отпугнуть начинающего.

После этих слов я уверен, что ты в области реверсинга и есть начинающий.

О том, начинающий я или нет - не тебе судить. Ты у нас настолько крутой реверсер, что даже протектор тебя загоняет в тупик ))))))))

ICQ: 827887

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

Во-первых не дерзи, я нигде не говорил, что я крутой и нигде не говорил, что протектор ставит в тупик. Я сказал, что может всё обломиться на стадии распаковки, ибо если там будет стоять нечто подобное AsProtect или ExeCryptor, то хрен когда ты снимешь его, а если и снимешь, то твой дамп будет настолько загажен(особенно касается ExeCryptor'a), что рипнуть у тебя попросту ничего не получится и если ты с этим не согласен, а судя по твоим ответам ты не согласен, значит ты просто напросто не имел дело с этим, а значит я могу судить.

Ха-ха-ха.
С тобой все ясно.
Поищи в сети утилиты для снятия такой "защиты". Их там как грязи.

Дискуссия на этом внезапно закончилась ))))
Ибо ваш уровень нарисовался очень четко.

ICQ: 827887

Покажи мне ХОТЬ одну утилиту, которая СНИМАЕТ одни из последних версий этих защит(За исключением последней версии stripper'a, который случайно вышел из привата и снимает AsPr до версии 2.1 и то кривовато). Ну показать ты всё равно ничего не сможешь, ибо нихрена в этой теме не понимаешь, а на будущее будет тебе известно, что AsProtect и ExeCryptor последний версий на ряду со StarForce и Themida являются лучшими протекторами в мире, и если уж AsProtect последних версий единицы снимают, то НИРАЗУ в сети я не видел программы с которой был снят ExeCryptor, были попытки патча и довольно успешно, но отломать его не отломали, хотя есть люди, которые умеют это, но их единицы во всём мире.

Поэтому друг мой ты сейчас такую лажу сказанул, что я просто пацталом валялся, не, ну надо ляпнуть такое. утилиты по снятию ExeCryptor'a и ещё защиты в кавычках написал)) Да тебе в жизнь такую "защиту" не снять, не то, что там утилиту написать.

EXE не загрузится, как DLL с помощью LoadLibrary.
Для того, чтобы загрузить EXE, как DLL, необходимы три вещи:
1. Необходимо поставить соотв. флаг в PE-заголовке, что это DLL. Только тогда разрешится таблица импорта и секция релокаций.
2. Необходимо обнулить адрес EntryPoint, чтобы после загрузки управление не туда передалось.
3. EXE либо должен иметь таблицу релокаций, либо быть загружен по базовому адресу, что может быть затруднительным.

EXE не загрузится, как DLL с помощью LoadLibrary.
Для того, чтобы загрузить EXE, как DLL, необходимы три вещи:
1. Необходимо поставить соотв. флаг в PE-заголовке, что это DLL. Только тогда разрешится таблица импорта и секция релокаций.
2. Необходимо обнулить адрес EntryPoint, чтобы после загрузки управление не туда передалось.
3. EXE либо должен иметь таблицу релокаций, либо быть загружен по базовому адресу, что может быть затруднительным.

Что-то подобное я и предполагал. Но мне еще бы очень хотелось инструкцию о том, как это сделать, используя допустим IDA pro.

Если есть познания в ассемблере то почему бы и нет? Запускай иду, в режиме отладки ищи свою функцию, которую хочешь выловить, попутно анализируя, что она принимает и возвращает (стек). Именно на этом моменте расходуется больше всего времени. Как только чувствуешь, что что то нашол, пиши для себя комментарий! (очень полезно). Также, переименовывай метки в удобочитаемые, если таковые имеются в процедуре, которую нужно рипать, благо ида это позволяет. Как только осознал, что куда передаётся и что собственно процедура делает, выделяй нужный код, жми alt+f10 и сохраняй сорец. После неоднократной обработки и огранки напильником, можешь подцеплять его в свой проект.

Кстати, как отладчик IDA не очень одобна. Присмотрись к OllyDbg. Так же обрати внимание на HexRays, это декомпилятор, который может облегчить тебе твой труд

EXE не загрузится, как DLL с помощью LoadLibrary.
Для того, чтобы загрузить EXE, как DLL, необходимы три вещи:
1. Необходимо поставить соотв. флаг в PE-заголовке, что это DLL. Только тогда разрешится таблица импорта и секция релокаций.
2. Необходимо обнулить адрес EntryPoint, чтобы после загрузки управление не туда передалось.
3. EXE либо должен иметь таблицу релокаций, либо быть загружен по базовому адресу, что может быть затруднительным.

MSDN еще никто не отменял - Вот мой простой (проверенный) исходник который загружает EXE модуль (то чем реально пользуюсь сейчас выложить не могу - все на работе)

typedef DWORD (WINAPI *PExport)(void);

//
hExe = LoadLibrary("export.exe");
if( hExe )
printf("EXE load\n");
pExport = (PExport)GetProcAddress(hExe,"Example");
if( pExport )
printf("EXE get address\n");
printf("Export function return value - %d\n",pExport());
>

А вот исходник EXE из которого импортируется функция

DWORD WINAPI Example(void)
return 123;
>

При создании которого указывается что DWORD WINAPI Example(void) экспортируемая - и все замечательно работает.
Я подобным очень часто пользуюсь. Но для этого надо знать что экспортируется.

Привет, хабровчане. В рамках курса "Reverse-Engineering. Basic" Александр Колесников (специалист по комплексной защите объектов информатизации) подготовил авторскую статью.

Также приглашаем всех желающих на открытый вебинар по теме «Эксплуатация уязвимостей в драйвере. Часть 1». Участники вебинара вместе с экспертом разберут уязвимости переполнения в драйверах и особенности разработки эксплойтов в режиме ядра.

Статья расскажет о подходах к анализу запакованных исполняемых файлов с помощью простых средств для обратной разработки. Будут рассмотрены некоторые пакеры, которые применяются для упаковки исполняемых файлов. Все примеры будут проведены в ОС Windows, однако изучаемые подходы можно легко портировать на любую ОС.

Инструментарий и настройка ОС

Для тестов будем использовать виртуальную машину под управлением ОС Windows. Инструментарий будет содержать следующие приложения:

установленный по умолчанию плагин x64dbg Scylla;

Самый быстрый и простой способ провести распаковку любого исполняемого файла — применить отладчик. Но так как мы будем также рассматривать язык программирования Python, то может понадобится проект:

uncompile6 проект, который позволяет разобрать байткод виртуальной машины Python;

pyinstallerExtractor инструмент для распаковки архива pyInstaller.

Общие методы снятия паковки

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


На картинке может показаться, что файл стал по размеру больше, однако это не всегда так. Большинство файлов за счет такой модификации могут уменьшить свой размер до 1.5 раз от исходного объема.

Что же от этого реверс-инженеру? Почему надо знать и уметь определять, что файл упакован? Приведу наглядный пример. Ниже приведен снимок файла, который не запакован:


И файл, который был пропущен через алгоритм UPX:


Изменения коснулись в этом случае двух основных точек исполняемого файла:

Точка входа — в случае с упакованным файлом это начало алгоритма распаковки, настоящий алгоритм программы будет работать только после того, как будет распакован оригинальный файл;

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

Итак, чтобы снова анализировать оригинальный файл, нужно найти настоящую или оригинальную точку входа. Для этого нужно разбить алгоритм на основные этапы:

Этап подготовки исполнения файла — загрузчик ОС настраивает окружение, загружает файл в оперативную память;

Сохранение контекста — упаковщик сохраняет контекст исполнения файла (набор значений регистров общего назначения, которые были установлены загрузчиком ОС);

Распаковка оригинального файла;

Передача управления оригинальному файлу.

Все описанные выше этапы можно легко отследить в отладчике. Особенно может выделяться процедура сохранения контекста. Для нее в разных архитектурах могут быть использованы команды pushad/popad или множественное использование команды push . Поэтому всегда приложение трассируют до первого изменения регистра ESP/RSP, и ставят "Hardware Breakpoint" на адрес, который был помещен в регистр в первый раз. Второе обращение этому адресу будет в момент восстановления контекста, который заполнил загрузчик ОС. Без него приложение завершится с ошибкой.

Пример UPX

Попробуем с помощью отладчика найти оригинальную точку входа для приложения. Запечатлим оригинальную точку входа до упаковки UPX:


Как та же точка входа выглядит после упаковки:


Запустим отладчик и попробуем найти место сохранения контекста:


Ждем первого использования ESP — в отладчике при этом значение регистра подсветится красным цветом. Затем устанавливаем точку останова на адрес и просто запускаем приложение:


В результате попадаем на оригинальную точку входа:


Вот так просто, теперь используя плагин Scylla Hide можно сохранить результирующий файл на жесткий диск и продолжить его анализ.

Подобный метод можно применять для любого упаковщика, который сохраняет контекст на стек.

Пример PyInstaller

Не всегда подобный подход работает для приложений, которые используют более сложную структуру исполняемого файла. Рассмотрим файл, который был создан с помощью PyInstaller — пакет, который позволяет преобразовать Python скрипт в исполняемый файл. При генерации исполняемого файла создается архив, который содержит виртуальную машину Python и все необходимые библиотеки. Сам исходный код приложения при этом преобразуется в байт код и его нельзя дезассемблировать.

Попробуем все же получить что-то читаемое. Создадим простое приложение на Python и упакуем с помощью PyInstaller. Исходный код приложения:

Установим пакет pyInstaller и создадим exe файл:

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

После выполнения команд выше, у вас должна создаться директория ./dist/test.exe . Откроем последовательно файл с помощью pyinstallerextractor и uncompile3 :


Наш скрипт находится в директории, которая создается в результате распаковки. Наименование файла должно соответствовать названию exe файла. В нашем случае это test.pyc . Откроем его в hiew :


Декомпиляция стандартными средствами невозможна, так как инструменты просто не умеют работать с байткодом Python. Применим специализированный инструмент — uncompile6 .

Иногда возникает ситуация при которой необходимо извлечь иконку из EXE и DLL-файла. Windows дает возможность использовать для ярлыков и программ иконки встроенные в файлы DLL и EXE, но не позволяет извлечь их и сохранить в формате ICO или PNG.

В этой статье мы рассмотрим несколько бесплатных программ, которые могут извлечь иконку из EXE и DLL файлов в Windows 10.

Файл ICO

В Windows 10 есть свои иконки, которые находятся в файлах:

  • C:\Windows\system32\shell32.dll
  • C:\Windows\system32\imageres.dll
  • C:\Windows\system32\moricons.dll
  • C:\Windows\explorer.exe

Как извлечь иконку из EXE и DLL

Чтобы извлечь иконку из файла, вам потребуется сторонний софт. Для этого есть множество утилит. Я расскажу о трех надежных бесплатных программах, которые я использую.

Начнем с утилиты Resource Hacker.

Извлечь иконку из EXE или DLL с помощью Resource Hacker

Шаг 1: Скачайте Resource Hacker.

Шаг 2: Установите приложение.

Шаг 3: Запустите приложение Resource Hacker.

Открыть файл иконок Resource Hacker

Шаг 5: На левой панели разверните группу значков и перейдите к нужному значку (используйте область предварительного просмотра справа).

Шаг 7: Выберите папку для сохранения файла ICO и нажмите Сохранить.

Теперь значок извлечен и сохранен в файле *.ico:

Несколько советов по использованию Resource Hacker

Некоторым пользователям может быть сложно использовать Resource Hacker. Пара альтернативных приложений: IconViewer и IcoFX, позволят сохранять значков в других форматах изображений, включая PNG и BMP.

Извлечение иконки из файлов EXE и DLL с помощью IconViewer

Шаг 1: Скачайте IconViewer (есть как 32-битные, так и 64-битные версии программы).

Шаг 2: Установите приложение IconViewer.

Шаг 3 Откройте проводник и откройте папку, содержащую файл, из которого хотите извлечь иконки. Например, перейдите в c:\Windows\System32.

Шаг 4: Щелкните правой кнопкой мыши по файлу с иконками, например, «shell32.dll» и выберите «Свойства» из контекстного меню.

Шаг 5: Перейдите на вкладку «Icons», добавленную приложением IconViewer.

Шаг 6: Выберите значок, который надо извлечь, и щелкните значок дискеты, чтобы сохранить его.

Шаг 7: Укажите папку назначения, имя файла и выберите формат файла (ICO, PNG или BMP). Далее нажмите на кнопку «Сохранить».

Извлечь иконку из EXE или DLL-файла с помощью IcoFX

Чтобы извлечь значок из файла с IcoFX:

Шаг 1: Скачайте бесплатную версию 1.6.4 из архива FileHippo.

Шаг 3: Выберите файл для извлечения значка. Появится диалоговое окно со всеми значками, которые приложение смогло найти в данном файле.

Шаг 4: Выберите иконку и нажмите «Extract». Это откроет значок в редакторе.

Шаг 6: Укажите папку для хранения файла, нужный формат файла (PNG, BMP, JPEG, GIF или JP2) и присвойте имя файлу.

Шаг 7: Нажмите на кнопку «Сохранить».

Заключение

На этом все. Теперь вы знаете как извлечь иконки из DLL и EXE-файлов. В следующей статье я расскажу, как изменить иконку любой программы.

Читайте также: