Что внутри .rsrc: как найти, извлечь и понять ресурсы в EXE файле

Вы когда-нибудь открывали программу, и там вдруг оказывалась иконка, которую вы не делали? Или вы видели в реверс-инжиниринге, что где-то там спрятаны картинки, звуки или версии файлов, но не могли понять, куда смотреть? Всё дело в секции .rsrc. Это не просто техническая деталь, это кладовая, где программисты складывают «внешний вид» программы.

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

Зачем вообще нужны ресурсы

Представьте, что вы пишете программу для Windows. Вы хотите, чтобы при нажатии на кнопку появлялось окно с текстом. Вы можете написать код, который скажет: «Открой окно, нарисуй текст здесь, здесь и здесь». Но если вы захотите поменять текст на другой язык или изменить картинку на кнопке, вам придется лезть в исходный код, перекомпилировать и снова тестировать. Это неудобно.

Ресурсы появились, чтобы отделить код (логику: «что делать») от данных (контент: «что показывать»). Картинки, иконки, звуки, тексты меню, версии файлов, диалоговые окна — всё это хранится отдельно от исполняемого кода.

В формате PE (Portable Executable), который используют все .exe, .dll и .sys файлы Windows, для этих данных выделена специальная область. Чаще всего компиляторы (например, MSVC или MinGW) называют эту секцию .rsrc (от англ. resources). Иногда вы можете встретить имена вроде .rsrc2 (в старых версиях Borland) или .res, но суть одна — это место, где лежат ресурсы.

Что именно там лежит

Когда вы видите секцию .rsrc в дизассемблере или редакторе PE, вам может показаться, что там просто куча байтов. На самом деле, .rsrc имеет строгую структуру. Но для начала давайте разберемся, какие типы данных чаще всего встречаются внутри:

  • RT_ICON и RT_GROUP_ICON: Иконки программы. Эти данные используются, когда файл показывается в проводнике или в панели задач.
  • RT_BITMAP: Картинки формата BMP. Раньше их использовало большинство программ, сейчас их вытесняют PNG, но в старых приложениях и играх BMP всё ещё полно.
  • RT_MANIFEST: Файлы манифеста (XML). Они говорят Windows, как обращаться с программой: какая версия .NET нужна, поддерживает ли она DPI (высокое разрешение экранов), права администратора.
  • RT_VERSION: Информация о версии. То самое окно «Свойства» -> «Подробно», где вы видите версию продукта, имя компании и описание.
  • RT_STRING: Текстовые строки. Часто используются для меню или сообщений об ошибках.
  • RT_DIALOG: Шаблоны окон. Описание того, где стоят кнопки, где текстовые поля.
  • RT_CURSOR: Курсоры мыши.
  • RT_RCDATA: Пользовательские данные. Сюда программисты могут положить что угодно: от HTML-страницы до архива с игрой.

Важно понимать: эти данные скомпилированы в бинарный вид. Вы не можете просто взять и открыть EXE в блокноте, чтобы увидеть картинку. Система Windows специальная функция LoadResource, которая умеет читать .rsrc, находить нужный ID и вытаскивать оттуда данные в память.

Структура секции: как она устроена внутри

Если вы заглянете внутрь .rsrc с помощью Hex-редактора, вы увидите не просто хаос, а древовидную структуру. Это похоже на папки и файлы в Windows, но в бинарном виде.

У дерева ресурсов есть три уровня:
1. Уровень типа (Type). Например, все иконки идут в одну ветку, все картинки — в другую.
2. Уровень имени или ID (Name/ID). У каждой картинки может быть свой номер (например, 101) или свое имя (например, «MainLogo»).
3. Уровень языка (Language). Один и тот же ресурс (например, строка ошибки) может быть и на английском, и на русском. Windows сама выбирает нужный язык, если он есть.

В самом низу дерева находятся «данные» (Data Entry). Здесь хранится указатель на смещение ресурса в файле и его размер. Именно эти смещения и указывают на реальные байты картинки или текста.

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

Инструменты: что использовать для извлечения

Вам не нужно писать собственный парсер, если ваша цель — просто достать картинки или иконки. Есть несколько проверенных инструментов, которые делают это за секунды.

1. Resource Hacker (ResourceTuner)
Это «золотой стандарт» для работы с ресурсами. Он бесплатный, старый, но работает безотказно.

  • Плюсы: Показывает дерево ресурсов, позволяет экспортировать любые файлы, позволяет заменять иконки, редактировать тексты.
  • Минусы: Интерфейс выглядит как программа из 90-х, но это не мешает ему быть мощным.

2. PEStudio
Если вы интересуетесь безопасностью и хотите быстро посмотреть, что там внутри, не запуская программу.

  • Плюсы: Очень быстрый анализ, показывает импорты и ресурсы без реверса кода. Можно «вытащить» ресурсы в папку.
  • Минусы: Меньше возможностей для редактирования, чем у Resource Hacker.

3. PEBear
Современный, красивый инструмент, который часто используют исследователи безопасности.

  • Плюсы: Отличная визуализация секций, интерактивный просмотр ресурсов, удобный экспорт.
  • Минусы: Иногда требует чуть больше времени на изучение интерфейса, чем Resource Hacker.

4. Comando (для программистов)
Если вы пишете на Python или C#, вы можете использовать библиотеки для работы с PE. Например, pype32 или pefile в Python. Это нужно, если вам нужно автоматически извлечь ресурсы из тысяч файлов.

Пошаговая инструкция: как извлечь ресурсы

Давайте разберем процесс на примере самого популярного инструмента — Resource Hacker. Это универсальный сценарий, который подойдет в 90% случаев.

  1. Откройте файл. Запустите Resource Hacker и перетащите в него нужный .exe или .dll файл. Если файл занят системой (например, вы пытаетесь открыть dll из System32), закройте все программы, которые его используют, или скопируйте файл в другую папку.
  2. Посмотрите дерево. Слева вы увидите структуру. Разверните ветку, которая вас интересует. Например, Icon для иконок или Bitmap для картинок.
  3. Выберите ресурс. Кликните на конкретный элемент. Справа вы увидите его содержимое. Если это иконка, вы увидите превью. Если это диалоговое окно — код скрипта.
  4. Действие. Нажмите правой кнопкой мыши на выбранный ресурс и выберите Save [имя ресурса]… (Сохранить).
    • Для иконок программа предложит сохранить .ico файл.
    • Для картинок — .bmp или .png (зависит от формата).
    • Для текста — .txt или .rc (формат исходного кода ресурсов).
  5. Проверка. Зайдите в папку, куда вы сохранили файл, и откройте его. Если он открывается — успех.

Если вы используете командную строку или скрипты, вам понадобятся консольные утилиты вроде rc (компилятор ресурсов) или windres (из пакета MinGW). Но для разовых задач графический интерфейс работает быстрее и нагляднее.

Сравнение методов работы

Не все методы извлечения работают одинаково. Выбор зависит от того, что вы хотите сделать: просто посмотреть, заменить что-то или автоматизировать процесс.

Метод / Инструмент Сложность Для чего лучше всего Риски
Resource Hacker Низкая Модификация EXE, замена иконок, извлечение отдельных картинок. Можно случайно сломать структуру при сохранении, если не умеешь работать с ресурсами.
PEStudio / PEBear Средняя Анализ безопасности, быстрый экспорт всех ресурсов сразу. Меньше контроля над точечными изменениями.
Hex-редактор (010 Editor) Высокая Глубокий анализ, когда стандартные утилиты не видят данных. Высокий риск повредить файл вручную. Требует знания структуры PE.
Python (pefile) Высокая Массовая обработка тысяч файлов, автоматизация. Требует навыков программирования.

Частые ошибки при работе с .rsrc

Даже опытные пользователи иногда наступают на одни и те же грабли. Вот что чаще всего идет не так:

1. Попытка редактировать «сырой» бинарный файл без бэкапа
Самая главная ошибка. Если вы открыли .exe в Hex-редакторе и поменяли байт иконки, а файл имеет цифровую подпись (Digital Signature), то подпись испортится, и программа перестанет запускаться или покажет предупреждение Windows. Всегда делайте копию файла перед редактированием.

2. Игнорирование размера секции
Когда вы заменяете ресурс (например, вставляете новую картинку, которая весит больше старой), размер секции .rsrc меняется. Если вы просто вставите данные поверх старых, вы можете «записать» их поверх кода следующей секции. Программа просто упадет. Инструменты вроде Resource Hacker обычно справляются с этим, перемещая секции, но при ручном редактировании в Hex-редакторе это смертельный риск.

3. Путаница с форматами
Вы можете увидеть картинку внутри .exe, но она может быть не в формате PNG, а в формате BMP или даже в нестандартном формате сжатия. Если вы просто переименуете файл в .jpg, он не откроется. Сначала сохраните его в родном формате, а потом конвертируйте.

4. Работа с зашифрованными ресурсами
Некоторые современные приложения (особенно игры или защитное ПО) шифруют содержимое секции .rsrc. В этом случае Resource Hacker покажет просто набор нулей или странных данных. Вам понадобится дешифратор (decrypter) или дамп памяти запущенного процесса, чтобы достать данные.

Когда и как выбирать инструмент

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

Ситуация 1: «Мне нужно поменять иконку у программы для себя»
Не пишите скрипты. Скачайте Resource Hacker. Откройте файл, найдите ветку Icon, выберите Group Icon, нажмите «Заменить ресурс» (Replace Icon) и выберите свой .ico файл. Сохраните. Это займет 2 минуты и гарантированно сработает.

Ситуация 2: «Мне нужно достать все картинки из игры (из .exe или .dll)»
Если картинок сотни, ручной кликать неудобно. Используйте утилиту Resource Extractor (есть много бесплатных консольных версий) или напишите простой скрипт на Python с библиотекой pefile. Скрипт пройдет по дереву ресурсов, найдет все картинки и сохранит их в папку. Это быстрее и надежнее.

Ситуация 3: «Я исследую вредоносное ПО»
Если вы анализируете вирус, ни в коем случае не запускайте его просто так. Используйте PEBear или PEStudio в изолированной среде (песочнице). Они показывают ресурсы в режиме «только чтение». Если вы видите подозрительные данные в .rsrc, экспортируйте их и анализируйте отдельно, а не внутри оригинального файла.

Ситуация 4: «Мне нужно вставить свою версию (Version Info)»
Если программа показывает «Неизвестный продукт» или старую версию, это часто лежит в RT_VERSION. В Resource Hacker это ветка Version Info. Вы можете отредактировать поля Version, Company Name и т.д. Но помните: если программа использует эти данные для проверки лицензии, изменение их может сломать работу программы.

Как проверить, что всё прошло успешно

После извлечения или изменения ресурсов важно убедиться, что результат качественный.

  1. Визуальная проверка. Откройте сохраненные файлы в стандартном просмотрщике. Если иконка — чек (икона), а картинка — не размыта, всё хорошо.
  2. Проверка целостности EXE. Если вы меняли ресурсы внутри файла, запустите программу. Она должна работать так же, как и до изменений. Если она вылетает при запуске — вы нарушили структуру секций.
  3. Проверка цифровых подписей. Если оригинальная программа была подписана, после изменения ресурсов подпись сломается. Это нормально для личного использования, но если вы распространяете файл, знайте: пользователи увидят предупреждение «Неизвестный издатель».

Итог: что делать дальше

Секция .rsrc — это «лицо» программы. Она хранит всё, что пользователь видит: от логотипа до текстов ошибок. Понимание того, как она устроена, дает вам контроль над визуальной частью софта.

Если вы просто хотите посмотреть, что внутри, или извлечь картинку — используйте Resource Hacker. Это самый простой и надежный путь. Если вам нужно автоматизировать процесс или анализировать большие объемы файлов — переходите на скрипты (Python/pefile) или PEStudio. Главное правило: никогда не редактируйте оригинальный файл без копии и всегда проверяйте, не разбилась ли структура файла после ваших правок.

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

Оцените статью
PEFile — Безопасность и технологии простым языком