Библиотека Интернет Индустрии I2R.ru |
|||
|
Вирусы для среды .NET CLRЧто такое MS .NET? Microsoft .NET - это новая, основанная на компонентах, платформенно независимая архитектура. Описание .NET может занять несколько килобайт текста и я постараюсь выбирать лишь самое главное. .NET FrameWork SDK - это набор приложений предоставляющих нам функциональность .NET на наших non-dotnet операционных системах. Полностью .NET ОС будет выпущена как второй потомок WinXP. Однако, Microsoft пытается пропагандировать свою новую платформу точно также как в свое время это происходило с Win32s - ограниченная Win32 среда для Win16 систем. Сегодня у нас есть .NET FrameWork SDK - по сравнению с полноценной .NET архитектурой функциональности соотносятся примерно так же, как Win32s с Win32. .NET FrameWork SDK предоставляет нам среду .NET Common Language Runtime. Это сердце .NET и именно о ней пойдет речь в этой статье. (Я опустил исторический обзор и начало введения в среду исполнения [сейчас подобных материалов на русском языке достаточно]. прим.пер) Сборка - не просто обычный EXE-файл - это целое приложение в одном файле. Сборки содержат всю необходимую программе информацию. Представьте себе сборку как исполняемый файл (EXE), компоненты (DLL/OCX), библиотеки типов (TLB), ресурсы (RES) и так далее, собранные вместе. Файл будет содержать метаданные, данные программы и другую информацию, необходимую для выполнения. Каждая сборка содержит список всех своих компонентов - манифест. MSIL Мы рассмотрели
необходимый нам минимум внутреннего устройства .NET CLR. Теперь попытаемся
понять как устроен метакод (MicroSoft Intermediate Language). Создадим
такой шаблон в C# (sample.cs): <------------------
врезка ------------------> using
System; <------------------
врезка ------------------> Компилируем
так: CSC sample.cs и получаем новый исполняемый файл sample.exe. Открыв
его в любом просмотрщике вы сразу увидите, что это не стандартный
PE File. Он не содержит кода, зато в нем достаточно "странных"
структур. Вы смотрите на скомпилированную в MSIL программу sample.cs. Теперь
запустим ILDASM.EXE и получим код проекта в MSIL. <------------------
врезка ------------------> ___[MOD]
D:\!!work\.net\sample.exe <------------------
врезка ------------------> Если
удалить все ненужную информацию (комментарии, ресурсы, лишний код..),
то вы увидите вот это (sample.il): <------------------
врезка ------------------> assembly
extern mscorlib Это
и есть метаданные. Выглядят они достаточно просто и я думаю у программистов
не должно возникнуть проблем с интуитивным пониманием этого кода.
Возможно стоит объяснить что такое "mscorlib" - на самом
деле это динамически присоединяемая библиотека, хранящаяся у вас на
диске и содержащая все библиотеки базовых классов. Теперь,
когда мы удалили из MSIL кода все лишнее (лишнее, но не по мнению
компилятора) запускаем ILASM.EXE и восстанавливаем MSIL EXE: ILASM
sample.il Получили
два килобайта чистого <Хелло Ворда>. Что
делаем теперь? Предлагаю изучить структуру файла. Что же делает из
обычного PE File исполняемый файл MSIL? Посмотрите не это: <------------------
врезка ------------------> File
type: WINDOWS EXECUTABLE Optional
Header: <------------------
врезка ------------------> Заголовок
выглядит абсолютно нормально. Смотрим ниже. <------------------
врезка ------------------> Data
Directory: Import
Table:
0x00002280 0 _CorExeMain Section
Table:
Section Header #2
<------------------
врезка ------------------> Вот
оно! Просматривая структуру файла можно заметить, что MSIL :0040229E
FF2500204000 jmp [SAMPLE.00402000] осуществляет
переход на эту функцию внутри MSCOREE.DLL. Очевидно, что _CorExeMain
- это движок, вызываемый любой программой в начале исполнения и осуществляющий
трансляцию метакода. Первые 8 байт секции ".text" зарезервированы для виртуального адреса _CorExeMain API, а следующие 72 байта для заголовка CLR. Первый байт заголовка содержит его размер (72 байта). Затем следуют записи с информацией о файле (флаги, версия компилятора, точка входа) и после этого можно увидеть каталог данных (data directory), как и в привычном PE заголовке. Обычное
содержимое этой структуры - каталог метаданных, ресурсов, Strong Name
сигнатуры, таблицы CodeManager, Все
последующие мысли вполне могут быть моими спекуляциями и догадками.
Я не уверен в этих вещах и только мой опыт позволяет мне утверждать,
что это может быть так. Если у вас есть более точная информация -
пожалуйста свяжитесь со мной. Похоже,
что первый(е) байт(ы) (402050h) - это зависящие от метода\модуля записи
и непосредственно за ними следуют метаданные. Я заметил, что записи
метаданных всегда хранятся ниже метакода. 424A5342h ("BSJB")
похоже на magic Я
надеюсь что где-нибудь в сети появится документация по внутренним
форматам MSIL/CLR, которая позволит нам лучше понять эти вещи. Итак, что же полезного можно извлечь из этого исследования? Во-первых похоже на то, что Microsoft не собирается менять опкоды и это исследование может быть продолжено более детально. Также при помощи MSDN и утилит поставляемых с .NET возможно создание кода, перезаписывающего MSIL PE файл на основе собранной в этом исследовании информации. Если кто-то досконально разберется со структурой заголовка CLR, то я уверен, что появление первого MSIL .NET вируса не заставит долго себя ждать. Если существуют инфекторы Java, то почему бы не быть созданному и вирусу под эту платформу? |
|
2000-2008 г. Все авторские права соблюдены. |
|