После исполнения инструкции sidt, 32-разрядный физический адрес таблицы IDT выталкивается со стека в регистр ebx и используется как базовый адрес для вычисления элемента таблицы IDT, который подлежит модификации. В листинге 12.3 показано, что для ссылки на элемент таблицы IDT, подлежащий модификации, используется константа HookExceptionNumber. В ИСХОДНОМ коде вируса CIH 1.5 мы также видим, что при ассемблировании константа HookExceptiohNumber будет заменена значением 4 или 6. Элемент 4 таблицы IDT соответствует исключению переполнения а элемент недействительного кода операции. Но в первоначальных исполняемых файлах вируса ни одно из этих значений никогда не использовалось. Вместо них использовалось значение 3, соответствующее исключению контрольной точки. Модификация эле мента 3 таблицы IDT имела свои преимущества, так как это сбивало с толкУ отладчики, таким образом усложняя для разработчиков антивирусов анализа кода вируса CIH. В листинге 12.4 показан фрагмент дизассемблированного кода вируса CIH, номер сборки 2690, в котором для перехода в ре — л — процедуре обработчика исключения. Эта процедура обозначена меткой MyExceptionHook. Переход к этой процедуре обработчика исключения и ее содержимое показаны вызывает исключение с помощью инструкции int, управление передается к метке MyExceptionHook. Во время исполнения этого перехода, контекст исполнения кода переключается из пользовательского режима в режим ядра. Поэтому к моменту прибытия к метке MyExceptionHook код вируса уже исполняется в режиме ядра. Это означает, что вирус в данный момент полностью контролирует систему. В этот момент флаг признака нуля не установлен, и отладочные регистры все еще содержат значения по умолчанию.
Рубрика: Женский интерес