PE - формат исполняемого файла.
Существует несколько стандартных форматов исполняемых файлов. Самый старый, унаследованный от CP/M формат файлов с расширением COM применяется в MS-DOS и позволяет использовать только один сегмент в 64K пямяти. При этом блок PSP занимает первые 100h (256 байт) и прога должна начинаться с директивы ORG 100. Также существует и ряд более продвинутых форматов исполняемых файлов. Хорошие проги умеют создавать исполняемый файл во многих форматах - a.out, COFF, PE, ELF и др.
Но основным форматом исполняемых файлов в Windows является формат Portable Executable (PE). Все файлы с расширением SYS, EXE, DLL, OCX имеют имено этот формат.
Поэтому на этой страничке мы коснемся трех вопросов:
- Описание PE-формата.
- Чем смотреть на PE-файлы (в обычном и .NET варианте).
- Дополнительные файлы, помогающие понять содержимое PE-Файлов.
Хороший справочник всех форматов Windows-файлов (кроме как в MSDN) можно посмотреть здесь. А с моего сайта можно сгрузить четыре различных описания формата PE:
- Microsoft Corporation Microsoft Portable Executable and Common Object File Format Specification.
- Yinrong Huang Vulnerabilities in Portable Executable (PE) File Format For Win32 Architecture.
- Matt Pietrek Peering Inside the PE: A Tour of the Win32 Portable Executable File Format.
- Runtime File Format for Common Language Runtime .
Конечно исполняемый файл можно посмотреть с помощью WinHex, но в практическом плане это нереально, ибо ничего конкретного так не увидишь. WinHex применяется только для просмотра BSS секции с неициализированными данными, которые игнорируют обычные отладчики, но которые очень любит всякая вирусня для размещения своих данных.
Из исполняемого файла можно почерпнуть много полезной информации, чтобы смотреть его WinHex'ом. Например, список API, которые вызывает прога. Лучший инструмент для просмотра списка импортируемых функций - Dependency Walker (Depends.exe) из комплекта Windows 2000 Support Tools.
На рисунке показано как ядро Windows (NTOSKRNL.EXE) экспортирует предоставляемые им сервисы прикладным программам (которыми пользуются например, программы Native API - Ntdll.dll, которыми в свою очередь уже пользуются KRNL32.dll, USER32.dll, GDI32.dll, которые в свою очередь превращаются уже в команды языка программирования типа WriteFile, CreateProcess, OpenWindow, NetworkSend и т.д.) Посмотреть статически взаимосвязь между модулями очень удобно именно с помощью Dependency Walker.
Секции в PE-файле могут быть нескольких видов. Для полного дампирования всего исполняемого файла (что нужно например для изучения вирусов) можно воспользоваться разными утилитами, но существуют две отличные бесплатные утилиты. Одна из них PEDUMP из MSDN выдает дамп в строчном режиме, другая PeBrewsePro от компании Smidfeonsoft - в оконном режиме.
Что касается дампирования .NET сборок, то могу порекомендовать программы с этого сайта:
Также с моего сайта можно сгрузить все три указанные бесплатные проги для работы с исполняемыми форматами файлов:
- PeDump.
- PeBrowsePro.
- Depends.
- NET-инстрменты.
- Еще один хороший инструмент, умеющий работать с исполняемыми файлами - RcHunter, только он небесплатный, а с креками для него плохо.
Разумеется с исполняемым файлом можно работать не только статически (как с записанным на диске текстом) - можно организовать для него виртуальную память с помощью IDAPro, загрузить его в виртуальную память отладчика, дизассемблировать и посмотреть в динамике процесс выполнения - но это уже другая задача и там будут свои проблемы. Подробнее об этом в разделе средства мониторинга программ. Но очень часто достаточно просто посмотреть на исполняемый файл как на текст, не исполняя его - а для этого и нужно знание PE-формата и указанные выше утилитки. Посмотрите еще на эту тему статью Криса Касперски (часть1 , часть2).
Часто исполняемый файл существует не сам по себе, а с дополнительными файлами ресурсов (окошки, кнопки и т.д.). Об этом подробнее в разделе ресурсы.
Из исполняемого файла можно полностью вырезать отладочную символьную информацию, а также с исполняемым файлом можно связать отладочные символы в DBG или PDB формате. Именно эти отладочные символы загрузила здесь LiveKD. Подробнее об этом можно посмотреть в разделе Средства отладки программ.
К библиотечным исполняемым файлам типа OCX или DLL также могут прилагаться TLB-файлы с полным описанием всех классов на языке IDL. Это описание читается прогой OleView (сгрузить) - как видите, это даже удобнее чем просто исходный текст - налицо вся структура программы.
<SITEMAP> <MVC> <ASP> <NET> <DATA> <KIOSK> <FLEX> <SQL> <NOTES> <LINUX> <MONO> <FREEWARE> <DOCS> <ENG> <CHAT ME> <ABOUT ME> < THANKS ME> |