- Что хранится в секции .rsrc и как извлечь ресурсы из исполняемого файла
- Что именно лежит в .rsrc?
- Как извлечь ресурсы? Три рабочих способа
- 1. Resource Hacker — для быстрого просмотра и экспорта
- 2. Python + pefile + win32api — для автоматизации
- 3. Visual Studio — для редактирования и пересборки
- Сравнение способов: что выбрать?
- Частые ошибки — и как их избежать
- Когда это реально нужно: сценарии
- Как лучше делать — практические рекомендации
- Что делать дальше?
Что хранится в секции .rsrc и как извлечь ресурсы из исполняемого файла
Вы когда-нибудь открывали .exe-файл в HEX-редакторе и видели там куски иконок, строк с сообщениями, диалоговые окна — всё это, как будто случайно застряло в бинарнике? Это не мусор. Это ресурсы. И они хранятся в секции .rsrc — части исполняемого файла, которая специально отведена под всё, что не код, но без чего программа не работает как задумано.
Почему это важно? Потому что если вы работаете с устаревшим ПО, хотите переиспользовать иконку из чужого приложения, модифицировать текст сообщений, извлечь картинки из установщика или просто понять, почему программа на русском языке отображает английские строки — вам нужно уметь читать и извлекать ресурсы из .rsrc.
Что именно лежит в .rsrc?
Секция .rsrc — это структурированное хранилище, где Windows (и некоторые другие ОС) хранят всё, что не является машинным кодом, но нужно для отображения интерфейса, локализации и работы с внешними данными. Вот основные типы ресурсов, которые вы там найдёте:
- Иконки (
RT_ICON) — все значки приложения: иконка в панели задач, в проводнике, в окне «Свойства». - Курсоры (
RT_CURSOR) — кастомные курсоры мыши (например, часы, рука, кисть). - Битмапы (
RT_BITMAP) — изображения, используемые в интерфейсе: фоновые картинки, кнопки, рамки. - Строки (
RT_STRING) — все текстовые сообщения: «Ошибка подключения», «Сохранить как…», «Удалить файл?» — всё это вынесено в отдельные строки, чтобы можно было легко локализовать. - Диалоговые окна (
RT_DIALOG) — структуры окон: кнопки, поля ввода, метки. Это не код, а описание расположения элементов. - Меню (
RT_MENU) — структура верхнего меню: «Файл», «Правка», «Справка» — всё, что не прописано в коде, а описано в ресурсах. - Версия (
RT_VERSION) — метаданные: имя программы, версия, компания, авторские права — то, что видно в свойствах файла в проводнике. - Шрифты (
RT_FONT) — редко, но бывает: кастомные шрифты, встроенные в приложение. - Таблицы ресурсов — внутренние структуры, которые указывают, где и какие ресурсы находятся.
Всё это упаковано в иерархическую структуру: тип → имя/идентификатор → язык → данные. Например: RT_ICON → 1 → ru-RU → 256 байт бинарных данных. Это позволяет одной программе содержать иконки и строки на нескольких языках — и выбирать нужную версию в зависимости от настроек системы.
Как извлечь ресурсы? Три рабочих способа
Теория понятна. А как на практике вытащить иконку или строку? Есть три надёжных способа — от простого до мощного.
1. Resource Hacker — для быстрого просмотра и экспорта
Это бесплатная утилита, которая работает как «проводник» для ресурсов. Скачайте её с официального сайта (без установки, просто .exe).
Что делаете:
- Открываете .exe-файл в Resource Hacker.
- Слева — дерево ресурсов: раскрываете
Icon,String,Dialogи т.д. - Кликаете на нужный ресурс — справа появляется его содержимое.
- Правой кнопкой → Save Resource — и вы сохраняете иконку как .ico, строку как .txt, диалог как .rc.
Это самый простой способ. Подходит, если вам нужно вытащить 1–5 ресурсов за 5 минут. Никаких команд, никакой настройки. Работает на Windows, без установки.
2. Python + pefile + win32api — для автоматизации
Если вы работаете с десятками файлов, нужно извлекать ресурсы массово — например, для анализа библиотеки приложений или сбора иконок из всех .exe в папке — используйте Python.
Установите зависимости:
pip install pefile pywin32
Пример кода для извлечения всех иконок:
import pefile
import os
def extract_icons(exe_path):
pe = pefile.PE(exe_path)
for resource_type in pe.DIRECTORY_ENTRY_RESOURCE.entries:
if resource_type.name is not None and str(resource_type.name) == "RT_ICON":
for resource_id in resource_type.directory.entries:
for resource_lang in resource_id.directory.entries:
data_rva = resource_lang.data.struct.OffsetToData
size = resource_lang.data.struct.Size
data = pe.get_data(data_rva, size)
# Сохраняем как .ico
with open(f"{os.path.basename(exe_path)}_icon_{resource_id.id}.ico", "wb") as f:
f.write(data)
# Используем
extract_icons("notepad.exe")
Этот скрипт найдёт все иконки в notepad.exe и сохранит их как отдельные файлы. Можно адаптировать под RT_BITMAP, RT_STRING — просто замените RT_ICON на нужный тип.
Плюсы: автоматизация, работа с сотнями файлов, интеграция в другие скрипты. Минус: требует базового понимания Python.
3. Visual Studio — для редактирования и пересборки
Если вы не просто хотите извлечь ресурсы, но и изменить их — например, заменить текст «Save» на «Сохранить» — используйте Visual Studio.
Как:
- Откройте Visual Studio (Community бесплатно).
- Создайте новый проект типа Win32 Project — не важно, что внутри.
- В меню: Project → Add Resource → Import.
- Выберите ваш .exe-файл. VS покажет все ресурсы.
- Вы можете редактировать строки, менять иконки, сохранять изменения — и пересобрать .exe с новыми ресурсами.
Это единственный способ, который позволяет не просто извлечь, но и пересобрать файл с изменёнными ресурсами. Особенно полезно при локализации старых программ, где исходники недоступны.
Сравнение способов: что выбрать?
| Способ | Сложность | Для чего подходит | Можно редактировать? | Массовая обработка? |
|---|---|---|---|---|
| Resource Hacker | Низкая | Одиночные файлы, быстрый осмотр | Да (ограниченно) | Нет |
| Python + pefile | Средняя | Автоматизация, анализ, извлечение | Нет | Да |
| Visual Studio | Высокая | Редактирование и пересборка | Да (полный контроль) | Частично |
Если вам нужно просто вытащить иконку — используйте Resource Hacker. Если вы делаете скрипт для анализа 500 .exe-файлов — Python. Если вы хотите изменить текст в установщике и пересобрать его — только Visual Studio.
Частые ошибки — и как их избежать
- Открываю .exe в блокноте и вижу «кракозябры» — значит, ресурсы не там. Нет, они там. Просто в бинарном формате. Блокнот не умеет их читать. Используйте специализированные инструменты.
- Пытаюсь заменить иконку в .exe через Resource Hacker — и программа не запускается. Часто потому, что вы сохранили иконку не в том формате. Иконки в ресурсах — это не обычные .ico. Они хранятся в специальном формате Windows. Всегда экспортируйте через Resource Hacker — он сделает это правильно.
- Извлекаю строки, но они не на русском, хотя в системе русская локаль. Потому что в ресурсах может быть несколько версий строк: для en-US, ru-RU, de-DE. Нужно смотреть не только на тип, но и на язык. В Resource Hacker в дереве ресурсов есть столбец «Language» — выбирайте нужный.
- Пишу скрипт на Python, а он не видит ресурсы. Убедитесь, что файл не подписан (подписанные файлы иногда блокируют доступ к ресурсам) и что вы используете
pefile.PE()с правильными флагами. Иногда нужно указатьfast_load=True, если файл большой. - Думаю, что можно просто заменить .exe-файл с новыми ресурсами и всё заработает. Нет. Если вы меняете размер ресурсов (например, добавляете длинный текст), то структура файла может нарушиться. Лучше пересобирать через Visual Studio — он корректно пересчитывает смещения.
Когда это реально нужно: сценарии
- Ситуация: У вас есть старая программа на Windows XP, и она не поддерживает русский язык.
Решение: Извлеките строки через Resource Hacker, переведите их в текстовом файле, замените через Visual Studio, пересоберите. Получите локализованную версию без исходников. - Ситуация: Вы делаете утилиту для сбора иконок из всех .exe в корпоративной сети.
Решение: Напишите скрипт на Python с pefile — запустите на сервере, соберите все иконки в папку, сгенерируйте отчёт. - Ситуация: Вы хотите понять, почему в вашей программе отображается английская ошибка, хотя вы всё перевели.
Решение: Откройте .exe в Resource Hacker → найдитеRT_STRING→ проверьте, есть ли строка с нужным ID в языке ru-RU. Часто разработчики забывают добавить перевод для нового сообщения. - Ситуация: Вы скачали установщик, и он показывает «InstallShield» вместо названия вашей компании.
Решение: ИзвлекитеRT_VERSION— там вы увидите, что компания указана как «InstallShield». Замените её через Visual Studio — и получите чистый установщик.
Как лучше делать — практические рекомендации
- Всегда делайте бэкап. Изменение ресурсов может сломать файл. Копируйте .exe перед любыми действиями.
- Проверяйте цифровую подпись. Если файл подписан (например, Microsoft, Adobe), то изменение ресурсов сделает подпись невалидной. Это не критично для личного использования, но может вызвать предупреждения антивируса.
- Для строк — используйте ID, а не текст. В ресурсах строки идентифицируются по числовому ID (например, 101, 102). Это позволяет менять язык, не ломая логику программы. Не пытайтесь найти текст по содержанию — ищите по ID.
- Иконки — не всегда 256×256. В ресурсах могут быть иконки разных размеров: 16×16, 32×32, 48×48. Resource Hacker покажет все — выбирайте нужный размер для вашего случая.
- Не трогайте ресурсы в системных файлах. Например,
explorer.exeилиnotepad.exeвC:\Windows. Это может сломать систему или вызвать проблемы с обновлениями.
Что делать дальше?
Если вы хотите извлечь ресурсы — начните с Resource Hacker. Он не требует знаний, работает сразу. Скачайте, откройте любой .exe — и посмотрите, что там внутри. Увидите иконки, строки, меню — и поймёте, как это работает.
Если вам нужно автоматизировать — напишите простой скрипт на Python. 10 строк кода — и вы получите инструмент, который работает с десятками файлов за секунды.
Если вы хотите менять текст или иконки — используйте Visual Studio. Это единственный способ, который гарантирует, что файл после изменений будет работать.
Никаких магических инструментов. Никаких «одного клика, чтобы всё исправить». Только понимание структуры, аккуратность и правильный выбор инструмента под задачу.
Ресурсы — это не тайна. Это часть архитектуры Windows. И когда вы научитесь их читать — вы перестанете видеть .exe как чёрный ящик. Вы начнёте видеть его как книгу — где каждая страница — это иконка, строка, диалог. И вы сможете редактировать её, как текст.
Изменение ресурсов в исполняемых файлах может нарушить их целостность, вызвать сбои в работе или привести к блокировке антивирусами. Используйте описанные методы только для личного использования и с файлами, которыми вы имеете право распоряжаться. Для критически важных систем всегда консультируйтесь с разработчиком или ИТ-специалистом.
