AI NuGet для FairPlay SDK
AI-ориентированная карта для дополнительной инфраструктуры драйвера FairPlay
Карта API FairPlay SDK
Справочная карта для необязательных API из EyeAuras.Memory.FairPlaySdk. Этот SDK даёт загрузку драйвера, низкоуровневую инфраструктуру подключения к устройству и адаптер FairPlayKDProcess для встроенного драйвера ядра FairplayKD.sys.
Важное ограничение
EyeAuras.Memory.FairPlaySdk загружает драйвер ядра через обычные Windows SCM API. Он не пытается обходить DSE/проверку подписи. Для реальных тестов загрузки драйвера нужны права администратора, совместимый хост, корректная политика подписи/загрузки драйверов и правильная идентичность устройства.
Путь к устройству по умолчанию основан на текущем проходе статического анализа по упакованной базе IDA 9.1: драйвер создаёт \DosDevices\FairplayKD{instance} и использует instance 0, если в реестре нет корректного переопределения.
Для чего это используют
- Добавить необязательную инфраструктуру драйвера FairPlay в инструмент или тестовый проект.
- Загружать и запускать встроенный драйвер
FairplayKD.sysчерез Windows SCM API. - Открывать устройство FairPlay через
CreateFile. - Отправлять сырые запросы
DeviceIoControl, пока протокол ещё исследуется. - Оборачивать текущий процесс как
IProcessи читать закреплённые буферы через команду драйвера FairPlay0x78. - Использовать дескриптор процесса, открытый через FairPlay, для записи, выделения памяти/смены защиты, запуска удалённого потока, manual mapping и APC-хелперов.
- Держать тесты настройки драйвера в
EyeAuras.FridaSdk.Tests, не закрепляя слишком рано предположения о протоколе.
Модель
EyeAuras.Memory.FairPlaySdk— это необязательный SDK-пакет.FairPlayDriverManagerнапрямую хранит имя службы по умолчанию, устройство, payload, встроенный ресурс и пути runtime-извлечения. Отдельного объектаFairPlayDriverServiceConfigнет.FairPlayDriverConnectionвладеет открытым дескриптором устройства, даёт доступ к сыромуDeviceIoControlи представляет команду0x87какOpenProcess.FairPlayKDProcessреализуетIFairPlayProcess, который расширяетIProcess,IProcessControlApi,IProcessSupportsManualMappingиIProcessSupportsUserApc.- Его backend памяти сейчас включает прямое чтение через драйвер только для вызывающего процесса, потому что команда
0x78пока не подтверждена как универсальное чтение удалённых процессов. FairPlayKDProcess.EnterOpenProcess()владеет lease со счётчиком ссылок для дескриптора целевого процесса, открытого через команду FairPlay0x87;WithOpenProcess()держит этот lease активным всё время жизни обёртки.- Для записи
FairPlayKDProcessиспользуетEnterOpenProcess(), а затем вызывает Win32WriteProcessMemoryс этим дескриптором, созданным драйвером. Команда0x7Cбыла исследована и ведёт себя как stub с успешным результатом, поэтому её нельзя считать подтверждённым примитивом записи FairplayKD. - Более глубокий статический проход по командам
0x78..0x8Fобнаружил хелперы чтения/записи файлов и объектов (0x89/0x8A) и хелперы запроса/записи реестра (0x8C..0x8F), но не выявил универсальной команды записи в виртуальную память процесса. - Упакованный payload встраивается из
Payloads/FairplayKD.sysв проекте SDK. - Runtime-копия извлекается в local app data перед созданием или обновлением SCM-службы.
- DTO для команд конкретного протокола и более широкие хелперы удалённого чтения/записи не должны попадать в SDK, пока протокол не понятен.
Детали API
FairPlayDriverManager.DefaultServiceName— имя SCM-службы по умолчанию, сейчасFairplayKD.FairPlayDriverManager.DefaultDevicePath— Win32-путь к устройству по умолчанию, сейчас\\.\FairplayKD0.FairPlayDriverManager.DefaultDriverFileName— имя упакованного payload,FairplayKD.sys.FairPlayDriverManager.Create(loadDriver)— при необходимости извлекает и запускает встроенную службу драйвера, затем открывает подключение к устройству.IFairPlayDriverManager— контракт фабрики, который предоставляет имена службы/устройства/payload иCreate(loadDriver).FairPlayDriverConnection.Open()— открывает Win32-путь устройства с правами на чтение и запись.FairPlayDriverConnection.DeviceIoControl(...)— отправляет сырой IOCTL-запрос.FairPlayDriverConnection.OpenProcess(processId, accessMask)— открывает дескриптор целевого процесса через команду FairPlay0x87.IFairPlayDriverConnection— контракт подключения к устройству для состояния открытия и сырых вызовов IOCTL, плюс типизированный хелперOpenProcess.FairPlayKDProcess.ByProcessId(processId)— создаётIFairPlayProcessдля уже существующего устройства FairPlay.FairPlayKDProcess.ByProcessName(processName)— находит локальный процесс по имени и создаётIFairPlayProcess.FairPlayKDProcess.WithLoadDriver(loadDriver)— создаёт builder и управляет тем, нужно ли загружать встроенный драйвер перед открытием обёртки процесса.FairPlayKDProcess.WithOpenProcess(openProcess)— создаёт builder и управляет тем, должна ли обёртка процесса держать открытый через FairPlay дескриптор процесса в течение всего своего срока жизни.IFairPlayProcess.EnterOpenProcess()— открывает дескриптор целевого процесса через команду FairPlay0x87и держит его активным, пока не будет освобождён возвращённый lease.IFairPlayProcess— контракт процесса FairPlay; расширяет базовыеIProcess,IProcessControlApi,IProcessSupportsManualMappingиIProcessSupportsUserApc.IFairPlayProcess.AllocateMemory(...),FreeMemory(...),ProtectMemory(...),CreateThread(...),ExecuteCode(...),InjectDllViaManualMapping(...)иQueueUserApc(...)используют дескриптор процесса, открытый через FairPlay, вместе с обычными Win32 API процесса/потока.IFairPlayProcessBuilder— контракт builder для выбора PID/имени процесса и настроек загрузки драйвера/открытия процесса.
Текущие ограничения
- Вживую подтверждены только команда
1и форма прямого чтения у команды0x78. FairPlayKDProcess.Memory.TryReadMemory(...)сейчас ограничен вызывающим процессом.FairPlayKDProcess.Memory.TryWriteMemory(...)использует лениво открываемый через FairPlay дескриптор процесса и Win32WriteProcessMemory; ни одна команда FairplayKD для копирования памяти процесса не подтверждена.- Пока нельзя считать, что пакет поддерживает универсальное удалённое чтение. Универсальная запись и хелперы управления процессом используют дескриптор процесса, открытый через FairPlay, вместе с обычными Win32 API, а не команды FairplayKD для копирования памяти или управления.
- Остальная часть командного протокола пока статична и предварительна; восстановленные в IDA имена вроде
WriteMemoryToThreadиReadMemoryFromProcessв этом payload уже показали себя как вводящие в заблуждение, поэтому не воспринимайте неподтверждённые ID команд или layout пакетов как публичный контракт, пока это не будет подтверждено живыми трассамиDeviceIoControl.
Типовые сценарии
-
Открыть уже запущенное устройство FairPlay:
- Подключите
EyeAuras.Memory.FairPlaySdk. - Создайте
new FairPlayDriverManager(). - Вызовите
Create(loadDriver: false). - Используйте
FairPlayDriverConnection.DeviceIoControl(...)только для уже понятных частей протокола или исследовательской работы.
- Подключите
-
Запустить встроенный драйвер и открыть устройство:
- Убедитесь, что
Payloads/FairplayKD.sysприсутствует в payload проекта SDK. - Создайте
new FairPlayDriverManager(). - Вызовите
Create(loadDriver: true). - Считайте ошибки SCM, прав, подписи, VBS и политики проблемами настройки окружения.
- Убедитесь, что
-
Читать закреплённый буфер текущего процесса через
IProcess:- Подключите
EyeAuras.Memory.FairPlaySdk. - Закрепите целевой буфер в текущем процессе или иным способом обеспечьте владение им.
- Создайте
using var process = FairPlayKDProcess.WithLoadDriver().ByProcessId(Environment.ProcessId). - Вызовите
process.Memory.TryReadMemory(address, target). - Пока не будет восстановлена настоящая команда драйвера для копирования/записи, считайте запись поведением уровня
OpenProcessплюсWriteProcessMemory.
- Подключите
-
Держать дескриптор процесса, открытый через FairPlay, активным между несколькими операциями:
- Создайте
using var process = FairPlayKDProcess.WithLoadDriver().WithOpenProcess().ByProcessId(processId). - Либо вызовите
using var lease = process.EnterOpenProcess()вокруг более короткой группы операций. - Пока lease активен, операции записи и вызовы метаданных на основе дескриптора повторно используют этот дескриптор.
- Создайте
Что предпочтительно
- Держать константы идентичности драйвера в
FairPlayDriverManager. - Использовать обычную загрузку через SCM и понятную диагностику ошибок настройки.
- Использовать сырой
DeviceIoControlтолько на этапе исследования протокола. - Добавлять типизированные хелперы только после проверки layout пакетов, семантики статусов и владения ответом.
- Явно документировать, работает ли операция памяти через драйвер или через fallback.
- Для реальных тестов загрузки драйвера использовать
[Category("Integration")]вместе с[Explicit].
Чего избегать
- Не добавляйте объект
FairPlayDriverServiceConfig, пока не появится несколько реальных конфигураций. - Не выносите догадки о протоколе в публичные API SDK.
- Не заявляйте о поддержке универсального чтения удалённых процессов или записи через драйвер, пока эта семантика не будет разобрана и проверена.
- Не размещайте временные файлы драйвера в каталогах проектов репозитория.
- Не предполагайте, что командная оболочка Xign применима к FairPlay.
Опорные термины для исследования
EyeAuras.Memory.FairPlaySdkFairPlayDriverManagerIFairPlayDriverManagerFairPlayDriverConnectionIFairPlayDriverConnectionFairPlayKDProcessIFairPlayProcessIFairPlayProcessBuilderFairplayKD.sysFairplayKD0CreateFileDeviceIoControlSCM driver loading
Синонимы для поиска
- FairPlay
- FairplayKD
- FairPlay SDK
- FairPlay driver
- kernel driver
- SCM driver loading
- CreateFile driver
- DeviceIoControl
- packaged driver
- raw IOCTL
- process reader
Связанные карты
memory/processes.mdnuget/xign-sdk.mdnuget/frida-sdk.md