Главная » Статьи » Веб » Вирусология |
Теперь пришло время узнать подробнее об одной вещи, о которой мы много говорили, о PSP. PSP (PROGRAM SEGMENT PREFIX) Его структура выглядит следующим образом:
Давайте объясним шаг за шагом, потому что эта структура очень важна.
FCB (FILE CONTROL BLOCK) Есть два вида FCB: обычные и расширенные. Здесь приводится структура обычного FCB.
Если FCB расширенные, все вышеуказанные смещения сдвигаются на семь байтов, а первые 7 байтов выглядят следующим образом:
Определить, является ли FCB обычным или расширенным - это посмотреть, равен ли первый байт FFh. Если это так, то FCB расширенный, потому что в обычном FCB такого быть не может. Есть вид невидимости, который меняет некоторые значения FCB, чтобы замаскировать заражение, но это будет рассмотрено в главе о невидимости. MCB (MEMORY CONTROL BLOCK) Она объясняется в главе о резидентных вирусах (следующая глава). А здесь приводится ее формат:
DTA (DISK TRANSFER AREA) Эта структура очень важна в написании вирусов. Давайте посмотрим ее:
Оригинальный DTA сохраняется по смещению 80h в PSP. Мы можем сохранить его с помощью функции 1Ah INT 21h. IVT (INTERRUPT VECTOR TABLE) Это не "настоящая" структура. Гм... Дайте мне объяснить... IVT - это место, где хранятся все векторы прерываний (вау, гениально!). Все векторы находятся в номер_прерывания*4. Представьте, что нам нужны векторы INT 21h в DS:DX... Это просто: xor ax,ax Почему мы очищаем DS? Потому что IVT находится от 0000:0000 и выше. Эти манипуляции (без использования DOS) - это прямой путь для получения и помещения векторов прерываения. Хорошо, все это и больше изложено в главе о резидентных вирусах. Эй... Я забыл привести немного графики :).
Вы можете представить, что "рваная строка" означает, что есть 256 прерываний, а я хотел немного прооптимизировать этот документ (я не хочу, чтобы он занимал 5 метров!) ;). SFT (SYSTEM FILE TABLE) Эта структура действительно крута. Она может помочь вам сделать ваш код гораздо более мощным и оптимизированным. Это как FCB, но, как вы можете видеть, она еще мощнее. С этим таблицами мы можем сделать невидимость, изменить файловый указатель, режим работы с открытым файлом, атрибуты... Здесь у вас есть структура для DOS 4+ (я верю, что в мире не осталось людей, которые используют DOS 3 или что-нибудь в этом роде). Хорошо, если вы хотите, чтобы ваш код работал также и в DOS 3, обратитесь к RBIL. Hо SFT в DOS 3 очень похожа на эту. Все важные значения находятся в том же месте :).
Хм... Я забыл сказать, как получить доступ к SFT... Далее идет процедура, которая помещает SFT в ES:DI, принимая хэндл файла в BX. GetSFT: Я настоятельно рекомендую вам сохранить значения AX/BX (BX особенно важен: мы помещаем сюда хэндл файла). (*) Отмеченные поля используются SHARE.EXE DIB (DOS INFO BLOCK) С помощью DIB мы можем получить доступ к очень важным структурам, которые нельзя достигнуть другим образом. Местоположение этих структур не фиксировано. Мы должны использовать функцию 52h прерывания 21h. Это недокументированная функция DOS. Вызвав эту функцию, мы получим доступ к DIB в ES:BX.
DPB (DRIVE PARAMETER BLOCK) Эта структура предоставляет нам очень полезную информацию для наших целей. Мы можем узнать, где она находится, используя второй указатель в DIB (смотри выше).
ТАБЛИЦА ПАРТИЦИЙ Эта структура хорошо известна каждому, кто писал бут-инфекторы. Это первый блок жесткого винта. Он всегда первый, вне зависимости от того, находися ли мы на дискете или на жестком винте. Мы также можем называть его MBR (Master Boot Record), если это HDD, или Boot Sector, если FD. Таблица партиций - это массив из четырех элементов, которые можно найти по смещению 01BEh в блоке. Далее идет формат каждого из этих элементов:
BPB (BIOS PARAMETER BLOCK) В системах, основанных на DOS, загрузочная запись начинается с перехода, за которым следует структура BPB.
| |
Просмотров: 331 | Комментарии: 1 | Рейтинг: 0.0/0 |
Всего комментариев: 0 | |