Определение типа PE файла EXE с помощью PowerShell: пошаговое руководство

Определение типа PE файла EXE с помощью PowerShell

Файлы с расширением .exe представляют собой исполняемые файлы Windows и имеют структуру, называемую PE (Portable Executable). Каждый PE-файл содержит информацию о типе и архитектуре, под которую он был собран: 32-битная (x86), 64-битная (x64) или же универсальный (AnyCPU). Определение типа PE файла важно для системных администраторов, разработчиков и специалистов по безопасности, чтобы убедиться, что приложение совместимо с целевой системой.

В этой статье рассмотрим, как можно быстро и эффективно определить тип PE файла EXE, используя встроенные средства PowerShell.


Что такое PE тип файла?

PE (Portable Executable) – это формат файла, который используется Windows для исполняемых файлов (.exe) и динамических библиотек (.dll). В структуре PE файла содержатся различные заголовки и секции, которые описывают архитектуру, точки входа, библиотеки и другие параметры.

Основные типы PE, на которые обращают внимание:

  • 32-битный (x86) — предназначен для запуска на 32-битных версиях Windows.
  • 64-битный (x64) — предназначен для современных 64-битных систем.
  • AnyCPU — универсальный, может работать как в 32-битной, так и в 64-битной среде. Чаще актуален для сборок .NET.

Почему важно определить тип PE файла?

Знание типа PE файла позволяет:

  • Проверять совместимость приложений с операционной системой.
  • Анализировать безопасность и источники приложений.
  • Автоматизировать управление пакетами и установкой программ в корпоративных средах.
  • Избегать ошибок при запуске неподходящих версий программ.

Как определить PE тип файла EXE с помощью PowerShell

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

Вот пример скрипта PowerShell, который позволяет определить тип PE файла:

powershell
function Get-PEType {
param (
[string]$Path
)
$stream = [System.IO.File]::OpenRead($Path)
$br = New-Object System.IO.BinaryReader($stream)

try {
    # Проверяем сигнатуру 'MZ' в начале файла
    $mzSignature = $br.ReadUInt16()
    if ($mzSignature -ne 0x5A4D) {
        throw "Это не PE файл"
    }
    $stream.Seek(60, 'Begin') | Out-Null
    $peHeaderPointer = $br.ReadInt32()
    $stream.Seek($peHeaderPointer, 'Begin') | Out-Null
    $peSignature = $br.ReadUInt32()
    if ($peSignature -ne 0x00004550) {
        throw "Неверный PE заголовок"
    }
    $machine = $br.ReadUInt16()
    switch ($machine) {
        0x014c { return "32-битный (x86)" }
        0x8664 { return "64-битный (x64)" }
        default { return "Неизвестный тип: 0x{0:X}" -f $machine }
    }
}
finally {
    $br.Close()
    $stream.Close()
}

}

Использование:

$filePath = "C:\Path\To\Your\File.exe"
$type = Get-PEType -Path $filePath
Write-Output "Тип PE файла: $type"


Пояснение работы скрипта

  • Скрипт открывает файл и читает его первые байты, проверяя сигнатуру MZ (0x5A4D), которая характерна для PE-файлов.
  • Далее он читает смещение к PE-заголовку (обычно располагается по смещению 60 байт).
  • Затем проверяет сигнатуру PE\0\0 (0x00004550).
  • После этого считывает поле Machine, которое указывает архитектуру файла.
  • В зависимости от значения поля Machine скрипт возвращает тип PE файла: 32-битный или 64-битный.

Заключение

Определение типа PE файла — важная задача для профессионалов, работающих с Windows системами и ПО. PowerShell предоставляет удобный и быстрый способ сделать это без необходимости устанавливать сторонние утилиты. Используя приведённый скрипт, вы сможете автоматизировать проверку совместимости и анализ исполняемых файлов, что значительно повысит эффективность работы и безопасность вашей инфраструктуры.


Полезные советы

  • Скрипт можно расширить для поддержки других типов PE, например ARM.
  • Автоматизируйте проверку для целых директорий с файлами.
  • Используйте данное решение в процессе CI/CD для контроля версий исполняемых файлов.

Пробуйте, оптимизируйте и внедряйте в свой рабочий процесс скрипты PowerShell для повышения продуктивности и безопасности!

Источник

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *