Бут-лоадер для драйверов
------------------------

Позволяет загружать специально собранные драйвера в момент старта ОС.
Драйвер загружается до инициализации ядра NT, а значит до старта PatchGuard, и может патчить любой
 ядерный код. Драйвер получает управление раньше всех других загружаемых драйверов (в том числе раньше
 всех boot-load драйверов) и может мониторить и влиять на их загрузку.
Цифровая подпись драйвера не требуется.

Поддерживаются все ОС Windows, начиная с XP, и по Windows 8, включительно.
Поддерживаются две архитектуры: x86 и AMD64 (EM64T).
Бут-лоадер работает со всеми типами NTFS-разделов.

Собраный проект состоит из трех основных частей:
- начальный загрузчик (IPL);
- специально собранный, с учетом возможности старта до ядра NT, драйвер;
- программа-установщик (или библиотека-установщик (DLL));

Код IPL метаморфный, состоит из некоторого кол-ва блоков, которые перемешиваются в случайном порядке при
 каждой сборке проекта. Код IPL зашифрован, и расшифровывается динамически, в процессе выполнения.
Таким образом, каждый свежесобраный IPL бинарно отличен от предыдущего.
Драйвер также шифруется при записи на диск и расшифровывается начальным загрузчиком при старте.

Имеется ограничение на размер драйвера: в силу технических особенностей работы IPL, размер драйвера
 не может превышать 100КБ.

Проект собирается с помощью MS Visual Studio 2005 и MS Windows 7 WDK.


Дополнительные компоненты
-------------------------

Драйвер может содержать в себе следующие дополнительные компоненты:

- мэнеджер виртуальной ФС. Создает виртуальную, зашифрованую(RC6) файловую систему (VFS) в неразмеченных 
	секторах диска. Предоставляет User-mode интерфейс для работы с файлами на этой ФС.
- фильтр доступа к диску. Блокирует доступ "извне" к секторам, содержащим IPL и виртуальную ФС. Скрывает
 	виртуальную ФС.
- инжектор DLL. Позволяет загружать(инжектить) DLL, находящиеся на VFS или прикрепленные, непосредственно к
 	файлу драйвера, в заданные процессы. Имеет интерфейс для управления инжектами из user-mode.
- загрузчик драйверов. Предоставляет интерфейс для возможности загрузки сторонних неподписанных драйверов.

- стек протоколов TCP/IP (включая: ARP, ICMP, DNS). Предоставляет драйверам и user-mode приложениям интерфейс 
	для работы с сетью, совместимый с BSD-sockets.


Состав проекта
--------------
  1. Генератор IPL(\BkGen).
  2. Библиотека лоадера (\BkLib).
  3. Программа-установщик (\BkSetup).
  4. Библиотека-установщик (\SetupDll).
  5. Драйвер-инжектор (\KLoader).
  6. Библиотека виртуальной ФС (\FsLib).
  7. Библиотека для загрузки сторонних драйверов (\DrvLdr).
  8. Библиотека-фильтр для защиты секторов загрузчика и виртуальной ФС (\BkFilter).
  9. Утилита для прикрепления файлов(\FJ).
  10. Утилита для управления виртуальной ФС(\VFS)
  11. Батники для сборки примерного установщика с примерами DLL (\BkBuild).


Генератор IPL
-------------
  Собирается только для х86 в исполняемый файл BkGen.exe
  При запуске создает файл VBR.COM содержащий метаморфный код начального загрузчика.
  При каждом запуске генерирует уникальный загрузчик.


Библиотека лоадера
------------------
  Собирается под х86 и под AMD64 в статическую библиотеку (.lib).
  Содержит функции, необходимые для установки и инициализации лоадера.
  Импортируется установщиком и драйвером. Подробнее см. файл bklib.h.


Программа-установщик
--------------------
  При сборке ищется файл лоадера VBR.COM и интегрируется в ресурсы.
  Собирается только под x86 в исполняемый файл BkSetup.exe. 


Библиотека-установщик
---------------------
  Собирается под х86 и х64 в динамическую библиотеку SetupDll.dll
  Библиотека экспортирует одну функцию: ULONG BkInstall(BOOL bReboot), 
  при вызове которой, производится установка загрузчика в системе.
  В случае ошибки, функция возвращает код ошибки Win32.


Драйвер-инжектор
----------------
  Собирается под х86 и AMD64 как драйвер NT (kloader.sys).
  Инжектит прикрёпленные DLL в указаннае процессы. Список DLL и процессов
  задается файлом конфигурации для утилиты FJ. 


Библиотека виртуальной ФС
------------------------- 
  Собирается под х86 и AMD64, линкуется в драйвер-инжектор (kloader.sys).
  Создает виртуальную файловую систему в неразмеченной области системного жесткого диска.
  В случае отстутсвия неразмеченной области достаточного размера, уменьшается
  размер последнего раздела на диске.
  ФС представляет собой модифицированную FAT16. Размер кластера равен размеру физического 
  сектора диска. Максимальный поддерживаемый объем виртуального диска ~32Мб.
  Имена файлов в формате 8.3, длинные имена не поддерживаются. Каталоги не поддерживаются.
  ФС полностью зашифрована посредством RC6.


Библиотека для загрузки сторонних драйверов
-------------------------------------------
  Собирается под х86 и AMD64, линкуется в драйвер-инжектор (kloader.sys).
  Позволяет загружать и выполнять образы сторонних драйверов ядра NT.


Библиотека-фильтр для защиты секторов загрузчика и виртуальной ФС
-----------------------------------------------------------------
  Собирается под х86 и AMD64, линкуется в драйвер-инжектор (kloader.sys).
  Фильтрует низкоуровневые запросы на чтение/запись секторов диска.
  Запрещает изменение(запись) секторов, содержащих начальный загрузчик.
  Блокирует изменение сторонними приложениями и драйверами секторов, содержащих 
  виртуальную ФС. При чтении секторов, содержащих виртуальную ФС, обнуляет 
  их содержимое, маскируя таким образом, наличие ФС.
  

Утилита для прикрепления файлов
-------------------------------
  Собирается только под х86 в исполняемый файл FJ.EXE.
  Используется для присоединения инжектируемых DLL к файлу драйвера и для
  присоединения файла драйвера к инсталлеру. Подробнее см. \FJ\ReadMe.txt.


Батники для сборки примерного установщика
-----------------------------------------
  BkBuild.bat - собирает инсталлер с прикреплёнными к нему драйверами kloader.sys
                для х86 и amd64, соответственно. К каждому драйверу прикрепляются
                DLL для инжекта.
  BkSetup.cfg - конфигурационный файл для сборки прграммы-установщика и прикрепления к нему драйверов.
  setupdll.cfg- конфигурационный файл для сборки библиотеки-установщика и прикрепления к ней драйверов.
  demo32.dll  - 32х-битная демо-библиотека.
  demo64.dll  - 64х-битная демо-библиотека.


Порядок сборки
--------------
  1. При помощи Visual Studio 2005 собрать весь проект. Сначала собрать под i386,
     затем, под amd64.
  2. Открыть консоль (CMD.EXE), зайти в папку \BkBuild и запустить из консоли
     BkBuild.exe
  3. Забрать готовый установщик из папки \BkBuild\Release.