Pe файлы что это такое

Обновлено: 02.07.2024

В ходе исследования файлов, связанных с рядом производителей оригинального оборудования (OEM) операционных технологий (OT), компания Mandiant Threat Intelligence обнаружила большое количество легитимных переносимых исполняемых файлов (PE), затронутых различными типами PE, заражающими вредоносные программы. Зараженные файлы включают двоичные файлы, связанные с программируемыми логическими контроллерами (ПЛК), связью OLE для управления процессами (OPC), приложениями человеко-машинного интерфейса (HMI) и другими функциями OT, поддерживаемыми устройствами на базе Windows на уровнях 2 и 3 Purdue. Модель.

PE – это формат файла, разработанный Microsoft для исполняемых файлов (.EXE, .SCR) и динамически подключаемых библиотек (.DLL). Инфектор PE-файлов — это семейство вредоносных программ, которые распространяются путем добавления или переноса вредоносного кода в другие PE-файлы в зараженной системе. PE-инфекторы не особенно сложны и могут быть обнаружены большинством антивирусных продуктов. Однако это не остановило распространение такого вредоносного ПО в сетях OT, где небольшие отклонения в производительности или состоянии системы могут привести к неблагоприятным последствиям.

Для этой записи блога мы изучили 1200 зараженных файлов, связанных с десятью OEM-производителями, на известной платформе анализа вредоносных программ с 2010 по 2021 год. Эти вредоносные исполняемые файлы содержат зараженные версии законных PE-файлов, на что указывают действительные встроенные сертификаты от поставщиков. Хотя у нас нет никаких указаний на то, что эта деятельность нацелена на системы OT, наше исследование показывает, что злоумышленникам часто удается пересечь периметр безопасности OT даже с помощью простых тактик.

Чтобы получить доступ к полному обзору деятельности субъектов, представляющих OT и ИТ-угрозы, ознакомьтесь с предложениями Mandiant Advantage Free и Fusion для анализа киберугроз.

С 2010 года в бинарных файлах OT все чаще встречается PE, заражающее вредоносные программы

Компания Mandiant провела поиск зараженных образцов и обнаружила более 1200 зараженных PE, связанных с десятью OEM-производителями OT, протестированными в онлайн-песочнице для анализа вредоносных программ с 2010 по 2021 год. В список OEM-производителей вошли Siemens, Emerson, Schneider Electric, Rockwell Automation/Allen Bradley, ABB. , Schweitzer Engineering, Honeywell, GE Fanuc, Kepware и Invensys. В 2010 году на платформе было протестировано только три PE, но только за первые шесть месяцев 2021 года это число увеличилось до 526 PE. Хотя мы не можем точно указать причину такого значительного увеличения, есть несколько возможных объяснений.

  • С 2010 года осведомленность о безопасности в сетях OT резко возросла. В результате группы безопасности OT все чаще внедряют антивирусные меры в системы на базе Windows и проверяют больше подозрительных файлов, некоторые из которых содержат выявленные PE-заразители.
  • Конвергенция IT-OT привела к расширению возможностей подключения сетей OT, что может привести к увеличению подверженности вредоносному ПО для ИТ, например PE-инфекторам.
  • Ограниченное использование антивирусов и других мер безопасности в OT позволило вредоносным программам распространяться и сохраняться в течение последнего десятилетия.
  • Защитники OT все чаще используют известные платформы анализа вредоносных программ для проверки программного обеспечения из систем на базе Windows в OT.

На рис. 1 показана тенденция к увеличению числа зараженных исполняемых файлов OEM OT в период с 2010 года по середину 2021 года. У Mandiant нет достаточной информации, чтобы объяснить резкое снижение числа зарегистрированных случаев в 2019 году. Однако, учитывая наблюдаемую тенденцию, мы полагаем, что это может быть связано с изменениями в запрашиваемом нами репозитории анализа вредоносного ПО.

Количество зараженных исполняемых файлов OT с течением времени

Рисунок 1. Количество зараженных исполняемых файлов OT с течением времени

Тенденция, показанная на рис. 1, согласуется с тем фактом, что сообщество безопасности OT появилось относительно недавно и начало развиваться в основном после инцидента со Stuxnet в 2011 году. Мы наблюдаем аналогичный рост в других областях, таких как обмен информацией об уязвимостях OT. . Мы также подчеркиваем, что представленное нами количество заражений включает анализ только исполняемых файлов от десяти крупных OEM-производителей на одной известной платформе анализа вредоносных программ, однако фактическое количество заражений в отрасли, вероятно, намного выше.

Загрузите копию нашего образца зараженных файлов. Мы отмечаем, что в некоторых случаях автоматический анализ не смог определить конкретное вредоносное ПО, и список может включать небольшое количество других типов вредоносных программ, выдающих себя за программное обеспечение OT.

Вирус PE может легко распространяться, не нацеливаясь на конкретных жертв

У Mandiant нет информации, которая указывала бы на то, что какой-либо из обнаруженных нами PE-инфекторов был специально нацелен на системы OT. Из-за того, что многие PE-инфекторы похожи на червей, существует множество сценариев и векторов атак, в которых активы OT могут быть заражены, чаще всего без конкретной цели. В таблице 1 приведен неполный список примеров.

Вектор угрозы анализ

Таблица 1. Анализ вектора угрозы

Вредители PE часто распространяются, сканируя файловые системы, память, локальные диски, общие сетевые ресурсы и переносные носители в поисках чистых PE-файлов, и, обнаружив их, изменяют чистый PE, добавляя вредоносный код. Например, когда вредоносная программа находит такой файл, как «EventViewer.exe», законное программное обеспечение Honeywell, используемое для просмотра сигналов безопасности, она добавляет себя к исполняемому файлу, но сохраняет исходное имя и функциональные возможности программы. Процедуры, используемые для этого, различаются по сложности среди разных семейств и вариантов инфицирующих PE. В таблице 2 представлена ​​случайная выборка обнаруженных нами зараженных бинарных файлов OT OEM.

Пример зараженные двоичные файлы OT OEM

Таблица 2. Пример зараженных бинарных файлов OT OEM

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

Разные PE Infectors различаются по возможностям

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

  • Командование и управление (C2)
    • Предоставляет злоумышленникам возможность отдавать команды, загружать дополнительные вредоносные ресурсы и извлекать данные из зараженных систем.
    • Возможность отправлять/получать домены C2/IP-адреса через зараженные одноранговые узлы.
    • Шифрование полезной нагрузки для сокрытия анализа и обнаружения
    • В основном используется для распространения по системе, внедрения вредоносного кода в процессы, изменения файлов в системе, создания/удаления файлов, отключения функций безопасности и обеспечения сохраняемости.

    Таблица 3 включает подмножество наиболее часто встречающихся семейств вредоносных программ, заражающих PE, которые мы обнаружили в файлах OT. Варианты могут включать не упомянутые функции и полезные нагрузки, измененные злоумышленниками.

    Примеры PE, заражающий семейства вредоносных программ

    Таблица 3. Примеры семейств вредоносных программ, заражающих PE

    Вспышки инфекции PE могут иметь серьезные последствия для систем OT

    Несмотря на то, что эпидемии инфекции PE в основном распространены в ИТ-сетях, они могут иметь серьезные последствия для систем и сетей OT. Если вирусы PE не обнаруживаются и не лечатся своевременно, они могут быстро распространяться по сетям. Широко распространенные инфекции создают неожиданные условия для систем и сетей, где производительность и стабильность имеют решающее значение для их предполагаемых функций.

    • На сетевом уровне системы, пораженные вредоносной программой, заражающей PE, могут испускать большие объемы ошибочного трафика, связанного с возможностями вредоносной программы, такими как маяки C2, обмен данными с ботнетами P2P и перечисление общих файловых ресурсов. PE-инфицирующие агенты также могут оказывать неблагоприятное воздействие на производительность старого сетевого оборудования, которое обычно проверяется на ожидаемые нормальные условия с помощью заводских приемочных испытаний (FAT) и приемочных испытаний на месте (SAT), проводимых OEM-производителем.
    • На уровне хоста вредоносное ПО, заражающее PE, может вызвать проблемы с производительностью ресурсов. Методы, используемые PE-инфекторами для распространения и сохранения, могут вызывать всплески использования ресурсов, таких как дисковый ввод-вывод, память и производительность ЦП.
      • Это может повлиять на устаревшие системы с ограниченными ресурсами и активами с определенными функциями, такими как архиваторы, где критически важна производительность дискового ввода-вывода и памяти.
      • Двоичные файлы, используемые операционной системой и программным обеспечением OEM, также могут быть повреждены или деградированы, поскольку вредоносное ПО распространяется и изменяет файлы в системе.

      Хотя в большинстве случаев заражение PE вредоносным ПО в средах OT может рассматриваться как неприятность, оно подчеркивает наличие слабых мест, которыми могут воспользоваться злоумышленники. Наши наблюдения за исполняемыми файлами программного обеспечения, связанными с OT, на которые воздействует вредоносное ПО, заражающее PE, показывают, что системы и сети OT могут быть скомпрометированы с помощью чрезмерно упрощенной тактики.

      Хотя обнаруженные нами семейства вредоносных программ, заражающих PE, вряд ли были нацелены на системы или сети OT, более сложные вредоносные программы с аналогичными возможностями заражения PE могут столь же эффективно проникать за периметр OT.Одним из примеров является LOCKLOAD (также известный как FREELOADER), семейство вредоносных программ с возможностью заражения PE, которое, как мы наблюдали, используется для работы и сбора информации из систем с воздушным зазором. Помимо способности заражать PE, LOCKLOAD может извлекать украденные файлы из системы жертвы, выполнять команды распространения и собирать файлы из зараженных автономных систем. Он также распространяется на автономные системы при открытии файлов со взломанных USB-накопителей.

      Профилактика, обнаружение и устранение заразителей PE в средах OT

      Mandiant предоставляет следующие рекомендации по предотвращению, обнаружению и устранению вирусов PE в средах OT. За поддержкой обращайтесь в Mandiant OT Consulting.

      Защитники должны уделять первоочередное внимание предотвращению заражения PE вредоносным ПО, чтобы снизить риск распространения инфекции на критически важные ресурсы.

      • Выполняйте периодическое резервное копирование критически важных ресурсов и проверяйте резервные копии. Резервные копии следует хранить в автономном режиме и периодически проверять.
      • Разработайте политики и процедуры для идентификации, контроля и авторизации использования портативных носителей, таких как ноутбуки, USB и компакт-диски:
        • Выполняйте санитарную обработку или сканирование портативных носителей с помощью новейшего антивируса с помощью механизма на основе эвристики перед подключением к ресурсам OT.
        • Оценивайте портативные носители и данные, поступающие в среду OT из ненадежных источников, и поручайте внешним сторонам использовать контролируемые и авторизованные переносные носители.
        • Отключите USB-порты для устройств, где их использование не требуется, и, если возможно, используйте блокировщики портов.
        • Установите белый список приложений на активы OT или переносные носители, используемые с активами OT (например, ноутбуки для обслуживания и тестовое оборудование).
        • Внедрите контроль устройств на ресурсах OT, чтобы гарантировать использование только утвержденных переносных носителей.

        Заражающие PE вредоносные программы и файлы, пораженные PE-заразителями, часто имеют высокие показатели обнаружения антивирусными ядрами. Однако системы OT могут быть неспособны использовать антивирусную защиту или защиту конечных точек из-за ограничений, таких как соглашения об уровне обслуживания (SLA). Защитники должны уделить первоочередное внимание обнаружению этой угрозы до входа в среду OT. Этого можно добиться, сканируя устройства и данные, поступающие в среду OT, с помощью обновленного антивируса или очищая их перед использованием.

        Обнаружение наличия вредоносных программ, заражающих PE, может быть затруднено на объектах, где не используется традиционная антивирусная защита или защита конечных точек. Это связано с тем, что зараженные PE-файлы могут иметь возможность запускать законный код даже после заражения, оставляя очень мало видимых пользователем индикаторов. Мы предлагаем защитникам проверить сетевой трафик к системам и от них, которые могут использоваться для поддержки возможностей C2 (например, системы на уровне Purdue 2 и 3). Выявление подозрительных маячков или активности C2 из этих ресурсов также может помочь в выявлении зараженной системы в среде.

        Устранение заражения, вызванного вредоносным ПО, заражающим PE, может быть затруднено из-за самовоспроизводящегося характера и методов, используемых для распространения и сохранения в системе. Удалять зараженные файлы не рекомендуется, так как это может привести к потере важных файлов, используемых ОС или приложениями OT. Mandiant рекомендует использовать заведомо исправные резервные копии для восстановления зараженных активов. Однако возврат к резервным копиям требует учета следующих факторов:

        Формат переносимого исполняемого файла – это тип формата, используемый в 32- и 64-разрядных операционных системах Windows, который включает в себя такие элементы, как объектный код, файлы шрифтов DLL и встроенные дампы ядра для выполнения в хост-системе. Понимание формата файла PE важно при обратном проектировании или выполнении анализа вредоносных программ в подозрительном исполняемом файле, особенно при ручном анализе файла с помощью декомпилятора или отладчика.

        Заголовок переносимого исполняемого (PE) файла

        Исполняемые файлы имеют стандартизированную структуру, называемую Common Object File Format (COFF). PE-файлы представляют собой исполняемый файл в формате COFF, используемый в операционных системах Windows, инкапсулирующий такие форматы, как исполняемый файл (.exe, .cpl, .sys и т. д.), объектный код и библиотеки DLL. Формат файла PE содержит неотъемлемую информацию, необходимую ОС Windows для эффективной загрузки и выполнения файла. Понимание различных компонентов PE-файла имеет основополагающее значение для выполнения анализа вредоносных программ.

        Формат файла PE содержит структуру данных, которая позволяет операционной системе идентифицировать необходимые компоненты, необходимые для выполнения файла, включая такую ​​информацию, как метаданные, относящиеся к типу файла, функциям импорта и экспорта, адресам памяти и прочему.

        Область разделов формата PE содержит несколько компонентов, которые важно понимать для анализа вредоносного ПО, наиболее часто встречающиеся из них:

        • .text: содержит исполняемый компонент программы, которую будет выполнять операционная система.Это должен быть единственный раздел с правами на выполнение и содержащий резидентный код.
        • .rdata: содержит информацию об импорте и экспорте. Его также можно использовать для хранения других данных только для чтения, используемых программой. Разделы импорта и экспорта можно разделить на .idata и .edata соответственно.
        • .data: содержит глобальные данные, необходимые программе.
        • .rsrc: содержит ресурсы, используемые приложением, такие как значки, изображения, меню и строки.


        < /p>


        PEStudio – вид в разрезе

        Каждый из приведенных выше разделов имеет собственный заголовок, в котором указаны размеры разделов, как дисковых, так и виртуальных. Как правило, размер должен быть относительно близким при исследовании файлов, исключением является раздел .data, который обычно имеет большее несоответствие в переменных размера. Несоответствие размера может свидетельствовать об упакованном программном обеспечении, поскольку код упаковки/распаковки будет загружен в память.

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

        Связанные библиотеки и функции


        PEStudio — представление импорта функций


        Dependency Walker — представление импорта функций

        Идентификация связанных библиотек исполняемых файлов, будь то статически, во время выполнения или динамически, обеспечивает хорошее понимание функциональности вредоносного ПО. Общие библиотеки позволяют нескольким программам совместно использовать общие функции без необходимости написания кода с нуля. Связанные библиотеки перечислены в заголовке PE как Imports

        .
        • Статически связанные библиотеки. Наименее распространенный метод, предполагающий импорт всей библиотеки в собственный код программы.
        • Связывание с библиотекой среды выполнения. Обычно используется вредоносными программами. Связывание среды выполнения загружает библиотеку только тогда, когда это необходимо. Существует несколько функций Windows, включая «LoadLibrary» и «GetProcAddress», которые позволяют использовать любую функцию в любой библиотеке, что затрудняет статический анализ этих файлов, поскольку точные функции и импорт не указаны.
        • Динамически связанные библиотеки: они обеспечивают лучший способ понять, что такое функции программы, поскольку библиотеки импорта загружаются при выполнении, и часто точные вызываемые функции перечислены в заголовке PE. (На изображении слева показан пример, две библиотеки загружены с перечислением отдельных импортов).

        Экспортированные функции

        Исполняемые файлы редко экспортируют сами по себе, однако при анализе подозрительной DLL важно проверить доступные экспорты. Экспорты — это функции, которые могут быть вызваны для использования импортирующим приложением. Обычное программное обеспечение обычно следует стандартному соглашению об именах, как показано в приведенных выше функциях Kernel32.dll, однако авторы вредоносных программ могут и часто пытаются ввести аналитиков в заблуждение, называя функции неправильным или бессмысленным образом.

        Погружение в формат файла PE — Структура файла PE — Часть 1: Обзор

        Введение

        Цель этого поста — дать общее представление о файловой структуре PE, не вдаваясь в подробности.

        PE-файлы

        PE означает Portable Executable. Это формат файлов для исполняемых файлов, используемых в операционных системах Windows, он основан на формате файлов COFF (Common Object File Format).

        Не только файлы .exe являются PE-файлами, библиотеки динамической компоновки ( .dll ), модули ядра ( .srv ), приложения панели управления ( .cpl ) и многие другие также являются PE-файлами.

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

        Обзор структуры


        Если мы откроем исполняемый файл с помощью PE-bear, мы увидим то же самое:


        Заголовок DOS

        Каждый PE-файл начинается со структуры длиной 64 байта, которая называется заголовком DOS. Это то, что делает PE-файл исполняемым файлом MS-DOS.

        Заглушка DOS

        После заголовка DOS идет заглушка DOS, которая представляет собой небольшой исполняемый файл, совместимый с MS-DOS 2.0, который просто печатает сообщение об ошибке, в котором говорится: «Эта программа не может быть запущена в режиме DOS», когда программа запущена в режиме DOS.

        Заголовки NT

        Часть "Заголовки NT" состоит из трех основных частей:

        Таблица разделов

        Таблица разделов следует сразу за необязательным заголовком, это массив заголовков разделов изображения, для каждого раздела в PE-файле есть заголовок раздела.
        Каждый заголовок содержит информацию о разделе, к которому он относится.

        Разделы

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

        Заключение

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

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

        Обзор

        Файл PE состоит из нескольких частей. Они кратко изложены ниже, затем по каждой части вводится более подробная информация. Ниже приведены определения типов полей. PE-файлы хранятся в порядке с прямым порядком байтов, таком же, как в x86.


        Заглушка DOS

        PE-заголовок

        Заголовок PE содержит информацию, относящуюся ко всему файлу, а не к отдельным частям, которые появятся позже. Минимальный заголовок содержит 4-байтовую подпись (0x00004550), тип машины/архитектуру исполняемого кода внутри, отметку времени, указатель на символы, а также различные флаги (является ли файл исполняемым, DLL, может ли адрес дескриптора приложения превышает 2 ГБ, нужно ли копировать файл в файл подкачки, если он запущен со съемного устройства и т. д.). Если вы не используете действительно урезанный статически связанный PE-файл для экономии памяти с жестко запрограммированной точкой входа и отсутствием ресурсов, то одного PE-заголовка недостаточно.

        Необязательный заголовок

        Необязательный заголовок PE следует непосредственно за стандартным заголовком PE. Его размер указан в заголовке PE, который вы также можете использовать, чтобы узнать, существует ли необязательный заголовок. Необязательный заголовок PE начинается с 2-байтового магического кода, представляющего архитектуру (0x010B для PE32, 0x020B для PE64, 0x0107 ROM). Это можно использовать в сочетании с типом машины, чтобы увидеть в заголовке PE, чтобы определить, работает ли PE-файл в совместимой системе. Есть несколько других полезных переменных, связанных с памятью, включая размер и виртуальную базу кода и данных, а также номер версии приложения (полностью задается пользователем, некоторые утилиты обновления используют это, чтобы определить, доступна ли более новая версия), запись точку и количество каталогов (см. ниже).

        Часть необязательного заголовка относится к NT. Это включает в себя подсистему (консоль, драйвер или приложение с графическим интерфейсом), сколько места в стеке и куче нужно зарезервировать, а также минимальную требуемую операционную систему, подсистему и версию Windows. Вы можете использовать свои собственные значения для всех этих параметров в зависимости от потребностей вашей ОС.

        Каталоги данных

        Позиция (PE/PE32+) Раздел
        96/112 Адрес и размер таблицы экспорта. Тот же формат, что и у .edata
        104/120 Адрес и размер таблицы импорта. Тот же формат, что и у .idata
        112/128 Адрес и размер таблицы ресурсов. Тот же формат, что и .rsc
        120/136 Адрес и размер таблицы исключений. Тот же формат, что и у .pdata
        128/144 Смещение и размер таблицы сертификатов атрибутов (не RVA). См. Подписанный PE ниже
        136/152 Адрес и размер базовой таблицы перемещений. Тот же формат, что и у .reloc
        144/160 Начальный адрес и размер отладочных данных. Тот же формат, что и у .debug
        152/168 Архитектура, зарезервировано MBZ
        160/176 Global Ptr, RVA значения, которое должно быть сохранено в регистре глобального указателя. Член size этой структуры должен быть установлен равным нулю.
        168/184 Адрес и размер таблицы локального хранилища потока (TLS). Тот же формат, что и у .tls

        Разделы

        Файл PE состоит из разделов, которые состоят из имени, смещения внутри файла, виртуального адреса для копирования, а также размера раздела в файле и в виртуальной памяти (которые могут отличаться, в зависимости от случае разница должна быть очищена 0) и соответствующие флаги. Разделы обычно следуют универсальным именам (.text", ".rsrc" и т. д.), но это также может варьироваться в зависимости от компоновщика и в некоторых случаях может определяться пользователем, поэтому лучше полагаться на флаги, чтобы определить, является ли раздел исполняемым или доступным для записи. что, если у вас есть пользовательские данные, которые вы хотите встроить в исполняемый файл, размещение их внутри раздела и идентификация их по имени раздела может быть хорошей идеей, поскольку вы не будете изменять формат PE, а ваш исполняемый файл будет оставаться совместимым с инструментами PE.

        Относительная виртуальная база — это фраза, которая часто встречается в документации по PE. RVA — это адрес, по которому что-то существует после загрузки в память, а не смещение в файле. Чтобы вычислить адрес файла из RVA без фактической загрузки разделов в память, вы можете использовать таблицу записей разделов. Используя виртуальный адрес и размер каждого раздела, вы можете определить, к какому разделу относится RVA, а затем вычесть разницу между виртуальным адресом раздела и смещением файла.

        Заголовок раздела

        Каждый раздел имеет запись в таблице заголовков разделов.

        В связке asm

        если в nasm вы объявляете такой блок кода:

        сегменты будут отображаться как разделы. Используя это, можно разделить C и Asm, поскольку компоновщик не будет автоматически объединять .code и .text, что является нормальным выводом компиляторов C.

        Независимый от позиции код

        Если в каждом разделе указано, по какому виртуальному адресу его загружать, может возникнуть вопрос, как несколько библиотек DLL могут существовать в одном виртуальном адресном пространстве без конфликтов. Это правда, что большая часть кода, который вы найдете в PE-файле (DLL или другом), зависит от позиции и связана с определенным адресом. Однако для решения этой проблемы существует структура, называемая таблицей перемещений, которая прикрепляется к каждой записи раздела. По сути, таблица представляет собой ОГРОМНЫЙ длинный список всех адресов, хранящихся в этом разделе, поэтому вы можете сместить его в место, где вы загрузили раздел.

        Поскольку адреса могут указывать на границы раздела, перемещение следует выполнять после загрузки каждого раздела в память. Затем повторите по каждому разделу, просмотрите каждый адрес в таблице перемещений, выясните, в каком разделе находится RVA, и добавьте/вычтите смещение между связанным виртуальным адресом этого раздела и виртуальным адресом раздела, в который вы его загрузили.

        Подписанный PE с таблицей сертификатов атрибутов

        Для безопасной загрузки в EFI такая подпись обязательна. Ничего не стоит тот факт, что формат PE позволяет встраивать несколько сертификатов в один PE-файл, но реализации встроенного ПО UEFI обычно позволяют использовать только один сертификат, который должен быть подписан Microsoft KEK. Если прошивка позволяет установить больше KEK (нетипично), то можно использовать и другие сертификаты.

        Загрузить PE-файл очень просто;

        <р>1. Извлеките из заголовка точку входа, размеры кучи и стека.

        <р>2. Перебрать каждый раздел и скопировать его из файла в виртуальную память (хотя это и не обязательно, хорошо бы сбросить разницу между размером раздела в памяти и в файле до 0).

        <р>3. Найдите адрес точки входа, найдя правильную запись в таблице символов.

        <р>4. Создайте новый поток по этому адресу и начните выполнение!

        Чтобы загрузить PE-файл, для которого требуется динамическая DLL, вы можете сделать то же самое, но проверьте таблицу импорта (называемую каталогом данных), чтобы узнать, какие символы и PE-файлы требуются, таблицу экспорта (называемую также каталог данных) внутри этого PE-файла, чтобы увидеть, где находятся эти символы, и сопоставить их после того, как вы загрузили разделы этого PE в память (и переместили их!) И, наконец, помните, что вам придется рекурсивно разрешать импорт каждой DLL Таблицы и некоторые библиотеки DLL также могут использовать приемы для ссылки на символ в загружаемой библиотеке DLL, поэтому убедитесь, что ваш загрузчик не застрял в цикле! Хорошим решением может быть регистрация загруженных символов и их глобальный характер.

        Также может быть хорошей идеей проверить правильность полей Machine и Magic, а не только подписи PE. Таким образом, ваш загрузчик не будет пытаться загрузить 64-битный двоичный файл в 32-битный режим (это наверняка вызовет исключение).

        64-битные PE очень похожи на обычные PE, но тип машины, если AMD64, 0x8664, а не 0x14c. Это поле находится сразу после подписи PE. Магическое число также меняется с 0x10b на 0x20b. Волшебное поле находится в начале необязательного заголовка. Кроме того, член BaseOfData необязательного заголовка не существует. Это связано с тем, что элемент ImageBase расширяется до 64 бит. BaseOfData удаляется, чтобы освободить место для него

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