внутри сети ДРОЗДОВ АНДРЕЙ AKA SULVERUS Спецвыпуск: Хакер, номер #072, стр. 072-044-2 В созданном объекте хранится информация о типах, которые его используют, поэтому такие типы называются самоописывающими. Среди сомоописывающих типов есть и встроенные: один из самых главных типов .NET - System.Object и тип для строковых данных System.String. Для того чтобы было проще понять - к самоописывающимся типам относятся классы. Классы могут состоять из полей, методов, свойств и событий (к событиям соответственно примыкают делегаты). Также к самоописывающим типам относятся массивы, за них отвечает класс System.Array. Вся иерархия типов видна на рисунке 1. С кодом разобрались, теперь перейдем к самому интересному - модели выполнения программ. [система выполнения кода.] Майкрософт ввела такое интересное понятие, как Общая Инфраструктура Языков - Common Language Infrastructure (CLI, не путать с CIL). Используя эту инфраструктуру, можно написать свой компилятор и свою систему выполнения. Таким образом, компания Майкрософт создала еще одну CLI под FreeBSD. Кроме того, во время работы программы куски кода могут докомпилироваться в нее при необходимости, это называется Just-in-time(JIT) Assemblie. Это нужно для оптимизации кода, уменьшения нагрузки на память и более удобного и корректного обновления программ. Когда компилируется подобный кусок кода, он помещается в специальный контейнер для JIT-компиляции (в документации от Майкрософт этот контейнер называется «кэшем сборок»). Одной из самых интересных для хакеров надстроек в системе выполнения кода является сборщик мусорных инструкций. Все время работы программы он следит за всем количеством инструкций, ссылок, методов, делегатов, переменных. Основная работа сборщика заключается в освобождении памяти от ненужного кода, созданных объектов и тому подобным. Также он создает своеобразную дефрагментацию в динамической памяти, чтобы обеспечить наиболее быструю работу приложения. Благодаря этому сборщику все предыдущие лазейки для хакеров закрыты, а ошибки утечки памяти или досрочного освобождения памяти теперь невозможны по определению. Правда, при наличии критической уязвимости в системе управления памятью, с системой можно творить все что угодно, а следовательно и сборщик мусора будет самым лакомым кусочком для хакера и самым главным объектом исследования. Конечно же, не все так легко, ведь для того, чтобы вклиниться и завладеть ядром, хакерам придется изрядно попотеть, поскольку в Майкрософт предусмотрели многое, сделав еще и своеобразного вышибалу для вредного кода. [знакомство с вышибалой.] Под словом «вышибала» я подразумевал верификатор кода. Это практически готовый антивирусный сканер, который комплексно исследует и проверяет весь выполняемый код вдоль и поперек. Как только код входит в компилятор (имеется ввиду Just-In-Time), он сразу же подвергается самым зверским проверкам со стороны верификатора. В процессе докомпилирования и верификации кода все делится на 4 группы: |