Как найти и заменить ресурс, в котором имеется какая-то надпись (на экране, при загрузке, сообщение вируса). Много картинок!
Толчком для написания послужил
этот скрипт. Я уже давно использую способ поиска текста намного проще и эффективнее.
Нам понадобится файловый менеджер
FAR (да простят меня пользователи
TC - в нём тоже есть подобный поиск, но возможности поскромнее), редактор ресурсов
Restorator (либо любой другой). В некоторых случаях придётся использовать НЕХ-редактор (я использую
Hiew32, он у меня встроен в самораспаковку менеджера
FAR из сборки
2k10).
Итак, нас раздражает надпись "
Тестовый режим" на экране РЕ. Мы точно знаем, что эта надпись находится в ядре самой сборки - потому как больше негде! ))
Порядок действий.Вначале распаковываем wim-ядро сборки в любой временный каталог, желательно на диск пошустрее (к примеру, я для этого использую РАМ-диск в памяти).
К слову, FAR умеет искать и прямо в архивах (к коим относится и wim-ядро при наличии плагина 7-zip). Но поиск в архиве занимает намного больше времени, чем поиск в предварительно распакованном ядре, поэтому лучше распаковать.Переходим в
FAR в папку с распакованным ядром и выбираем поиск (
Alt+F7). Маску оставляем
*.*, вбиваем нужное в "
Содержащих текст" и
обязательно выбираем "
Все стандартные кодовые страницы" (мы ведь заранее не знаем, в какой кодировке будет текст).
"Нажми на кнопку - получишь результат!"

Надпись "Поиск закончен" появится после полного завершения сканирования папки.
Как результат мы получили 4 файла. Причём два из них в каталоге
WinSxS - это просто копии. Думаю, понятно, что вероятность того, что искомая фраза в интерфейсе используется именно из файла
shell32.dll.mui намного выше, чем из
fsutil.dll.mui. Это не всегда так, но в данном примере - так. Осталось найти и заменить надоедливую надпись. Для этого подойдёт
Restorator.
Чтобы открыть файл с расширением mui, нужно пойти на небольшую хитрость: в строке ввода имени указываем *.*, тогда в проводнике будут отображены все типы файлов. Либо можно указать сразу же полное имя файла.Ctrl+F, вводим снова искомую строку, ищем и находим нужное.
Там же рядом присутствуют надписи "
Безопасный режим", "
Пробная версия"... Думаю, дальше всё понятно.
Отмечу, что надпись
Build 15063.rs2.... найти было бы невозможно. Поскольку она создана из составляющих - слова
Build и переменной
№ версии. Но тут нам очень повезло, ведь рядом с "
Тестовый режим", в строке 2882 указано
%ws Build %ws, и это очень напоминает индикацию номера сборки. Так что можно попытать счастья.

Для закрепления - ещё один пример.Надпись при загрузке ядра
7х86 из сборки
2k10.
Отдельно отмечу, что некоторые надписи, появляющиеся в момент загрузки, используются из самого загрузчика bootmgr (или его MUI), а некоторые - из ядра. "Разделительной чертой" служит момент окончания загрузки ядра в память.
Производим поиск по аналогичному шаблону
Результат
Попробуем провести правку не
Restorator (ведь не все ресурсы можно открыть редактором ресурсов, кое-какие файлы при отсутствии "фирменного" редактора можно подправить только
НЕХ-редактором). Если используется
FAR из
2k10, становимся на файл и нажимаем
Alt+F4 (вызываем
Hiew32).
К слову, этот редактор имеет ограничения по поддержке кириллицы и пробелов, поэтому, если файл не открывается - просто временно переименуйте его на имя попроще (в формат 8.3).По
F7 вызываем строку поиска, вбиваем искомую надпись... И облом, не найдено...

Причина очень проста:
кодировка не совпадает. Нажимаем
F8, выбираем другую кодировку, снова ищем...
Наконец, в кодировке
Unicode (большинство win-файлов именно в ней хранят ресурсы), находим искомое.
Чтобы перейти в режим
HEX-правки, жмём
F4 и выбираем
HEX, немного пролистываем вниз (в
НЕХ-режиме количество отображаемого текста на экране меньше) - заново находим искомую надпись.
По
F3 переходим в режим редактирования, по
TAB - на правую панель. Правим нашу надпись под свой вкус. По
F9 вносим изменение в файл.
Всё, готово! Теперь можно пересобрать ядро, протестировать загрузку и оценить результат.
Как быстро проверить - то или не то - мы нашли/заменили?Можно, конечно, пересобрать ядро, запустить в эмуляторе и оценить результат. Но на практике для
РЕ-сборок есть решение попроще. По крайней мере, если ядро базируется на
PeCMD и есть возможность перезагрузить оболочку. Итак: просто загружаемся под
РЕ.
Переименовываем файл, который нам нужно будет подменить модифицированным (просто удалить его часто не получится - он может блокироваться системой). После переименования копируем наш мод-файл и перезагружаем оболочку (убиваем проводник
Explorer.exe, и потом, если он не запустился сам - запускаем его вручную).
Такой подход удобен тем, что можно быстро подправить нужное прямо под РЕ и сразу же увидеть результат.
Замечание: а что, если в результате поиска мы нашли несколько потенциальных кандидатов на правку, как определить виновника без лишних усилий и тестирований? Я поступаю так: вместо исправления надписи сразу во всех, просто вношу вместо первого символа порядковый номер (1-9, буквы по алфавиту). Потом смотрю, какой номер высветится в тесте.
Ограничение на поиск - упакованные файлы. К счастью, FAR автоматически распакует стандартные архивы (zip, 7zip, rar, прочие) и произведёт воиск внутри файлов в архиве. Но файлы, упакованные пакерами (UPX, mpress, PEcompact и т.д.) FAR не распакует, и, соответственно, если текст находится внутри такого файла - он не будет найден.
Где всё это можно использовать? Не поверите - очень во многих случаях. Пример из жизни: вирус-червь. Ни один антивирь не находил, ОС переставлять было нельзя. А вирус просто прописывал свою страничку везде. Пришлось пройти поиском по системному диску (под РЕ, чтобы было проще и быстрее) - искал страничку. Нашлась в профильном каталоге, у черта на колючках!

Второй этап - найти, кто запускал этот файл... По сути, второй пример: нужно удалить драйвер (либо любой файл, прописанный в системе). Оказалось, что драйвер запускается в реестре (были найдены все улья реестра), и с помощью "безобидного" файла, имитирующего системный. Поиск в реестре и очистка - с помощью
RegWorkshop (мегаудобная штука в плане поиска).