AI NuGet для Xign SDK
AI-first обзор опциональной инфраструктуры драйвера Xign и XignProcess.
Карта API Xign SDK
Справочная карта по дополнительным API EyeAuras.XignSdk. Этот SDK дает инфраструктуру для загрузки драйвера и низкоуровневого подключения к упакованному kernel-драйверу Xign, а также описывает уже замапленные операции протокола для прямого доступа к драйверу, памяти процесса, синхронного выполнения кода и сценариев управления процессом через драйвер.
Важно
EyeAuras.XignSdk использует драйвер Xign, также известный как XignCode3. Рассматривайте XignProcess как практичный временный backend для контролируемых окружений, а не как универсальную гарантию совместимости. Xign/XignCode3 может конфликтовать с другими kernel-драйверами, anti-cheat-решениями, защитным ПО, Windows Code Integrity/VBS или локальной политикой загрузки драйверов.
Для коммерческих или публичных продуктов, где важна предсказуемая совместимость на машинах пользователей, лучше использовать собственный backend на основе IProcess. Memory API позволяет держать такую миграцию локальной: большая часть кода ниже по стеку должна зависеть от IProcess, IProcess.Memory, control-интерфейсов и helper-ов, поэтому замена XignProcess на другой backend процесса обычно сводится к небольшим изменениям в точке создания.
Основные сценарии использования
- Добавить в скрипт или tool-проект дополнительную инфраструктуру драйвера Xign.
- Загружать и запускать упакованный драйвер Xign через обычные Windows SCM API.
- Открывать устройство Xign через
CreateFile. - Загружать драйвер один раз через
XignDriverManager.Load(), а затем открывать прямые подключения к драйверу без созданияXignProcess. - Проверять или останавливать сервис драйвера через
XignDriverManager.IsLoadedиUnload()для явных lifecycle-сценариев. - Представлять целевой процесс как
XignProcess. - Читать и писать память цели через
XignProcess.Memory. - Использовать
XignDriverManagerиXignDriverConnectionнапрямую, если инструменту нужны команды драйвера без обертки вXignProcess. - Выполнять уже размещенную в процессе функцию через
IProcessControlApi.ExecuteCode. - Использовать
XignProcessдля allocation/protection/free, manual mapping, создания remote thread, suspend/resume и User APC, если окружение это поддерживает. - Сохранять документированную фиксированную оболочку команд xhunter1, не раскрывая vulnerability/demo primitives как публичные API SDK.
Модель
EyeAuras.XignSdk— это дополнительный пакет SDK, а не часть основного memory SDK.XignProcessреализуетIProcess,IProcessControlApi,IProcessSupportsManualMappingиIProcessSupportsUserApc, поэтому его можно передавать в API, которые ожидают абстракцию процесса с дополнительными возможностями управления.XignDriverManager— публичный SCM loader/factory для прямых подключений к драйверу. Он может отдельно загружать упакованный драйвер черезLoad(), показывать running-состояние черезIsLoaded, останавливать его черезUnload()или открывать устройство черезCreate(...).XignDriverConnection— публичное подключение к устройству, которое владеет оболочкой команд xhunter1, временной init/auth-сессией, response buffer и типизированными helper-методами команд.XignProcessможно создать через builder/static helper-ы, которые владеют открытым ими подключением, или напрямую из caller-ownedIXignDriverConnection, когда tool совмещает сырые команды драйвера с API абстракции процесса.XignProcess.Memoryиспользует подключение к драйверу Xign для чтения и process handle, открытый драйвером, для записи.- Информационные операции
XignProcessтеперь structure-backed: целевой_EPROCESSнаходится по открытому через Xign process handle черезSystemExtendedHandleInformation, а имя процесса, модули, потоки, архитектура и VAD-регионы читаются через_EPROCESS, PEB, loader list, thread list и VAD-структуры. - Для structure-backed чтений kernel-адреса идут через команду Xign 788, а
user-mode адреса целевого процесса — через команду 787. Если curated layout
или нужные структуры недоступны, операция падает явно; fallback на PSAPI,
Toolhelp или
VirtualQueryExне используется. XignProcessоткрывает handle процесса через драйвер, а затем использует эти handle для ряда операций управления на базе WinAPI, таких какVirtualAllocEx,VirtualProtectEx,WriteProcessMemory,CreateRemoteThreadиNtSuspendProcess.XignDriverServiceConfigзадает identity по умолчанию для service/device/payload:xhunter1,\\.\xhunter1иxhunter1.sys.- Файл драйвера ожидается по пути
Payloads/xhunter1.sysв проекте SDK и встраивается в сборку, если присутствует. - Загрузка драйвера выполняется только через SCM. Попыток DSE/signature bypass нет.
- Подключение к драйверу использует текущую форму пакета xhunter1: request размером 624 байта, user response buffer с выравниванием 16 байт и поля статуса ответа по смещениям
+12и+16. - Перед обычными командами подключение инициализирует драйвер и аутентифицирует текущий процесс. Если команда завершается ошибкой, временное состояние сессии сбрасывается и пересобирается при следующей запрошенной операции.
Детали API
IXignProcess— marker-интерфейсIProcess,IProcessControlApi,IProcessSupportsManualMappingиIProcessSupportsUserApcдля процесса, работающего через Xign.XignProcess.ByProcessId(processId)— подключается к PID через builder по умолчанию, не запуская драйвер.XignProcess.ByProcessName(processName)— находит локальный процесс по имени с.exeили без него, затем подключается по PID.XignProcess.WithLoadDriver(loadDriver)— возвращаетIXignProcessBuilder, настроенный на создание/запуск сервиса упакованного драйвера перед открытием устройства, еслиloadDriverравно true.XignProcess.WithOpenProcess(openProcess)— возвращаетIXignProcessBuilder, настроенный на сохранение открытого драйвером process handle на все время жизни каждого созданного процесса.IXignProcessBuilder— builder дляByProcessId,ByProcessNameиWithLoadDriver/WithOpenProcess.XignDriverServiceConfig.Default— имена service/device/payload по умолчанию.XignDriverManager.IsLoaded— сообщает, запущен ли сейчас настроенный сервис драйвера.XignDriverManager.Load()— извлекает, регистрирует и запускает упакованный драйвер через SCM без создания process wrapper; метод идемпотентен и не пытается повторно загружать уже запущенный сервис.XignDriverManager.Unload()— останавливает настроенный сервис драйвера, если он запущен; регистрацию сервиса и извлеченный payload он не удаляет.XignDriverManager.EnsureLoaded()— compatibility alias дляLoad().XignDriverManager.Create(loadDriver = false)— при необходимости загружает упакованный драйвер и возвращает открытыйIXignDriverConnection; еслиloadDriverравно false и устройство открыть не удалось, диагностика должна подсказывать использоватьXignProcess.WithLoadDriver(),Load()илиloadDriver: true.XignDriverConnection/IXignDriverConnection— прямой API устройства для сырогоCall(command, args)и типизированных helper-методов, таких какPingEcho,QueryVersionStatus,OpenProcess,ReadUserMemory,ReadMemoryиExecuteCodeByProcessId.new XignProcess(connection, processId, openProcess)— создаетIXignProcess/IProcesswrapper поверх уже открытого caller-ownedIXignDriverConnection; disposal process wrapper не закрывает переданное подключение.IXignProcess.Memory— поддерживает чтение/запись байтов и scalar-значений через подключение Xign и process handle, открытые драйвером.IXignProcess.GetProcessModules()— читает модули через_EPROCESS -> PEB -> PEB.Ldr.InMemoryOrderModuleList.IXignProcess.GetThreads()— читает_EPROCESS.ThreadListHeadи проецирует ETHREAD entries вProcessThreadInformation.IXignProcess.VirtualQuery(address)иGetMemoryRegions()— читают_EPROCESS.VadRootи возвращают только allocated VAD-backed ranges.IXignProcess.ProcessName— берется из PEB process parameters, если они доступны, иначе из_EPROCESS.ImageFileName.IXignProcess.ExecuteCode(startAddress, parameter)— синхронно выполняет уже размещенную x64- или x86-функцию в целевом процессе через команду Xign 820 и возвращает значение размером с указатель, которое сообщил драйвер.IXignProcess.AllocateMemory,FreeMemoryиProtectMemory— управление виртуальной памятью через WinAPI поверх process handle, открытого драйвером.IXignProcess.CreateRemoteThread,SuspendProcess,ResumeProcess,SuspendThreadиResumeThread— helper-методы управления процессом/потоком, доступные через общую поверхность process-control API.IXignProcess.InjectDllViaManualMapping(...)— manual mapping через общийLibraryMapperс использованиемXignProcess.MemoryиExecuteCode.IXignProcess.QueueUserApc(...)— helper для User APC через обычный путьOpenThread/QueueUserAPC.IXignProcess.EnterOpenProcess()— явный lease, который удерживает открытый драйвером process handle на время пакета операций.- Бинарные структуры пакетов команд — это внутренние детали реализации, они не экспортируются как публичная поверхность для составления команд.
Текущие ограничения
XignDriverConnectionтребует 64-битный host process.QueueUserApcзависит от обычного доступа к thread handle и поведения alertable wait у целевого потока; это не отдельная замапленная команда Xign.- Несколько high-level методов управления используют вызовы WinAPI на handle, открытых драйвером, а не отдельные команды Xign для каждой операции.
- Информационные методы зависят от curated Windows kernel layouts. Неподдержанный build, поврежденные списки структур, отсутствующий object pointer в handle table или невалидные PEB/VAD-данные приводят к exception вместо тихого fallback на старые WinAPI-пути.
- VAD enumeration возвращает allocated ranges из VAD tree. Она не синтезирует
свободные holes в адресном пространстве и не обязана побайтно совпадать с
выводом
VirtualQueryEx. - Сырой
Call(command, args)существует для прямой диагностики, но packet DTO и структуры аргументов, специфичные для команд, остаются внутренними. Для уже замапленных команд лучше использовать типизированные helper-методы. - Реальные smoke-тесты загрузки драйвера требуют прав администратора, совместимого host-окружения и настоящего бинарника
Payloads/xhunter1.sys.
Типовые сценарии
-
Открыть уже запущенное устройство Xign:
- Подключите
EyeAuras.XignSdk. - Вызовите
XignProcess.ByProcessId(pid)илиByProcessName(name). - Проверьте
IsValid. - Используйте
Memory.Read<T>,Memory.Write<T>, чтение/запись через span, управление виртуальной памятью, manual mapping илиExecuteCode, если host-драйвер совместим. - Если ошибка открытия устройства говорит, что сервис драйвера не загружен, переключите путь создания на
XignProcess.WithLoadDriver()или прямойXignDriverManager.Create(loadDriver: true).
- Подключите
-
Запустить упакованный драйвер и открыть устройство:
- Перед упаковкой или ручными тестами добавьте реальный драйвер как
Payloads/xhunter1.sys. - Вызовите
XignProcess.WithLoadDriver().ByProcessId(pid). - Обрабатывайте ошибки SCM, прав, подписи, VBS и policy как проблемы настройки окружения.
- Перед упаковкой или ручными тестами добавьте реальный драйвер как
-
Выполнить уже размещенный код:
- Разместите в адресном пространстве целевого процесса x64- или x86-функцию.
- Вызовите
((IProcessControlApi)xignProcess).ExecuteCode(startAddress, parameter)илиxignProcess.ExecuteCode(startAddress, parameter). - Рассматривайте возвращаемый
ulongкак сырое return value размером с указатель, полученное от backend-а.
-
Замапить DLL через manual mapping:
- Создайте
XignProcess, обычно сWithLoadDriver().WithOpenProcess()для integration-style сценариев. - Вызовите
InjectDllViaManualMapping(pathOrBytes). - Architecture и process directory берутся из того же
_EPROCESS/PEB-backed информационного пути, что и module enumeration. - При необходимости используйте возвращаемый
ManualMappedLibraryDescriptor, чтобы посмотреть base address и entry point.
- Создайте
-
Использовать прямые команды драйвера:
- Создайте
new XignDriverManager(XignDriverServiceConfig.Default). - Проверьте
IsLoaded, если tool должен показать текущее состояние сервиса. - Вызовите
Load(), если tool должен стартовать упакованный драйвер, или пропустите этот шаг, если драйвер уже запущен. - Вызовите
Create(), чтобы открытьIXignDriverConnection. - Используйте типизированные helper-методы команд.
ReadUserMemory— это команда 787 с handle процесса;ReadMemory— команда 788 и копирует байты через путь драйвера, ограниченныйMmIsAddressValid. - Если этому же tool нужен
IProcess, создайтеnew XignProcess(connection, pid, openProcess: true)и удерживайте подключение живым на все время жизни wrapper-а. - Вызывайте
Unload()только когда tool владеет lifetime-ом драйвера и действительно должен остановить сервис.
- Создайте
Когда это предпочтительно
- Используйте
XignProcessтолько тогда, когда наличие драйвера Xign ожидаемо. - Предпочитайте обычную загрузку через SCM и понятную диагностику ошибок настройки драйвера.
- Предпочитайте high-level API
IProcess.MemoryиIProcessControlApi.ExecuteCode, а не публичное раскрытие ID команд. - Для пакетов операций с памятью и управлением лучше использовать
WithOpenProcess()илиEnterOpenProcess(). - Рассматривайте
GetProcessModules,GetThreads,VirtualQueryиGetMemoryRegionsкак fail-fast structure-backed операции. - Для downstream API, которые могут жить с разницей в возможностях конкретных backend-ов, лучше опираться на
IProcess.
Чего стоит избегать
- Не рассматривайте Xign как backend уровня KD/DBK; у него своя identity service/device.
- Не позиционируйте Xign/XignCode3 как бесконфликтную инфраструктуру для публичных пользовательских машин.
- Не добавляйте в XignSdk поведение, связанное с DSE bypass.
- Не размещайте временные файлы драйвера в директориях проектов репозитория.
- Не предполагайте, что каждая доступная операция управления процессом — это отдельная команда драйвера; часть операций идет через WinAPI поверх handle, открытых драйвером.
- Не ожидайте, что мигрированные информационные методы будут fallback-иться на
PSAPI, Toolhelp или
VirtualQueryEx.
Опорные термины для поиска
EyeAuras.XignSdkIXignProcessXignProcessIXignProcessBuilderXignDriverServiceConfigXignDriverManagerXignDriverConnectionIXignDriverConnectionIProcessIMemoryBackendIProcessControlApiIProcessSupportsManualMappingIProcessSupportsUserApcExecuteCodeInjectDllViaManualMappingEnterOpenProcessReadMemoryReadUserMemoryCreateFileWriteFilexhunter1\\.\xhunter1xhunter1.sys
Синонимы для поиска
- Xign
- XignSdk
- XignProcess
- Xign driver
- driver service
- kernel driver
- SCM driver loading
- CreateFile driver
- WriteFile driver
- packaged driver
- process reader
Связанные карты
memory/processes.mdnuget/frida-sdk.md