Windows PE - Где и как хранятся строки, если не в ресурсах? - PullRequest
1 голос
/ 16 марта 2010

Обычно строки (например, содержимое / заголовки диалоговых окон) в файлах .exe хранятся в каких-либо ресурсах.

Но в некоторых последних exe-файлах, которые я разбирал / проверял ресурсы, я не мог найти никаких ресурсов, содержащих строку, но она была каким-то образом жестко запрограммирована с db в исходный код программы.

  • Как извлечь и изменить строки, непосредственно расположенные в программе? Я предполагаю, что это просто эквивалент const char* с в C ++?

  • Почему кто-то не может "перенести" содержимое диалоговых окон, меню и т. Д.?

Ответы [ 3 ]

3 голосов
/ 23 марта 2010

На сегодняшний день самый простой способ получить строки из PE - это утилита strings, которая входит в стандартную комплектацию каждого дистрибутива Linux, с которым я когда-либо сталкивался (даже uCLinux). Он просто проходит через весь двоичный файл, ища серию символов ASCII для печати с нулевым символом в конце ... которая является вашей канонической строкой. strings --help показывает доступные параметры, такие как строка минимальной длины для поиска, помощники по кодированию, архитектуре и другие вещи, которые вам, вероятно, не нужны.

Если вы не используете Linux, я рекомендую загружать Ubuntu Live CD только для множества простых, но эффективных утилит командной строки.

1 голос
/ 29 марта 2010

Если вы хотите получить доступ к данным в PE-файле, попробуйте эту утилиту (поставляется с исходным кодом и дружественной (не GPL) лицензией, чтобы вы могли использовать код в своем собственном приложении).

PE Формат файла DLL

Вы сможете легко найти адрес соответствующего раздела (ов) и затем обработать данные. Существует также проект PE File Explorer (с исходным кодом), который использует DLL, поэтому вы можете увидеть, как вызывать DLL для вашего приложения.

1 голос
/ 16 марта 2010

Строки находятся либо в ресурсах, либо в разделах данных только для чтения файла PE. Второе чаще встречается, когда строки не являются заголовками / названиями элементов управления. В разобранном виде они просто часть памяти и специально не помечены. Умные дизассемблеры, такие как IDA, могут замечать ссылки на адреса в определении кода и выделять строки.

  • Извлечение и модификация. Если вы знаете адрес строки, ее легко извлечь и изменить. Вы берете адрес строки, затем вычитаете основание изображения, затем вычитаете RVA сечения, затем добавляете физическое смещение сечения. Это даст вам положение строки в файле. Там вы можете изменить его с помощью шестнадцатеричного редактора. Трудно найти адрес - вам нужно проанализировать разобранный код.
  • Почему бы кому-то не "перенести" содержимое диалоговых окон, меню и т. Д.? Не имеют ни малейшего представления о. Кто-то может объявить const char *, а затем установить его в качестве заголовка, не обращая внимания, где он действительно хранится.
...