Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
XboxSeries — Recherche personnelle sur l'architecture de la Xbox Series | Kitploit
Outils/GitHubGitHub/daniellmcguire/xboxseries
Sécurité des Systèmes EmbarquésAnalyse StatiqueAnalyse Dynamique (Sandboxing)Rétro-ingénierieDébogueursSécurité MatérielleAnalyse de BinairesApprentissage et ÉducationAnalyse de Micrologiciel
GitHubdaniellmcguire/xboxseries

XboxSeries

Recherche personnelle sur l'architecture de la Xbox Series

574il y a 1 moisVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager
Voir le dépôtSite web

Xbox Series : recherche sur l'architecture interne

ChampValeur
Date9-12 mars 2026 + 7-? juillet 2026
MatérielXbox Series S (Nom de code : Lockhart)
Build de l'OS26100.7010.amd64fre.xb_flt_2602ge.260212-1010 + 26100.8561.amd64fre.xb_flt_2606ge.260609-2200
Méthode d'accèsMode développeur + SSH + API REST + jonction de partage de fichiers NTFS

Résumé

Ce rapport est une analyse statique et dynamique de l'architecture interne de la Xbox Series S, réalisée entièrement via l'infrastructure officielle du mode développeur de Microsoft. Aucun exploit ni violation de politique n'a été utilisé ; tout l'accès s'est fait dans le cadre du programme de développeur individuel.

Il contient des détails allant des composants de plus haut niveau utilisés pour le gameplay jusqu'aux composants de pilotes système de plus bas niveau. La plupart de ces détails devraient également être identiques pour la Xbox One.


Clarifications

L'IA a été utilisée pour formater de manière cohérente la grande recherche initiale (plus de 200 sorties d'analyse et plus de 50 notes aléatoires) en ce document très rapidement. Toutes les modifications futures sont faites à la main.

Si vous pensez qu'un point de ce document est peu clair, sous-documenté ou faux, n'hésitez pas à m'envoyer un message privé, ou si vous avez des réponses à mes questions (section 12), ce serait également bien. Les GUID et autres motifs courants sont expurgés par un hook pre-commit au cas où je laisserais quelque chose qui identifie mon compte.

Une grande partie de ce sur quoi je travaille repose sur des hypothèses, donc cela pourrait être inexact et changera à mesure que j'obtiendrai plus d'informations et que j'examinerai plus de binaires.

Pour des raisons que vous pouvez imaginer, je ne partagerai en aucun cas des binaires directs, des sorties de désassemblage ou tout élément considéré comme la propriété intellectuelle de Microsoft ou de ses filiales.

root@kitploit:~
ERA = GameOS Partition
SRA = SystemOS Partition
HT = Kinect (possibly "Human Tracking"?)
Arden = Xbox Series X/S GPU Stack
NewBe = Arden shader compiler

Principales découvertes

Une gestion des pilotes par l'OS hôte existe en dehors du modèle SRA/ERA connu, voir le modèle de confiance (sections 4.2, 17.5). XVIO.SYS et XSraFlt.sys sont chargés directement par l'hyperviseur (via HostOS) avant l'initialisation de Windows et sont absents de tous les volumes accessibles. Ils ne peuvent pas être altérés même avec un accès noyau complet, ce qui constitue la principale frontière de sécurité.

HVCI est volontairement désactivé (section 18). IsSecureKernelRunning = 0x0 confirme que le noyau sécurisé (VTL1) ne s'exécute pas. L'intégrité du code n'est vérifiée qu'au chargement, laissant une fenêtre TOCTOU une fois les binaires mappés. C'est un compromis de performance délibéré ; la frontière de sécurité est la partition de l'hyperviseur, et non la protection mémoire intra-partition.

La jonction NTFS expose l'intégralité du système de fichiers SystemOS sur le réseau (section 1.2). Une simple commande mklink /J depuis le shell SSH mappe C:\ ou n'importe quoi d'autre dans le partage de fichiers du Device Portal, rendant chaque binaire système lisible à distance sans authentification supplémentaire au-delà du code PIN du mode développeur.

L'architecture inter-partitions est presque entièrement cartographiée (sections 4, 14, 26-28). La partition de jeu ERA communique avec SystemOS exclusivement par des canaux médiés par l'hyperviseur : tampons en anneau XVIO pour les E/S, traduction GPA pour la mémoire partagée, HvSocket pour l'IPC, et sections de ports ALPC pour la livraison de framebuffer sans copie, accordée par un « OS hôte » parent.

La jonction Deploy:\ contourne les restrictions d'accès locales (section 25). Le volume Windows Update n'est accessible que via le partage réseau (S:\Deployment\SoftwareDistribution\) en raison d'une incohérence quelque part (peut-être xrfssvc.exe ?).

La plupart des binaires n'ont que des chaînes de description ; je ne le savais pas jusqu'à aujourd'hui, car je n'utilisais Windows que pour la connexion à la console. La plupart du temps, c'est ennuyeux (par exemple XVUH, XVMCTRL), mais parfois c'est très descriptif (par exemple Durango Virtual XVNC Bus Driver, Xbox Remote File System Service).

Portée et limites

Tous les tests ont été effectués sur une seule Xbox Series S commerciale en mode développeur. Les résultats reflètent de nombreuses versions, mais je finirai par comparer les versions et rédiger un compte rendu. Les résultats peuvent varier selon les révisions matérielles (Series X, Xbox One) et les versions du firmware. Plusieurs surfaces au niveau du noyau n'étaient pas accessibles : les dumps de noyau en direct sont bloqués par la restriction NoKernelDumps, et la surface IOCTL de xvmctrl.sys n'a pas été entièrement énumérée. Les questions ouvertes sont suivies dans la section 12.


Méthodologie

Outils utilisés

Approche

L'accès a été établi via l'interface SSH du mode développeur, officiellement non documentée, mais pour laquelle il existe une documentation communautaire. La technique de jonction NTFS (section 1.2) a étendu l'accès en lecture de l'espace de travail D:\DevelopmentFiles à l'intégralité du volume système C:\ et à tous les volumes de lettres supplémentaires. Toute l'analyse était en lecture seule ; aucun paramètre système n'a été modifié (WdConfig.exe set n'a pas été utilisé). La Xbox peut exécuter directement des binaires console Windows x86_64 standard (compilés avec /MT) via le shell SSH, ce qui a permis d'exécuter les outils d'analyse localement.

Les dumps de noyau n'étaient pas disponibles : la restriction NoKernelDumps du Device Portal les bloque en mode développeur commercial. Les dumps de processus utilisateur en direct étaient disponibles et ont été utilisés lorsque cela était pertinent.


1. Accès à distance

1.1 Accès au shell

Le mode développeur de la Xbox prend en charge Visual Studio, qui utilise SSH :

  • Nom d'utilisateur : DevToolsUser
  • Mot de passe : le code PIN Visual Studio affiché dans Dev Home

1.2 Accès au système de fichiers

Le Device Portal à l'adresse https://XBOX:11443 expose un partage de fichiers NTFS caché vers D:\DevelopmentFiles. Depuis le shell SSH :```batch mklink /J D:\DevelopmentFiles\C C:\

root@kitploit:~
Cela crée un point de jonction depuis l'espace de travail développeur vers la racine du lecteur C: système, exposant l'intégralité du système de fichiers SystemOS en tant que partage réseau lisible à l'adresse :

    \\XBOX\DevelopmentFiles\C

Cela permet d'exécuter des outils comme `dumpbin` depuis un PC directement contre les binaires système Xbox via le réseau.

---

## 2. Identité du système d'exploitation

| Champ            | Valeur            |
|--------------------|-------------------|
| Nom du produit       | Xbox Series S     |
| Édition du système d'exploitation         | SystemOS          |
| Version Windows NT | 10.0              |
| Numéro de build       | 26100             |
| Chaîne de build       | `26100.8561.amd64fre.xb_flt_2606ge.260609-2200` |
| LCUVer             | `10.0.26100.8536` |
| Branche             | `xb_flt_2602ge`   |
| Date de build         | June 09, 2026     |
| Architecture       | x64               |
| Démarrage sécurisé UEFI   | `NotCapable`      |
| Nom de code de la console   | Lockhart          |
| Mode console       | Default           |
| Sandbox ID         | `XDKS.1`          |

Le système d'exploitation s'identifie comme **SystemOS**, et non Windows. La branche de build `xb_flt_2602ge` semble être un « fork » Xbox distinct de la base de code Windows, toujours très proche de Windows 11. Certains binaires système Windows sont identiques octet pour octet à leurs homologues de bureau, compilés avec la même chaîne d'outils MSVC, provenant probablement des mêmes packages UUP. Cela est distinct de la « Host OS » encore mal définie.

### 2.1 Identité du registre

Plusieurs champs `CurrentVersion` ont été volontairement figés, comme sur Windows de bureau (pour la compatibilité avec les titres Xbox One dans ce cas) :

| Clé | Valeur | Remarques |
|-----|-------|-------|
| `CurrentVersion` | `6.3` | Signale en interne Windows 8.1, pour compatibilité |
| `BuildGUID` | | mis à zéro/nettoyé |
| `InstallDate` | `0` | aucun horodatage d'installation |
| `EditionID` | `SystemOS` | Jamais mis à jour |
| `ReleaseId` | `2009` | Figé à l'ère Windows 10 20H2 ; jamais incrémenté |

---

## 3. Disposition des volumes

La console expose 13 lettres de lecteur, dont la plupart sont supposées être [comme sur Xbox One, entièrement virtuelles](https://xboxoneresearch.github.io/wiki/operating-system/xbox-operating-system/)

| Lettre | Libellé | Contenu | Remarques |
|-------|-------|----------|-------|
| `C:` | System Boot | Fichiers du système d'exploitation Windows | Partition SystemOS standard |
| `D:` | *(none)* | `DevelopmentFiles\` | Espace de travail du mode développeur |
| `G:` | *(none)* | `GameDVR_VideoBuffer` (272MB), `GameDVR_AudioBuffer` (16MB), `GameDVR_AudioBuffer_SysLoopback` (3MB) | Tampons de capture circulaires bruts, mémoire partagée entre ERA et SystemOS |
| `J:` | Sys Tools | Chaîne d'outils XTF, pilotes, QuickActions | Voir Section 5 |
| `M:` | Misc | Contient les superpositions NTFS spécifiques à la console pour les bibliothèques et les pilotes | Partition System OS ? |
| `N:` | *(none)* | `BlackBox\`, `EtwPlus\`, `CMS\`, `errorstrings\`, `usersettings\` | Volume de diagnostic et de télémétrie, voir Section 3.2 |
| `Q:` | *(none)* | `Users\DevToolsUser\` | répertoire personnel de l'utilisateur |
| `S:` | *(none)* | `apps\`, `Clip\`, `Deployment\`, `Prefetch\`, `Microsoft\`, `ProgramData\` | probablement le volume Host OS (contient également les applications par défaut et d'autres ressources) |
| `T:` | *(none)* | `GameDVR\`, `Update\`, jonctions vers Harddisk16 | Métadonnées GameDVR + pipeline de mise à jour |
| `U:` | *(none)* | `ShellState\`, `BackCompatLicenses\`, `UserDataCache\` | État du shell et de l'utilisateur |
| `V:` | *(none)* | *(empty)* | Usage inconnu |
| `X:` | SystemAux | `Apps\`, `Catalog000.bin` (2.3MB) | Binaires d'applications système : 63 applications, dont `AdsLauncher`, `Xbox.DiscordComponent`, `Xbox.SingleUserProxy`, `Xbox.NTSCaptivePortal`, `Xbox.Xmap`, `Xbox.XboxIDP`, voir Section 3.3 |
| `Y:` | SystemAuxF | `Apps\`, `Catalog000.bin` (6.5MB) | Binaires d'applications système secondaires |

De plus, `\\.\HarddiskVolume10` existe sans lettre de lecteur assignée. Il existe un volume WER (Windows Error Reporting) masqué contenant `CrashDumps\`, `ReportArchive\`, `ReportQueue\` et `Temp\`. Au moins **18 objets de périphérique de disque physique existent** (`PhysicalDrive0` à `PhysicalDrive17`), tous présents comme objets noyau mais inaccessibles au niveau brut depuis l'espace utilisateur. `HarddiskVolume16` et `HarddiskVolume18` existent en tant que volumes réels accessibles mais sont bloqués pour `DevToolsUser`.

### 3.1 Chemins de périphérique noyau masqués

Les chemins suivants existent en tant qu'objets de périphérique noyau mais sont inaccessibles depuis l'espace utilisateur (normalement) :

- `\??\Deploy:\` Volume du pipeline de mise à jour/déploiement Xbox (accessible via une jonction sur le partage réseau à `S:\Deployment\`)

### 3.2 Volume de diagnostic N:\

Plusieurs répertoires sur `N:\` sont activement masqués par un pilote de filtre du système de fichiers au niveau noyau ; ils semblent vides pour tous les outils en espace utilisateur mais sont confirmés comme étant écrits pendant l'exécution :

| Chemin | Statut | Remarques |
|------|--------|-------|
| `N:\EtwPlus\` | **Masqué par le noyau** | Contenu dissimulé par un pilote de filtre du système de fichiers |
| `N:\BlackBox\` | Accessible | Contient des données de télémétrie ETL spécifiques aux rapports d'erreur Xbox |
| `N:\errorstrings\en-US.json` | Accessible | Base de données complète des chaînes d'erreur Xbox, contient 797 entrées, voir Section 3.4 |
| `N:\usersettings\18\public\` | Accessible | Gamerpic pleine qualité stockée sous forme de PNG sans extension (1080×1080 RGBA, format PNG standard) |

`N:\usersettings\18\public\` stocke à la fois `AppDisplayPic` et `GameDisplayPic` sous forme de fichiers sans extension. Le hachage SHA256 confirme qu'ils sont identiques octet pour octet : l'image d'affichage de l'application et le gamerpic sont le même fichier écrit sur deux chemins.

### 3.3 X:\ SystemAux

`X:\ht\versions\` contient une pile de vision Kinect active avec **trois versions simultanées** installées côte à côte (1.0.0, 1.0.1, 1.0.2), totalisant 119MB. Elles correspondent aux builds de `vvtechs.dll` versionnées respectivement 1.67MB->1.70MB->1.85MB.

**Modèles ML de suivi corporel** (par répertoire de version) :

| Fichier | Taille | Objectif |
|------|------|---------|
| `exemplardb.xmplr` | 36.7MB | Base d'exemples de poses du corps entier |
| `FernsModel.bin` | 932KB | Détecteur de points clés de profondeur (classifieur random ferns) |
| `HeadPosition.mshdf` | 262–393KB | Estimateur d'articulation de la tête (varie selon la version) |
| `LSVMGripReleaseRight.gbd` | 7.5KB | Classifieur latent SVM prise/relâchement, main droite |

**Modèles ML de suivi du visage** (à l'échelle du système, `C:\Windows\System32\ht\`) :

| Fichier | Taille | Objectif |
|------|------|---------|
| `FaceDetector.bin` | 3.0MB | Localiser les visages dans l'image |
| `FaceRecognition.bin` | 3.4MB | Reconnaissance d'identité par profondeur/IR |
| `FaceRecognition_Color.bin` | 5.9MB | Reconnaissance d'identité par canal couleur |
| `ExpressionRandomForest.model` | 150KB | Classifieur d'émotions |
| `EyeLeftRandomForest.model` | 55KB | État de l'œil gauche |
| `EyeRightRandomForest.model` | 65KB | État de l'œil droit |
| `LookingAwayRandomForest.model` | 42KB | Détection du regard/de l'attention |
| `MouthOpenRandomForest.model` | 58KB | État bouche ouverte |
| `MouthMovedRandomForest.model` | 35KB | Mouvement des lèvres |
| `FacialHairIRRandomForest.model` | 126KB | Pilosité faciale (capteur IR uniquement) |
| `GlassesIRRandomForest.model` | 206KB | Détection de lunettes (capteur IR uniquement) |

Tous les classifieurs d'attributs faciaux sont des modèles **Random Forest**. La sortie couvre l'identité, l'expression, le regard, l'état des lèvres et les attributs d'apparence.

Le `vvtechs.dll` de la pile exporte une seule fonction : `NuiVisionCreateFactory`. Il importe `EtwPlus.dll` et `D3D11`, confirmant que le pipeline de vision Kinect s'exécute sur le GPU et utilise le chemin de télémétrie spécifique à Xbox. Il est actif sur du matériel sans Kinect physique connecté (voir aussi `KinectSensorEnabled=true` à la Section 6, et le pipeline complet `nuiservice.exe` à la Section 33).

### 3.4 Base de données de codes d'erreur N:\errorstrings\en-US.json

797 entrées de chaînes d'erreur Xbox. Codes notables ayant une pertinence en matière de sécurité ou d'architecture :

| Code d'erreur | Chaîne | Remarques |
|------------|-----------------|-------|
| `0x887E0002` | D3D12.X runtime/driver mismatch | Confirme que D3D12.X est une variante D3D12 spécifique à Xbox, et non un D3D12 générique |
| `0x80A40406` | Enhanced Microsoft telemetry enabled in dev mode | Le mode développeur intègre explicitement la console dans une collecte de télémétrie renforcée |

---

## 4. Architecture de l'hyperviseur

La Xbox utilise un hyperviseur personnalisé basé sur Hyper-V exécutant deux partitions :

- **SystemOS** la partition SRA
- **Partition ERA** l'environnement d'exécution GameOS / Title OS

### 4.1 Pile de pilotes

    User space:     xpal.dll
                        ↓
    Kernel:         xpalk.dll 
                        ↓
                    xvmctrl.sys (364KB)
                        ↓
    Hypervisor:     XVIO.SYS 

### 4.2 Pilotes clés de l'hyperviseur

| Pilote            | Taille    | Objectif                                                              |
|-------------------|---------|----------------------------------------------------------------------|
| `xvmctrl.sys`     | 364KB   | Contrôle de VM, interface principale de l'hyperviseur, surface IOCTL                 |
| `XVIO.SYS`        | unknown | E/S virtuelles Xbox, ABI directe de l'hyperviseur (absente du système de fichiers SystemOS) |
| `xvioc.sys`       | unknown | Client XVIO, interface côté SystemOS vers XVIO                         |
| `xvbus.sys`       | 73KB    | Racine de bus virtuel + fournisseur XVIO HvSocket                            |
| `hvsocket.sys`    | 185KB   | Implémentation de socket Hyper-V                                        |
| `VMNP.SYS`        | 106KB   | Nommé « NPFS Driver », gère également les usurpations d'identité.                      |
| `Xrfs.sys`        | 135KB   | Pilote de système de fichiers Xbox                                               |
| `XRmnt.sys`       | 49KB    | Pilote de montage Xbox                                                    |
| `XRo.sys`         | 95KB    | Filtre en lecture seule Xbox                                                 |
| `VerifierExt.sys` | 274KB   | Extension du vérificateur de pilotes                                            |

**Constat critique :** `XVIO.SYS` et `xpalk.dll` n'ont **aucune entrée de service dans le registre** et sont **absents du système de fichiers SystemOS**. Ils sont probablement chargés par la Host OS avant le démarrage de SystemOS, entièrement en dehors du modèle de pilotes local. C'est le véritable mécanisme de sécurité ; même avec un accès complet au noyau SystemOS, ces composants ne peuvent pas être altérés.

### 4.3 Surface de l'API XVIO (reconstituée à partir des imports)

Des informations sur XVIO [sont disponibles ici](https://xboxoneresearch.github.io/wiki/development/xvio/xvio-overview/), mais je ne peux pas confirmer que les choses n'ont pas changé depuis la Xbox One.

À partir des imports de `xvmctrl.sys`, `xviomonc.sys` et `srakmd_arden.sys` vers `XVIO.SYS` :

    XvioInitialize / XvioCleanup
    XvioCreateEvent
    XvioPostMessage
    XvioGetCurrentPartitionId                           (identifies active partition, from xviomonc)
    XvioGetReservedMemory                               (hypervisor carve-out RAM access, from srakmd_arden)
    XvioRegisterGpaMdl / XvioUnregisterGpa              (Guest Physical Address mapping)
    XvioSfrMapPages / XvioSfrUnmapPages                 (Shared Frame Region, cross-partition GPU memory)
    XvioSfrCounterGet / XvioSfrPerfCounterSet
    XvioSfrReadEvent
    XvioSetFocus                                        (switches input focus between partitions)
    XvioSetSystemTime
    XvioSaveProvidersState / XvioRestoreProvidersState
    XvioPerfMonitoringEnabled
    XvioCreateRingBuffer / XvioDestroyRingBuffer
    XvioGetRingBufferContext
    XvioReadRingBuffer / XvioReadRingBufferEx / XvioWriteRingBuffer
    XvioAcquireRingBufferRundown / XvioReleaseRingBufferRundown

`XvioRegisterGpaMdl` et les fonctions SFR constituent le mécanisme de partage de mémoire de l'hyperviseur : RAM brute et pages de framebuffer GPU mappées à travers la frontière des partitions.

### 4.4 Services inter-partitions HvSocket

`hvsocket.sys` expose des services pour la communication par socket inter-partitions :

- `HvSocketGetPartitionConnections` / `HvSocketGetPartitionListeners` énumèrent les canaux actifs
- `HvSocketGetVmIdFromVmbusHandle` résolution de handle VMBus
- `HvSocketUpdateServiceTable` registre de tous les services inter-partitions

Une DLL nommée par GUID `[REDACTED]_hvsocket.dll` enregistre un fournisseur de services HvSocket. Le GUID est expurgé au cas où il serait identifiable.

Les quatre GUID de points de terminaison HvSocket génériques ont été résolus via le calcul de SID de service SHA1, voir Section 20 pour tous les détails, y compris les canaux inter-partitions DiagTrack, RpcSs et EventLog.

---

## 5. J:\ "Sys Tools" XTF / Volume de développement

> **Impact :** Le volume `J:\` est présent sur chaque Xbox de série. En mode développeur, la chaîne d'outils XTF complète est accessible sans authentification supplémentaire au-delà du code PIN du mode développeur. Cela inclut le débogage à distance, la diffusion d'écran, le profilage GPU PIX et les API de contrôle de console non destinées à l'accès de l'utilisateur final.

La découverte la plus significative de cette recherche. Le volume `J:\` (libellé « Sys Tools ») contient le **Xbox Tools Framework (XTF)**, la chaîne d'outils interne du kit de développement de Microsoft, qui est simplement présent sur chaque Xbox de série apparemment. Énumération complète : **132 fichiers, 52MB** sur l'ensemble du volume.

### 5.1 Registre des extensions XTF (`J:\tools\xtfextensions.txt`)

Les 20 extensions XTF sont enregistrées avec des CLSID COM :

| DLL                        | CLSID            | 
|----------------------------|------------------|
| `XtfApplicationServer.dll` | `{10B16182-...}` |
| `XtfConsoleControl.dll` | `{5B45D0E0-...}` |
| `XtfConnectedStorage.dll` | `{9D610BBD-...}` |
| `XtfDebugMonitor.dll` | `{9141933C-...}` |
| `XtfDebugCaptureServer.dll` | `{F306F5C7-...}` |
| `XtfFileIO.dll` | `{8A8B4D4C-...}` |
| `XtfInput.dll` | `{7CC4D09B-...}` |
| `XtfPix.dll` | `{9BD151A3-...}` |
| `XtfGameStreaming.dll` | `{AA627F22-...}` |
| `XtfDiagInfo.dll` | `{FD21AC23-...}` |
| `XtfStressServer.dll` | `{6B5B0C75-...}` |
| `XtfSymbolProxyServer.dll` | `{69ABF3A1-...}`  |
| `XtfPerf.dll` | `{F82AF734-...}` |
| `XtfRemoteRun.dll` | `{D77FE8B8-...}` |
| `XtfUser.dll` | `{2E302BAA-...}` |
| `XtfAuditioning.dll` | `{B91F5206-...}` |
| `XtfCleanup.dll` | `{9CF818E5-...}` |
| `XtfCredentialsServer.dll` | `{8582A384-...}` |
| `XtfEventServer.dll` | `{749FDEFA-...}` |
| `XtfUpdateT_s.dll` | `{DCDD4E77-...}` |

### 5.2 Débogueur distant Visual Studio (`J:\tools\debugmon\`)

    msvsmon.exe              
    vsdebugeng.dll (1.5MB)
    vsdebugeng.impl.dll (1.6MB)
    msdia120.dll             
    diagnosticsscripthost.dll
    vsdebuglaunchnotify.exe

Charges utiles de débogage versionnées pour VS 2015 à VS 2022 (`debugmondev14payload` à `debugmondev16payload`). **Trois générations simultanées de débogueur distant Visual Studio sont présentes et enregistrées : VS2015, VS2017 et VS2019** coexistent toutes sur le même système de fichiers de console de série.

### 5.3 Autres outils notables

| Binaire | Objectif |
|---|---|
| `agent-xbox.exe` (1.5MB) | Agent XTF principal |
| `xtfrtservice.exe` (1.3MB) | Hôte de service runtime XTF |
| `xstudioserviceexe.exe` | Service Xbox Studio |
| `xperf.exe` | Profileur de performances Xbox, présent et fonctionnel, mais **le traçage noyau ETW est totalement bloqué quel que soit l'outil** (voir Section 5.5) |
| `videoserver.exe` (RTSP) | Serveur de diffusion d'écran RTSP autonome |
| `wdapp.exe`, `wdconfig.exe` | Débogueur Wave / outils de configuration |
| `wdcapture.exe` | Capture d'écran/vidéo |
| `wdgamestream.exe` | Contrôle de streaming de jeu |
| `xboxnetapidiagsystem.exe` | Diagnostics réseau Xbox Live |
| `xbtp.dll` (503KB) | Protocole de transfert à large bande Xbox |
| `xraytool.exe` | Outil de performance de console Xbox (révèle le fait que la Host OS existe) |
| `xstudioclient.dll` | Bibliothèque cliente Xbox Studio |
| `unattendedsetuphelper.exe` | Suite complète de gestion de console, voir Section 5.6 |

### 5.4 Format QuickActions `.xboxunattend`

`J:\QuickActions\` contient des scripts d'automatisation au format `.xboxunattend`. Ce sont de simples scripts batch Windows déclenchés via Device Portal. Actions disponibles :

- `Capture_Screenshot.xboxunattend` appelle `wdcapture.exe screenshot`
- `Capture_Video.xboxunattend`
- `Toggle_ConsoleMode.xboxunattend` fait défiler les modes d'émulation matérielle via `WdConfig.exe`
- `Toggle_HDR.xboxunattend`
- `Toggle_Resolution.xboxunattend`
- `Launch_DevHome.xboxunattend` / `Launch_RetailHome.xboxunattend`
- `Suspend_Title.xboxunattend`

`Toggle_ConsoleMode.xboxunattend` révèle la liste complète des identifiants de mode de profilage passés à `WdConfig.exe` : `AnacondaProfiling`, `LockhartProfiling` et **`Scarlett 40 GB`**.

### 5.5 xperf / WPR

`xperf.exe` et WPR sont entièrement présents et fonctionnels, y compris un profil WPR `NeuralProcessing`. Cependant, tout le traçage noyau ETW est bloqué par deux codes d'erreur distincts :

| Code d'erreur | Signification |
|------------|---------|
| `0x80070005` | `Access denied`, rejet ACL Windows standard |
| `0xc5585011` | `Xbox policy block`, **aucune chaîne d'erreur destinée à l'utilisateur n'existe pour ce code** (absent de `N:\errorstrings\en-US.json`) |

L'énumération des fournisseurs ETW montre **zéro fournisseur spécifique à Xbox** dans l'espace de noms ETW standard. Toute la télémétrie Xbox transite par `EtwPlus.dll` à l'aide de fonctions préfixées `Etx`, un pipeline complètement distinct de l'ETW Windows standard (voir Section 19.3).

### 5.6 Outil de gestion de console unattendedsetuphelper.exe

`unattendedsetuphelper.exe` est un exécutable de gestion de console couvrant :

- Réinitialisation d'usine
- Mise à jour du firmware par le réseau
- Injection de toasts/notifications
- Gestion du Device Portal

Il sert également de moteur d'exécution pour les scripts `.xboxunattend` (le format QuickActions documenté à la Section 5.4).

---

## 6. Surface des paramètres WdConfig

`J:\tools\WdConfig.exe` (build `10.0.26100.7010`) expose l'API complète de configuration de la console. Paramètres notables :

### Catégorie Débogage
| Paramètre | Valeur | Remarques |
|---|---|---|
| `ConsoleType` | `Lockhart` | Identifiant matériel |
| `ConsoleMode` | `Default` | `AnacondaProfiling`, `LockhartProfiling`, `Scarlett 40GB` |
| `EraGraphicsDriverMode` | `Title Configured` | Options : `Retail`, `Instrumented`, `Validated`. L'équivalent SRA est `SraGraphicsDriverMode = Retail`, ERA et SRA utilisent des paramètres de mode pilote séparés |
| `EnableKernelDebugging` | `false` | Empêche le démontage en cas de crash ERA pour l'attachement du débogueur noyau |
| `EnablePixMemory` | `false` | Réserve 6048MB supplémentaires pour PIX en mode Lockhart Profiling |
| `CrashDumpType` | `None` | Options : `Triage`, `Mini`, `Heap` |
| `TitlePerformanceOverlay` | `false` | Superposition HUD GPU/CPU en temps réel sur les titres en cours d'exécution |
| `ExtraTitleMemory` | `0` | Max 6048MB en mode Lockhart Profiling |
| `LastShutdownReason` | `Console crash` | Conservé entre les redémarrages, ma console a planté lors du dernier arrêt |
| `KinectSensorEnabled` | `true` | **Défini sur true sur du matériel sans Kinect connecté**, la pile est provisionnée indépendamment de la présence matérielle |

### Catégorie Réseau
| Paramètre | Valeur | Remarques |
|---|---|---|
| `UseDebugNicForAllTraffic` | `false` | Une carte réseau de débogage séparée existe, distincte de la carte réseau de série. |

### Catégorie Stockage
| Paramètre | Valeur | Remarques |
|---|---|---|
| `DevkitUseRetailConnectedStorage` | `false` | Si activé, le mode développeur utiliserait la partition de stockage connecté de série. Non testé. |
| `RunFromPcDataCacheSizeInGB` | `100` | **100GB réservés par défaut pour le cache de titres Run-From-PC ; verrouillé, ne peut pas être modifié par l'utilisateur** |

### Catégorie Non supervisé
| Paramètre | Valeur | Remarques |
|---|---|---|
| `AllowUsbUnattendScript` | `true` | Les scripts `.xboxunattend` sur USB s'exécutent automatiquement |
| `RunUnattendScriptImmediately` | `false` | Si true, les scripts USB s'exécutent au démarrage sans invite d'annulation |

### Remarques sur la sécurité

**Adresse e-mail du compte Microsoft stockée en texte brut.** Le magasin WdConfig du mode développeur contient l'adresse e-mail du compte Microsoft associé en texte brut. Elle est probablement lisible par tout processus ayant un accès SRA.

---

## 7. API de diffusion de contenu Xbox XCRDAPI.dll

`XCRDAPI.dll` est le noyau de gestion de contenu de la plateforme Xbox. Il gère DirectStorage, l'installation progressive, la DRM, xCloud et le stockage blob dans une seule bibliothèque.

### 7.1 DirectStorage

    DStorageGetFactory
    DStorageGetMappedControlPage

L'implémentation DirectStorage de Xbox est intégrée dans XCRDAPI, et non dans un SDK séparé.

### 7.2 Cycle de vie XVDXCrdOpenAdapter / XCrdCloseAdapter
    XCrdMount / XCrdMountContentType / XCrdUnmount / XCrdUnmountEx
    XCrdCreateXVD / XCrdDeleteXVD / XCrdResizeXVD / XCrdGrowDynamicXvd
    XCrdSetEraLaunchMapping              associates XVD with ERA partition pre-launch
    XCrdUpdateXvc / XCrdUpdateXvcEx
    XCrdDefragXvc / XCrdTrimXvc / XCrdTrimXvd
    XCrdRepairXvc


### 7.3 Installation en streaming progressif

    XCrdStreamingStart / XCrdStreamingStop
    XCrdStreamingQueryActiveInstanceId
    XCrdStreamingQueryInformation / InformationByPath / InformationEx
    XCrdStreamingQueryRegionInformation / ByPath
    XCrdStreamingQueryRegionSpecifiers / ByPath
    XCrdStreamingQueueInsertRegion
    XCrdStreamingQueueQueryRegionList / ByPath
    XCrdStreamingAdjustStreamingFlags
    XCrdStreamingQueryRegionIdByOffset

Pipeline d'installation progressive à file de priorité complète. Les régions sont des blocs adressables de contenu de jeu.

### 7.4 Intégration XCloud

    XCloudQueryFeatureBits
    XCloudSetFeatureBits

Les indicateurs de fonctionnalités du streaming xCloud sont contrôlés via la même API que le contenu local.

### 7.5 DRM / Attestation

    XCrdQueryAttestationBlob
    XCrdQueryEncryptedInfo / XCrdQueryUnlockInfo
    XCrdIsSideloadedKeyPresent
    XCrdEnableSharedPls / XCrdSetExternalPlsMapping

### 7.6 Système de blobs de stockage

    XCrdStorageCreateBlob / DeleteBlob / MoveBlob / CopyBlob
    XCrdStorageReadBlob / ReadBlobEx / WriteBlob / WriteBlobEx
    XCrdStorageQueryBlobAttributes
    XCrdXBlobCreate / Delete / Copy
    XCrdFindFirstBlob / FindNextBlob / FindCloseBlob

### 7.7 Pipeline de transfert XVD

    XCrdXvdXferInitialize / Uninitialize
    XCrdXvdXferStart / Stop
    XCrdXvdXferRead
    XCrdXvdXferGetResult

### 7.8 Systèmes de chemins

    XCrdXasBuildPath / XasBuildPathEx / XasKeyQueryValue   (XAS App Store paths)
    XCrdXdsGetVolumeMapping / XdsSetVolumeMapping           (XDS Delivery Service volumes)
    XCrdBuildPath / XCrdParsePath / XCrdUpdatePath
    XCrdQueryDevicePath / QueryDevicePathByPath
    XCrdSetFlatContentPath

---

## 8. xpal.dll Couche d'abstraction de plateforme Xbox (50 exportations)

API auparavant non documentée pour l'identité matérielle, les capacités et la gestion de l'alimentation.

### Identité matérielle

    XpalGetConsoleCertificate     hardware certificate
    XpalGetConsoleIdCch           console hardware ID
    XpalGetConsoleSerialNumberCch serial number
    XpalGetSmcFirmwareId          SMC firmware version
    XpalGetSouthBridgeType        chipset variant

### Détection de génération / SKU

    XpalIsGen8                    Xbox One
    XpalIsGen9                    Series X/S
    XpalGetGenerationType
    XpalIsHyperV                  hypervisor active
    XpalIsExternalDevkit / XpalIsInternalDevkit
    XpalGetVmType
    XpalGetSystemType / XpalGetServerType / XpalGetConsoleMode


### Indicateurs de capacités

    XpalIsCapabilityEnabled
    XpalIsCapabilityEnabledByVm
    XpalIsFactorySettingEnabled
    XpalGetFactorySettings
    XpalGetCapabilities
    XpalIsFeatureEnabled


### Gestion de l'alimentation

    XpalInitiateDump              trigger crash dump on demand
    XpalInitiatePowerStateToggle
    XpalInitiateSystemShutdown
    XpalSetWakeupTimer
    XpalQueryPowerToggleSource
    XpalIsInForcedCs / XpalIsTransitioningToConnectedStandby
    XpalIsSilentBootMode
    XpalNotifyForcedCsHeartbeat
    XpalIsRebootRequested
    XpalRefreshPowerChimeMode


### Configuration

    XpalGetXConfig / XpalSetXConfig    Xbox config store (modern EEPROM equivalent)
    XpalSetSystemTime
    XpalSetInformation
    XpalReportUem                      trigger UEM (Universal Error Message)


### ERA / VM de jeu

    XpalQueryTitleVmInfo
    XpalWaitForTitleVmTermination
    XpalBackgroundActivityRequest

---

## 9. eracontrol.exe Gestionnaire du cycle de vie de la partition ERA

`C:\Windows\System32\eracontrol.exe` s'exécute en tant que LocalSystem (démarrage manuel) et gère l'intégralité du cycle de vie des partitions de jeu ERA. L'analyse complète des imports se trouve dans la section 28. Résumé des imports clés :

- `NtOpenPartition` ouvre directement le handle de la partition Hyper-V ERA
- `RtlSetProcessIsCritical` se marque comme critique (BSOD système s'il plante)
- `XCRDAPI.dll` monte/démonte les XVD de jeux via `XCrdSetEraLaunchMapping`
- `RIMAddInputObserver` / `RIMRemoveInputObserver` intercepte les entrées brutes du contrôleur pour les router vers ERA
- `XblaInitialize` amorce le contexte d'authentification Xbox Live de la console
- `LogonUserExExW` crée des jetons d'ouverture de session utilisateur pour la session ERA
- `UMgrOpenProcessHandleForAccess` accès au handle de processus du gestionnaire d'utilisateurs
- `PsmQueryBackgroundActivationType` état d'activation en arrière-plan

On trouve également dans le même répertoire : `eraproxyapp.exe` (339KB), le compositeur côté SystemOS et pont IPC entre ERA et le shell. Analyse complète des imports dans la section 29.

---

## 10. Traces ETL BlackBox (N:\BlackBox\)

Le répertoire `N:\BlackBox\` contient des traces d'enregistreur de vol ETW en direct. D'après l'analyse d'une trace capturée :

**Remarque :** Le format ETL Xbox ne se résout qu'avec 'tracerp'

### Chemins de l'arborescence source interne (intégrés dans l'instrumentation de débogage)

    onecoreuap\xbox\xblauth\lib\authmanagerimpl.cpp
    onecoreuap\xbox\xblauth\lib\authmanagertokens.cpp
    onecoreuap\xbox\xblauth\lib\xstsauthorizer.cpp
    onecoreuap\xbox\xblauth\util\httprequest.cpp

### Parties de confiance d'authentification Xbox Live

    http://xdes.xboxlive.com/          Xbox Dev/Engineering Services
    http://xboxlive.com                Standard XBL
    http://mp.microsoft.com/           Microsoft Passport (MSA)
    http://instance.mgt.xboxlive.com   Instance/session management

### Plantages capturés

1. **`XboxUI.exe` BEX64** Le shell du tableau de bord a subi un dépassement de tampon de pile (`STATUS_STACK_BUFFER_OVERRUN`, `0xc0000409`) dans `XboxUI.Data.dll` à l'offset `0x13eb0`
2. **`MoAppHang`** Blocage d'application UWP pour le package `REDACTED_GUID`

---

## 11. Autres découvertes notables

### WSL présent sur Xbox

Les services `LxssManager` et `lxcore` sont présents avec `LaunchProtected: 0x2` (processus protégé) et `SeTcbPrivilege`. WSL sur Xbox s'exécute avec un niveau de confiance OS, et d'après son utilisation, il alimente presque certainement quelque chose ou est au moins d'une manière mineure lié à `Xbox.ConsoleXCloudPlayer` (client de streaming de jeux xCloud).

wsl.exe est présent mais n'est **pas** lisible.

### Binaires System32 exclusifs à Xbox

DLL notables absentes de Windows standard :

- `XCRDAPI.dll` diffusion de contenu (documenté dans la section 7)
- `XBBlackbox.dll` enregistreur de vol (documenté dans la section 30)
- `XBCastRecv.dll` récepteur Xbox Cast / Miracast (documenté dans la section 30)
- `XVMAudioServer.dll` serveur audio VM inter-partitions
- `Xbox.Shell.Api.dll` / `Xbox.Shell.OneStoreServices.dll` API shell (documentée dans la section 30)
- `XboxCommandService.dll` commande / automatisation
- `XboxUserSim.dll` automatisation de tests d'interface utilisateur
- `xboxgipsynthetic.dll` / `xboxsynthetickm.dll` injection de contrôleur virtuel GIP synthétique (documenté dans la section 30)
- `AppXDeploymentExtensions.xbox.dll` déploiement AppX spécifique à Xbox
- `xvnapi.dll` API réseau virtuel Xbox
- `xbsc_xs.dll` compilateur de shaders Xbox Series (documenté dans la section 16.2)

### Services présents mais non documentés

- `EraControlService` cycle de vie de la partition ERA
- `XvdStreamSvc` (`xnetsharedservice.exe`) streaming XVD / installation progressive
- `XUpdMgr` gestionnaire de mise à jour Xbox (séparé de Windows Update, apparemment ?)
- `XSraFlt` pilote de filtre SRA Xbox
- `Manufacturing Broker` service d'approvisionnement d'usine
- `TestSirepSvc` protocole de test interne SIREP
- `GameCoreController` service de contrôleur de jeu GameCore du GDK
- `ConnectedStorage` service de sauvegarde cloud Xbox
- `VideoManagerService` gestion de la sortie vidéo
- `XBBlackbox` service d'enregistreur de vol
- `xbdiagservice` service de diagnostic Xbox
- `XtfRtService` service d'exécution XTF

Pilotes hérités / bas niveau supplémentaires confirmés présents dans le registre des services (voir section 11.2) :

- `Zurich` pilote virtuel DVB

### `xvnc` / `xvncbus` Carte réseau virtuelle Xbox

`xvnc.sys` et `xvncbus.sys` forment une **pile de cartes réseau virtuelles** ; l'énumération du service `xvnc` révèle :

    ROOT\xvnc\0000             root/loopback virtual NIC
    {e720983a-...}\wifi\01
    {e720983a-...}\wfd\01      Wi-Fi Direct
    {e720983a-...}\wfd_role0\01

`xvncbus` est un pilote de bus WDF 1.15 qui énumère les cartes réseau virtuelles par-dessus l'adaptateur sans fil physique. La partition ERA n'accède pas directement à la pile réseau ; elle communique via `NetXVmService`, qui possède la couche de carte réseau virtuelle `xvnc`. Le GUID `{e720983a-...}` identifie le matériel de l'adaptateur sans fil Xbox.

### `xviomonc.sys` Client moniteur XVIO

Pilote de démarrage au boot (`Start: 0x1`) qui gère le focus de la partition d'affichage. Analyse des imports :

    XVIO.SYS:   XvioInitialize, XvioCleanup, XvioPostMessage,
                XvioSetFocus, XvioGetCurrentPartitionId  - new XVIO export
    VMNP.SYS:   NpSetupVmImpersonation
    xpalk.dll:  XpalIsCapabilityEnabled

`xviomonc` ne gère **pas** les données de framebuffer ; c'est uniquement un pilote de signalisation et de gestion du focus. `XvioSetFocus` change quelle partition a le focus d'affichage/d'entrée ; `XvioGetCurrentPartitionId` identifie la partition active. La capture d'images réelle est gérée par `srakmd_arden.sys`.

`NpSetupVmImpersonation` de `VMNP.SYS` permet au pilote moniteur d'usurper l'identité de sécurité de la partition ERA lors de l'accès aux ressources d'affichage ERA à travers la frontière de partition.

### G:\ Tampons GameDVR

Trois fichiers sur G:\ sont des tampons bruts circulaires mappés en mémoire, partagés entre ERA et SystemOS :

- `GameDVR_VideoBuffer` 272MB de capture vidéo en continu
- `GameDVR_AudioBuffer` 16MB d'audio de jeu
- `GameDVR_AudioBuffer_SysLoopback` 3MB d'audio système/UI (flux séparé)

---

## 11.1 Constatations du registre

### Référence au lecteur K:\ réservé aux devkits

`HKLM\SOFTWARE\Microsoft\Durango\XTF` contient un chemin codé en dur :

    K:\TDK\Tools\XtfJuno.dll

### `HKLM\SYSTEM\ResourcePolicyStore`

| Niveau | Budget mémoire |
|------|--------------|
| `BackgroundSmall` | 40MB |
| `Background` | (arrière-plan standard) |
| `Balloon` | 5120MB |

Niveaux de stratégie CPU :

| Stratégie | Allocation CPU |
|--------|---------------|
| `Paused` | 1% |
| `SoftCapLow` | 10% |
| `SoftCapFull` | 100% |
| `HardCap0` | 0% - complètement gelé |

**Stratégie BeanHog** (peut-être le budget du processus de jeu au premier plan ?) :

- Mémoire : niveau avant-plan
- CPU : 100%
- `DoNotKill` : true
- Priorité : importance la plus élevée

---

## 11.2 Archéologie de l'héritage Xbox One

Trois pilotes de l'ère Xbox One subsistent dans le registre des services de la Series S. Deux sont désactivés ; un est activement en cours d'exécution.

### Pile de décodeur TV `Zurich`

`zurichs.sys` est le pilote virtuel DVB de la Xbox One. Statut : **désactivé**, mais toujours enregistré.

Constat clé : `zurichs.sys` importe les tampons en anneau de `XVIO.SYS`. Le tuner TV a été conçu architecturalement pour délivrer son flux vidéo décodé via les tampons en anneau de l'hyperviseur XVIO. Le tuner utilisait également `ZwUpdateWnfStateData` pour publier l'état du tuner via le Windows Notification Facility (WNF).

### `PetraXC` Dispositif de contrôle du capteur Kinect

Un pilote de périphérique virtuel WDF désormais identifié comme le **périphérique KinectSensorControl**, l'abstraction matérielle côté noyau pour le capteur caméra Kinect. Statut : **désactivé jusqu'à l'arrivée du périphérique** (modèle de démarrage à la demande WDF).

Caractéristiques notables :

- Construit avec **WDF 1.11**, ce qui correspond à Windows 8, plaçant son origine à la base du noyau de la Xbox One d'origine
- Importe `XVIO.SYS`, ce qui signifie qu'il communique via le transport de tampons en anneau de l'hyperviseur
- Présente `\\.\KinectSensorControl` comme interface de périphérique, consommée par `KinectMediaSource.dll` dans le pipeline nuiservice via `DeviceIoControl` (voir section 33)

### `pspsra.sys` Pont AMD PSP vers SRA

Statut : **en cours d'exécution active** (`Start: 0x0`, démarrage au boot). Accès refusé au niveau du noyau ; le pilote est verrouillé et ne peut pas être inspecté plus avant.

`pspsra.sys` se situe directement sous la partition SRA dans la chaîne de démarrage, comme **pont entre le processeur de sécurité de plateforme AMD (PSP) et la couche SRA**. Le PSP AMD gère l'attestation fTPM et le certificat de console au niveau du matériel nu, et `pspsra.sys` est le pont qui fait remonter cette chaîne de confiance dans SRA. Cela le place dans le même niveau de confiance que `XVIO.SYS` et `XSraFlt.sys`, initialisé avant SystemOS, opaque pour celui-ci et inaccessible même avec un accès noyau complet.

---

## 12. Questions non résolues + pilotes

Questions :

1. **Emplacement de XVIO.SYS** absent de tout système de fichiers accessible ; chargé par l'hyperviseur au démarrage
2. **Utilisation de WSL** confirmée présente et utilisée, mais le rôle spécifique dans l'OS Xbox n'est pas entièrement cartographié
3. **`XCrdXpfOp`** fonction XCRDAPI non identifiée (XPF = ?)
4. **Emplacement de `XSraFlt.sys` + `XRmnt.sys`** confirmé absent de tous les systèmes de fichiers accessibles ; chargés par l'OS hôte aux côtés de XVIO.SYS
5. **GUID `{REDACTED_GUID}` de `xvnc`** GUID de l'adaptateur sans fil, chaîne de pilotes complète non cartographiée
6. **Cible du point de réanalyse `S:\Shares\TitleScratch`** activement masquée par l'OS dans les listages de répertoires ; nécessite `FSCTL_GET_REPARSE_POINT` sous la couche cmd.exe. Presque certainement `\Device\Xrfs\<partition-guid>` (voir section 26)
7. **Surface IOCTL de `xvmctrl.sys`** dump noyau en direct bloqué (restriction `NoKernelDumps` en mode dev retail) ; table de dispatch IOCTL pas encore énumérée
8. **GUID de la partition ERA** non exposé via un chemin de registre accessible ; serait visible dans un dump noyau (bloqué, recherche de contournements en cours)
9. **Contenu de `N:\EtwPlus\`** activement masqué par un pilote de filtre de système de fichiers noyau ; les listages de répertoires renvoient vide malgré une activité d'écriture confirmée. L'identité du filtre n'a pas été déterminée (voir section 3.2)
10. L'OS hôte dans son ensemble — on ne sait même pas avec certitude ce qu'il fait.

Pilotes :

1. **`xtcc.sys`**, probablement responsable de quelque chose lié à la sécurité étant donné la grande quantité d'imports `ntoskrnl.exe` et `XVIO.sys`
2. **`FLTMGR.SYS`** importé par `XRmnt.sys`, `XRo.sys`

---

## 13. E/S virtualisées et accès distant (XVIO/SRA)

L'analyse des exports de `xboxcloudstreaming.dll` et des entrées de registre `CurrentControlSet\Services` montre une intégration noyau profonde pour les connexions distantes, utilisant un modèle matériel « synthétique » plutôt qu'une émulation logicielle standard. La VM ERA voit le ou les mêmes périphériques synthétiques, quelle que soit la source de l'entrée (distant, USB, sans fil, etc.).

### 13.1 La pile XVIO (E/S virtuelles)

Le framework XVIO semble être la principale méthode d'injection d'événements au niveau matériel dans SystemOS à partir de sources externes ou inter-partitions.

| Service | Catégorie | Fonction |
| --- | --- | --- |
| `hvsocketxvio` | Transport | Service de pont connectant les sockets Hyper-V au protocole XVIO. |
| `InputXVIOClient` | Coordonnateur | Gère le mappage des paquets d'entrée distants vers les nœuds de périphériques virtuels. |
| `xviokbdbus` / `xviomoubus` | Pilote de bus | Énumère les périphériques HID virtuels sur un bus interne synthétique. |
| `xviokbd` / `xviomou` | Pilote de périphérique | Pilotes de fonction spécifiques pour claviers et souris virtualisés. |

### 13.2 Pipeline de contrôleur synthétique

Le binaire `xboxcloudstreaming.dll` exploite `XboxgipSynthetic.dll` pour créer ce que l'OS perçoit comme des périphériques locaux physiquement connectés.

- **Virtualisation audio :** Grâce à `SyntheticController_AddAudioHeadset`, le système peut acheminer l'audio réseau distant dans la pile audio locale de la console en tant que périphérique lié au matériel.
- **Injection d'entrées (RIM) :** L'utilisation du Remote Input Manager (`ext-ms-win-ntuser-rim-l1-1-0.dll`) confirme que les sessions xCloud et de jeu à distance utilisent les mêmes méthodes d'injection à haute autorité que le Bureau à distance de Windows, notamment `InjectKeyboardInput` et `InjectPointerInput`.

### 13.3 Pilotes SRA et « Arden »

> **Remarque :** Le pilote `SraKmdArden` est spécifique au matériel de l'architecture Series X/S (Arden). Ce pilote permet probablement au système d'intercepter le tampon d'affichage au niveau du noyau, minimisant ainsi la latence généralement associée au dessin inter-VM.

### 13.4 Pont HvSocket (GUID `4545ffe2-...`)

Le GUID HvSocket précédemment non identifié a été associé au service `hvsocketxvio`. Cela confirme que XVIO n'est pas un protocole autonome mais une couche s'exécutant au-dessus du transport de sockets interne d'Hyper-V.

Cela suggère que la **partition ERA (jeu)** ne communique pas directement avec le réseau pour les entrées ; à la place :

1. **SystemOS** reçoit les paquets réseau via `XboxNetApiSvc`.
2. **`xboxcloudstreaming.dll`** traite le flux.
3. **`hvsocketxvio`** achemine les données d'entrée brutes à travers la frontière de partition via **HvSocket**.
4. La couche Hyperviseur/Hôte les injecte dans la partition cible en tant qu'événement matériel.

---

## 14. Volume M:\ | Architecture d'overlay

M:\ (étiqueté « System OS Misc ») fonctionne comme un **volume d'overlay**, une arborescence contenant des composants qui sont montés par-dessus l'image de base C:\. Cette architecture permet à Microsoft de livrer une image OS unique et d'appliquer des ensembles de fonctionnalités spécifiques via des overlays au moment du montage.

### 14.1 Structure du volume

    M:\
    ├── Catalog000-003.bin     volume-specific code integrity catalogs
    └── windows\
        ├── system32\
        │   ├── drivers\       kernel drivers
        │   ├── ht\            Kinect support (see section 33)
        │   └── [~120 DLLs]    userspace components
        ├── SystemApps\        system apps
        ├── DefaultApp\
        ├── Fonts\
        ├── Speech_OneCore\
        ├── textinput\
        └── WebManagement\

### 14.2 Liens symboliques du système de fichiers

C:\ référence les composants M:\ via des liens symboliques NTFS. Les liens symboliques existent à deux niveaux :

**Niveau des pilotes System32 :**

    C:\Windows\System32\drivers\srakmd_arden.sys -> M:\windows\system32\drivers\srakmd_arden.sys

**Niveau du répertoire Windows**

    C:\Windows\DefaultApp    -> M:\Windows\DefaultApp
    C:\Windows\Fonts         -> M:\Windows\Fonts
    C:\Windows\SystemApps    -> M:\Windows\SystemApps
    C:\Windows\WebManagement -> M:\Windows\WebManagement

L'overlay M:\ est plus omniprésent qu'un simple remplacement de pilotes/DLL ; les répertoires de sous-systèmes Windows centraux, y compris le magasin de polices, les applications système et l'interface de gestion Web, sont entièrement résidents dans M:\. Cela pourrait signifier qu'un overlay spécifique contrôle non seulement les pilotes GPU et de capture, mais aussi, dans une certaine mesure, l'ensemble des applications système et de la couche shell UI.

Une énumération récursive complète des liens symboliques de C:\ pointant vers M:\ n'a pas été effectuée.

### 14.3 Pilotes spécifiques au matériel (M:\windows\system32\drivers\)

| Pilote | Taille | Fonction |
|---|---|---|
| `srakmd_arden.sys` | 274KB | KMD de capture SRA -> capture d'images spécifique au matériel Arden |
| `acpi.sys` | 873KB | ACPI -> build spécifique au matériel (plus grand que le générique) |
| `spaceport.sys` | 1MB | Port de stockage -> cryptographie XVD + vérification de licence |
| `spacedump.sys` | 304KB | Pilote de dump de stockage |
| `buttonconverter.sys` | 90KB | Conversion HID d'alimentation/éjection -> événements console |
| `qwavedrv.sys` | 90KB | Pilote QoS / qualité réseau |
| `acpiex.sys` | 181KB | Extensions ACPI |
| `AcpiDev.sys` | 61KB | Extensions de périphérique ACPI |
| `acpitime.sys` | 57KB | Minuterie ACPI |

**Constat :** `XSraFlt.sys` est absent des pilotes de M:\ ainsi que de C:\. Il n'est stocké sur aucun volume de système de fichiers accessible, ce qui suggère qu'il est chargé par l'OS hôte au démarrage aux côtés de `XVIO.SYS` et `FLTMGR.sys`.

### 14.4 Composants utilisateur spécifiques au matériel (M:\windows\system32\)

DLL/EXE notables propres à M:\ :

**Pile GPU / Shader :**

- `umd12ddi_arden.dll` (1.56MB)  DDI de pilote D3D12 en mode utilisateur, matériel Arden
- `umd12ddi_d.dll` (1.5MB)  UMD D3D12, build instrumenté debug/PIX
- `umd12ddi_i.dll` (1.14MB)  UMD D3D12, build intégré/de secours
- `newbe_xs.dll` (26MB)  backend du compilateur de shaders GPU Arden « NewBe »
- `xbsc_xs.dll` (3.9MB)  frontend du compilateur de shaders Xbox Series
- `dxcompiler_xs.dll` (17.8MB)  compilateur HLSL Xbox Series
- `dxbc2dxil_xs.dll` (2.9MB)  convertisseur de bytecode DXBC vers DXIL
- `pixrtddi.dll` (679KB)  DDI de rendu/débogage PIX

**Toolchain développeur / PIX :**- `VsGraphicsRemoteEngine.exe` (4.75MB) moteur distant du profileur GPU PIX
- `VsGraphicsCapture.dll` (225KB) capture de frames PIX
- `VsGraphicsExperiment.dll` (327KB) framework d'expérimentation PIX
- `DXCaptureReplay.dll` (18MB) moteur de rejeu de capture GPU
- `DXCap.exe` (1.19MB)  outil de capture GPU
- `DXToolsMonitor.dll` / `DXToolsOfflineAnalysis.dll` / `DXToolsReporting.dll` pile d'analyse PIX
- `DXGIDebug.dll` (151KB) couche de débogage DXGI
- `d3d12SDKLayers.dll` (4.8MB) couches de validation/débogage D3D12
- `d3d11_3SDKLayers.dll` (1.19MB) couches de débogage D3D11
- `d2d1debug3.dll` (618KB) couche de débogage D2D
- `VSD3DWARPDebug.dll` (155KB) build de débogage du rastériseur logiciel WARP
- `plmdebug.exe` (204KB) débogueur PLM (cycle de vie des processus)

**Streaming / Accès distant :**

- `rdpbase.dll` (1.8MB) bibliothèque de base RDP
- `rdpserverbase.dll` (2.3MB) base du serveur RDP
- `XboxDevService.exe` (3.7MB) hôte du service de dev Xbox
- `XboxDevService.ProxyStub.dll`

**Pile Social / Plugins :**

- `DiscordPlugin.dll` (139KB) intégration Discord
- `TwitchPlugin.dll` (639KB) intégration du streaming Twitch

**Autres éléments notables :**

- `XboxSyntheticKM.dll` (36KB)
- `xrmntcl.exe` (90KB) client Xbox Runtime Mount
- `xtfupdateT_s_i.dll` (98KB) ?
- `xtcapi.dll` (57KB) API XTC (communications de titres Xbox ?)
- `wusys.dll` (308KB) intégration système Windows Update

---

## 15. Pile GPU | Pipeline de compilation des shaders

Le pipeline complet de compilation des shaders des Xbox Series S/X se trouve sur M:\ et est absent de C:\. Aucune compilation de shaders n'est possible sans le recouvrement spécifique au matériel monté.

### 15.1 `newbe_xs.dll`

DLL de 26 Mo. Backend du compilateur de shaders GPU Arden. Seulement 6 exports :

    NB_CompileShader          compile individual shader stage
    NB_CompilePipeline        compile full pipeline state object
    NB_CreateOptimizer        create register allocator / instruction scheduler
    NB_GetRegPressure         register pressure analysis (PIX-facing)
    NB_GetShaderStats         hardware shader statistics
    NB_CreatePixDwarfApi      generate DWARF debug info for GPU shaders

La section `.pass` pourrait suggérer un pipeline de passes de type LLVM. `NB_CreatePixDwarfApi` génère des informations de débogage de shaders au niveau source pour PIX.

### 15.2 `xbsc_xs.dll`

41 exports couvrant l'API de compilation complète :

    XBSC_PipelineCompile / XBSC_GetPipelineCompileOutput
    XBSC_CompileRootSignature / XBSC_GetCompiledRootSignature
    XBSC_AssembleShader / XBSC_GetAssembledShader
    XBSC_DisassembleHwPipeline / XBSC_DisassembleHwPipelineWithCallback
    XBSC_DisassembleRawShader / XBSC_GetDisassembly
    XBSC_GetRegPressure / XBSC_GetShaderStats / XBSC_DumpShaderStats
    XBSC_CompressBuffer / XBSC_DecompressBuffer          (shader cache compression)
    XBSC_Serialize* / XBSC_Deserialize*                  (pipeline state serialization)
    SCCompileMultiShadersXbox / SCDumpHwShader*           (batch compilation)
    SC_ConvertRootSignatureToSCInputs

Les sections PE `_mmddu` et `_MMDDT0` contiennent **Microsoft Machine-Dependent Driver Data**,  des tables de microarchitecture matérielle intégrées au compilateur (latences d'instructions, topologie du fichier de registres, nombres d'unités d'exécution pour Arden).

### 15.3 `dxcompiler_xs.dll`

17,8 Mo. Fork Xbox Series du compilateur HLSL DXC. 4 exports :

    DxcCreateInstance / DxcCreateInstance2   standard DXC factory (compatible with public API)
    CreateXdxrCompiler / CreateXdxrCompiler2 Xbox DXIR compiler (Xbox-specific IR format)

### 15.4 `dxbc2dxil_xs.dll` Convertisseur de bytecode

2,9 Mo. Export unique :

    SCDxil_ConvertDxbcToDxil   convert DX11 DXBC bytecode to DXIL for DX12 pipeline

Permet aux shaders DX11 rétrocompatibles de s'exécuter sur le pipeline Arden exclusivement DX12.

### 15.5 Chaîne complète de compilation des shaders

    Game/App submits HLSL or legacy DXBC shader
                ↓
        [HLSL path]                    [DXBC legacy path]
    dxcompiler_xs.dll                dxbc2dxil_xs.dll
    (DxcCreateInstance -> DXIL)       (SCDxil_ConvertDxbcToDxil -> DXIL)
                ↓                             ↓
                └──────────┬──────────────────┘
                            ↓
                xbsc_xs.dll (XBSC_PipelineCompile)
                calls newbe_xs.dll NB_ backend
                uses _MMDDT0 Arden microarch tables
                            ↓
                umd12ddi_arden.dll
                (submits compiled ISA via D3D12 DDI)
                uses xg_xs.dll for texture layout
                            ↓
                srakmd_arden.sys (kernel)
                XvioGetReservedMemory -> hypervisor carve-out RAM
                zero-copy framebuffer -> ERA partition

---

## 16. `xg_xs.dll` Bibliothèque de disposition des textures graphiques Xbox

Située sur **C:\** (pas sur M:\). Contient 27 exports couvrant le tuilage des textures, la disposition BVH du ray tracing et la compression DCC.

### 16.1 Surface des exports

    XGComputeBufferLayout
    XGComputeTexture1DLayout / 2DLayout / 3DLayout
    XGComputeOptimalSwizzleMode / OptimalDepthStencilSwizzleMode
    XGComputeTileShape
    XGSuggestSwizzleMode
    XGValidateDepthStencilSwizzleMode / XGValidateDescriptor
    XGCreateTexture1DComputer / 2DComputer / 3DComputer
    XGCreateTextureComputer / XGCreateTextureComputerFromDescriptor
    XGCreateBVHComputer / XGCreateBVHComputer2       ray tracing BVH layout
    XGEncodeDCC / XGDecodeDCC / XGDecodeDCCSurface   AMD Delta Color Compression
    XGShuffleTextureBufferForDirectStorage           GPU-side texture tiling for DirectStorage
    XGSetHardwareVersion                             configure for Series S vs Series X memory layout
    XGInitializeLibrary / XGTerminateLibrary
    XGEnableExclusiveLocking / XGEnterExclusiveLock / XGLeaveExclusiveLock

### 16.2 Principaux constats

**La disposition BVH du ray tracing est spécifique au matériel.** `XGCreateBVHComputer2` expose une API de disposition BVH de deuxième génération, ce qui suggère que l'architecture Arden possède un format de nœuds BVH distinct qui diffère du DXR générique.

**La compression DCC d'AMD est exposée.** `XGEncodeDCC` / `XGDecodeDCC` implémentent la compression de couleur delta (Delta Color Compression) d'AMD, la compression matérielle sans perte du framebuffer utilisée sur les GPU RDNA. `XGDecodeDCCSurface` est l'API utilisée par PIX lors de la lecture des framebuffers capturés compressés en DCC.

**Tuilage DirectStorage.** `XGShuffleTextureBufferForDirectStorage` effectue le mélange côté GPU qui transforme la disposition des textures sur disque en format de tuilage matériel Arden pendant la décompression GPU, permettant un chargement zéro-copie vers la VRAM.

**`XGSetHardwareVersion` conditionne tous les algorithmes de disposition.** La bibliothèque contient des implémentations de disposition pour plusieurs révisions matérielles. Appeler `XGSetHardwareVersion` avec l'identifiant de la Series S ou de la Series X produit des résultats de tuilage différents reflétant les différentes largeurs de bus mémoire et géométries de cache.

### 16.3 Section de métadonnées de build `.xbld`

`xg_xs.dll` contient une section PE `.xbld` absente de tous les autres binaires Xbox, indiquant qu'elle provient d'un pipeline de build CI GDK séparé plutôt que du système de build de l'OS Xbox. Le système de build de l'OS met les horodatages à zéro et supprime les sections de métadonnées ; la CI GDK ne le fait pas.

    _xbld_edition_build         = GXDK, 0x65F41B62
    _xbld_edition_full_productbuild = GXDK, 10.0.26100.7010
    _xbld_edition_sdktype       = GXDK, 260400
    _xbld_edition_name          = GXDK, April 2026 GXDK
    _xbld_edition_mscver        = GXDK, 193833145.100

La valeur `edition_name` de **« April 2026 GXDK »** précède la sortie publique de cette édition du SDK (au moment de la rédaction, nous sommes le 9 mars 2026), confirmant que l'OS commercial embarque des composants GDK compilés contre le prochain cycle SDK non publié. Le versionnage `sdktype=260400` suit le modèle `YYMMRR` (Année/Mois/Révision).

L'horodatage `edition_build` `0x65F41B62` se décode en **13 mars 2024**, plus d'un an avant la date de build de l'OS (12 février 2026), indiquant que les algorithmes de disposition des textures sont stables et n'ont pas été modifiés depuis au moins 5 cycles de publication GDK.

`mscver=193833145.100` identifie le compilateur comme étant **MSVC 19.38** (Visual Studio 2022 17.8.x).

### 16.4 Inférence du pipeline de build (UUP ?)

    GDK CI pipeline builds xg_xs.dll (with .xbld metadata intact)
                ↓
        ┌─────────────────────────┐
        ↓                         ↓
    Xbox OS image ingests       April 2026 GDK SDK package
    artifact directly           ships same binary to developers
        ↓
    Ships on every retail console

Cela signifie que le `xg_xs.dll` des consoles commerciales est bit pour bit identique à ce que les développeurs reçoivent dans le GDK. Une vérification de hachage par rapport à la publication publique du GDK d'avril 2026 (lorsqu'elle sera disponible) le confirmerait.

---

## 17. Modèle d'intégrité du code par catalogue de confiance

### 17.1 Format du conteneur PE

Les fichiers `Catalog*.bin` de chaque volume sont des **exécutables PE32+ avec le sous-système `0x11`** (« Xbox Code Catalog »), un sous-système non documenté, absent de toute documentation publique. Principales caractéristiques de l'en-tête PE :

    Magic:          PE32+ (64-bit)
    Subsystem:      0x11  ("Xbox Code Catalog", obtained from strings inside MSVC link.exe)
    Entry point:    0 (never executed)
    Code size:      0 (no executable code)
    DLL Chars:      IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE
                    IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY  <- critical
                    IMAGE_DLLCHARACTERISTICS_NX_COMPAT
    Sections:       1 unnamed read-only section (raw payload)

Quant à leur fonctionnement, je ne suis pas sûr, la Xbox One

### 17.2 Chaîne de confiance

    Hypervisor/Host OS validates Catalog*.bin PE Authenticode signature at boot (FORCE_INTEGRITY)
                ↓
    Catalog payload contains hashes of protected binaries on that volume
                ↓
    Code Integrity checks each binary's hash against catalog at load time
                ↓
    Individual binaries carry no Authenticode signatures of their own

C'est un modèle de **confiance par catalogue**. Une seule signature Microsoft couvre des tonnes de fichiers par volume. Les binaires individuels, et probablement d'autres types de fichiers, ne sont pas signés ; leur intégrité est garantie par leur appartenance au catalogue.

**Nombre d'entrées et tailles :**

| Volume | Catalogue | Taille de la charge utile | Entrées (÷32) |
|---|---|---|---|
| C:\ | Catalog000.bin | 5 533 696 octets | 172 928 |
| C:\ | Catalog001.bin | 253 952 octets | 7 936 |
| C:\ | Catalog002.bin | 57 344 octets | 1 792 |
| C:\ | Catalog003.bin | 176 128 octets | 5 504 |
| M:\ | Catalog000.bin | 5 537 792 octets | 173 056 |
| M:\ | Catalog001.bin | 258 048 octets | 8 064 |
| M:\ | Catalog002.bin | 61 440 octets | 1 920 |
| M:\ | Catalog003.bin | 180 224 octets | 5 632 |

La longueur de la charge utile de chaque catalogue (dans la section PE) est exactement divisible par 32 sans reste, et n'est pas systématiquement divisible par 36, 40 ou d'autres tailles d'enregistrement courantes. Cela suggère fortement que la charge utile est un tableau plat d'**enregistrements de 32 octets**.

**Algorithme de hachage :** Les SHA-256 et SHA-1 de fichiers entiers de binaires connus n'ont pas été trouvés dans les catalogues, ce qui exclut un simple hachage de fichier entier. Le format le plus probable est celui des **hachages de pages Authenticode**, la norme CI de Windows où chaque page alignée sur 4 Ko des sections mappées d'un fichier PE est hachée individuellement. Cela produirait une entrée de 32 octets (SHA-256) par page et par fichier, ce qui explique les grands nombres d'entrées (172 928 entrées pour le seul C:\).

**Ordre :** La charge utile n'est pas triée par valeur de hachage. Le schéma d'ordre n'a pas été déterminé ; les possibilités incluent un tri par hachage du chemin de fichier, par package d'installation, ou par décalage de page dans l'ensemble de fichiers du volume, ou même par une caractéristique NTFS.

**Pas d'en-tête :** Les 128 premiers octets de la charge utile ne contiennent aucun magic ASCII reconnaissable, aucun petit champ entier qui pourrait indiquer un compte ou une version, et aucune structure cohérente avec un en-tête standard. Le tableau de hachages commence à l'octet 0 de la charge utile, sans préambule.

### 17.3 Application uniquement au chargement

L'application de l'intégrité du code se fait **uniquement au chargement**. Une fois qu'un binaire réussit la vérification du hachage du catalogue et que les pages sont mappées en mémoire, la CI n'intervient plus. L'HVCI (intégrité du code protégée par l'hyperviseur), si elle était active sur SystemOS, fermerait la fenêtre TOCTOU (temps de vérification à temps d'utilisation) résultante en rendant les pages de code chargées en lecture seule au niveau matériel dans la table de pages de l'hyperviseur. **L'HVCI est confirmée désactivée sur SystemOS**, `IsSecureKernelRunning = 0x0` (voir section 18). La fenêtre TOCTOU est donc présente.

### 17.5 Composants de l'OS hôte

Deux pilotes sont confirmés absents de tous les volumes de système de fichiers accessibles et sont chargés directement par l'OS hôte avant l'initialisation de SRA :

- `XVIO.SYS` noyau d'E/S virtuel Xbox (aucune entrée de service de registre, sur aucun volume)
- `FLTMGR.sys` gestionnaire de filtres
- `XSraFlt.sys` filtre SRA (l'entrée de service existe, mais aucun fichier correspondant sur aucun volume)

Ces composants existent entièrement en dehors du modèle de confiance par catalogue. Ils ne peuvent pas être altérés même avec un accès complet au noyau SystemOS, car ils sont mappés par le chargeur de démarrage avant que l'OS hôte (parent du System OS) ne commence le chargement.

Des informations sur les composants Xbox One [peuvent être trouvées ici](https://xboxoneresearch.github.io/wiki/boot/vbi/), mais je ne peux pas être entièrement sûr que HostOS n'a pas changé à ce jour.

---

## 18. Statut de l'HVCI

> **Impact :** Avec l'HVCI désactivée, l'intégrité du code ne s'applique qu'au chargement. Une fois qu'un binaire est mappé en mémoire, aucune application matérielle n'empêche sa modification en mémoire. La fenêtre TOCTOU décrite à la section 17.3 est donc ouverte. La frontière de sécurité prévue reste entièrement dépendante du fait que SystemOS ne communique pas avec ERA (GameOS).

`HKLM\SYSTEM\CurrentControlSet\Control\DeviceGuard\Scenarios\KeyGuard\Status`

    IsSecureKernelRunning = 0x0

Le noyau sécurisé (VTL1) ne s'exécute pas sur SystemOS, ce qui confirme que l'HVCI ne peut pas être active. C'est un compromis de performance délibéré : pas de taxation VTL1 sur l'activité du noyau dans la boucle de jeu. La frontière de sécurité est la partition de l'hyperviseur elle-même, et non la protection mémoire dans la partition. Le modèle d'intégrité du code (section 17) n'est donc appliqué qu'au chargement, sans protection TOCTOU.

---

## 19. Espace de noms IPC de l'hyperviseur sevpipe

Un espace de noms de périphérique de pipe nommé Windows personnalisé (`\\.\sevpipe\`) servant de colonne vertébrale IPC principale pour toutes les communications inter-processus et inter-partitions spécifiques à Xbox. Ce n'est pas une construction de l'hyperviseur au niveau du protocole ; la sémantique sous-jacente est celle des pipes nommés Windows standard, enregistrée sous un espace de noms de périphérique personnalisé pour le masquer aux outils d'énumération de pipes normaux.

### 19.1 Inventaire complet des pipes

    EtxForwarder                  <- telemetry data
    EtxForwarderToUploaderControl <- telemetry control
    XrfsPipe                      <- cross-partition filesystem
    ERASwapChainPipe              <- ERA framebuffer (dynamic)
    ERAPresentPipe                <- ERA present signals (dynamic)
    XvioAudioPipe                 <- ERA audio (dynamic)
    XvioAudioEventPipe            <- ERA audio events (dynamic)
    XboxOneAudioStatePipe         <- system audio state
    XTF_SYSTEM_TO_TITLE           <- XTF command channel (dynamic)
    XTF_TITLE_TO_SYSTEM           <- XTF response channel (dynamic)
    CloudStreamingServer          <- xCloud (dynamic)
    \SEVPipe\epmapper             <- Xbox RPC endpoint mapper
    \SEVPipe\epmapperX            <- extended RPC endpoint mapper

Les pipes dynamiques n'existent que lorsque ERA est active, qu'une session XTF est en cours, ou que xCloud est en streaming.

### 19.2 Carte de contrôle d'accès

    EtxForwarder                  <- DevToolsUser WRITE 
    EtxForwarderToUploaderControl <- DevToolsUser WRITE 
    XrfsPipe                      <- SYSTEM only 
    ERASwapChainPipe              <- SYSTEM only 
    ERAPresentPipe                <- SYSTEM only 
    XvioAudioPipe                 <- SYSTEM only 
    XTF_SYSTEM_TO_TITLE           <- SYSTEM only 

### 19.3 Pipeline de télémétrie

    Process calls EtxEventWrite()
        ↓
    EtwPlus.dll
        ↓ writes to
    \\.\pipe\EtxUploader
        ↓
    EtwUploader.exe (PID 1808, SYSTEM)
        ↓ forwards to
    \\.\sevpipe\EtxForwarder          <- data
    \\.\sevpipe\EtxForwarderToUploaderControl  <- control
        ↓
    NetworkTransferManagerService.exe (PID 2040, SYSTEM)
        ↓
    [unknown endpoint, dynamic library load]
        ↑
    DevToolsUser can inject at EtxForwarder and control pipe

`EtwPlus.dll` est spécifique à Xbox (`FileDescription: Xbox ETW Plus API`), version `10.0.26100.7010`. Les exports suspend/reprise sont probablement des stubs dans les builds commerciales ; trois exports partagent la même RVA.

### 19.4 Capture d'écran RTSP videoserver.exe (très probablement un vestige de [Xbox Dev Mode Companion](https://apps.microsoft.com/detail/9nblggh519cp))

Port : 11442 (codé en dur dans le binaire). Dépendances :

    Windows.Xbox.Graphics.Display.Internal.DisplayManager
    Windows.Xbox.System.Internal.GameStreaming.GameStreamingAgent
    Windows.Xbox.Media.Capture.ApplicationClipShell

**Constat clé :** Il ne semble pas fonctionner correctement. Aucune méthode n'a été trouvée pour accéder au flux vidéo depuis l'intérieur ou l'extérieur de la console.

Chemins/drapeaux codés en dur :

    DisableXboxDevToolsTelemetry     <- env var to suppress its telemetry
    VideoServerMaxPacketSize         <- configurable via env var
    EnableVideoServer                <- WdConfig flag confirmed here
    OSDATA\...\DevkitProperties      <- reads devkit properties at runtime

### 19.5 OneSettings / Schéma Windows Update

La Xbox embarque le schéma complet de ciblage de Windows Update, y compris les entrées de ciblage `XBOXMOBILE` et les chemins de ruche de registre `WCOS`, confirmant que la Xbox Series S s'exécute sur la fondation Windows Core OS (WCOS) partagée avec HoloLens et Surface Hub. L'OS est un Windows 11 24H2 légèrement personnalisé, et non un OS de plateforme spécialement conçu.

---

## 20. Topologie des partitions de l'hyperviseur

`HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Virtualization\HvSocket\Addresses`

    LocalAddress  = {REDACTED_GUID}  SystemOS partition GUID
    ParentAddress = {REDACTED_GUID}  null parent

SystemOS se considère comme la **partition racine** (faux, l'OS hôte est la racine). La partition de jeu ERA est une enfant de SystemOS. Le GUID de la partition ERA n'est pas exposé à SystemOS via un chemin de registre accessible, et pourrait être aléatoire.

### Points de terminaison génériques inter-partitions HvSocket

`HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Virtualization\HvSocket\WildcardDescriptors`

Quatre GUID de service résolus via le calcul de SID de service SHA1 :

| GUID | Service | Objectif |
|------|---------|----------|
| `REDACTED_GUID` | DiagTrack | Pipe de télémétrie 1 |
| `REDACTED_GUID` | DiagTrack | Pipe de télémétrie 2 |
| `REDACTED_GUID` | RpcSs | RPC inter-partitions |
| `REDACTED_GUID` | EventLog | Transfert d'événements inter-partitions |

DiagTrack, RpcSs et EventLog sont des citoyens de première classe inter-partitions. La télémétrie de jeu, les appels RPC et les événements sont acheminés d'ERA vers SystemOS via des canaux de socket d'hyperviseur dédiés, invisibles pour tout ce qui s'exécute dans ERA.

---

## 21. Configuration graphique

`HKLM\SYSTEM\CurrentControlSet\Control\GraphicsDrivers`

    WddmVersion_Max = WddmVersion_Min = 0x9C4  (WDDM 2.5) pinned, not negotiated
    DisableCcdDatabase                = 1
    DisableHpdHandling                = 1
    DisableUsingMonitorPowerForSimulatedMonitor = 1
    DirectFlipMemoryRequirement       = 0x40  (64MB)
    PinnedMemoryLimit                 = 0x59  (89MB)
    AdapterMPO_3                      = 1    MPO tier 3 enabled

La version WDDM est épinglée plutôt que négociée ; le pipeline d'affichage appartient au firmware et à l'hyperviseur, WDDM n'étant pas impliqué dans la gestion des moniteurs. Le niveau MPO 3 (`AdapterMPO_3`) est ce qui permet au framebuffer de jeu ERA et à l'interface SystemOS de se composer sans blit logiciel entre les partitions : chaque surface occupe un plan d'overlay matériel séparé.

---

## 22. WdApp.exe Gestionnaire de packages et outil de cycle de vie des applications

`J:\tools\WdApp.exe` est un gestionnaire de packages complet et un gestionnaire de cycle de vie des applications pour la plateforme d'applications Xbox. Surface de commandes complète :| Commande | Objectif |
|---------|---------|
| `install` | Diffuser une version packagée depuis un serveur web, un partage réseau ou un chemin local |
| `register` / `unregister` | Enregistrer/désenregistrer les packages d'applications à fichiers dispersés |
| `registerdrive` | Enregistrer d'un coup toutes les applications d'un lecteur entier |
| `registernetworkshare` | Installer à partir d'un partage réseau UNC avec des informations d'identification facultatives |
| `registerscratch` | Enregistrer depuis le lecteur scratch de développement |
| `registertitlescratch` | Enregistrer depuis le lecteur scratch de titres ERA |
| `launch` | Lancer par AUMID, chemin d'exécutable ou URI |
| `terminate` / `suspend` | Arrêter ou suspendre une application en cours d'exécution |
| `uninstall` | Désinstaller une application ou des parties de celle-ci |
| `list` | Lister toutes les applications enregistrées |
| `listdlc` | Lister les DLC installés |
| `move` / `copy` | Déplacer ou copier un package |
| `movedrive` / `copydrive` | Déplacer ou copier tous les packages d'un lecteur |
| `applyconfig` | Lancer l'OS de jeu ERA avec les paramètres spécifiés ou un `game.config`/`.xvd` |
| `queryconfig` | Afficher le numéro de version en 4 parties de l'OS de jeu en cours d'exécution |
| `queryversioninfo` | Interroger la version de l'OS de jeu pour un package donné |
| `collectxip` | Collecter la trace XIP |
| `lastgamedetails` | Récupérer les détails du dernier jeu exécuté |
| `installkey` | Installer une clé sur la console |
| `installplan` | Installer un plan sur la console |
| `overlayfolder` | Gérer les dossiers de superposition des packages |

### Constatations notables

**`applyconfig [game.config | ERA.xvd]`** contrôle direct du démarrage de la partition ERA depuis la ligne de commande. La commande accepte soit une image disque XVD `.xvd`, soit un fichier de configuration `game.config`. Exécutée sans arguments, elle lance l'OS de jeu le plus récemment utilisé. Sur un système sans contexte de jeu antérieur, elle renvoie `0x87E50002` (facilité ERA, aucun XVD trouvé).

**`/drive=Retail`** la commande `install` accepte `Retail`, `Development` et `Ext1-Ext7` comme spécificateurs de lecteur cible, ce qui permet l'installation de packages directement sur la partition de stockage retail depuis le shell de développement.

**`/WaitToExit`** sur `launch` fait de WdApp le parent du processus lancé, ce qui lui permet de capturer les codes de sortie. Les applications système rejettent cela avec `0x8D160121` (facilité Xbox PLM, mauvais parent du cycle de vie). Le lancement sans `/WaitToExit` réussit, car ShellCoreService conserve la propriété du cycle de vie.

**Encodage AUMID de `launch`** les AUMID des applications système nécessitent un encodage base64 correspondant au motif utilisé dans les scripts QuickActions `.xboxunattend` :```
WdApp.exe launch <base64(FamilyName!AppId)>

23. API REST du Device Portal

Le serveur web du Device Portal (WebManagement.exe, PID 2344) sert son interface depuis M:\windows\WebManagement\www\default\. Le schéma complet de l'API REST est documenté dans js\RestDocumentation.json (40KB).

Authentification : authentification HTTP Basic sur le port HTTPS 11443. Les identifiants sont le nom d'utilisateur et le code PIN du Device Portal définis lors de l'activation du mode développeur.

Espaces de noms de l'API

Indicateurs de restriction

Plusieurs endpoints portent des indicateurs de restriction qui les désactivent sur les consoles retail en mode développeur :

Les vidages de processus en direct en mode utilisateur (/api/debug/dump/usermode/live?pid=<pid>) sont nonRestrictable et réussissent en mode développeur retail.

Arborescence source du Device Portal


24. Liste des processus en direct

Obtenue via GET /api/resourcemanager/processes. Quelques processus notables :

Trois instances de xnetsharedservice.exe (PID 2032, 2764, 2844) s'exécutent simultanément sous SYSTEM, ce qui suggère des instances distinctes de pont réseau pour différents canaux inter-partitions.

Le jeu de travail de 991KB d'eracontrol.exe sans jeu en cours d'exécution confirme qu'il est purement piloté par les événements : il ne conserve presque aucun état au repos et ne se réveille que sur les événements du cycle de vie d'ERA.


25. Pipeline Windows Update (Deploy:)

Impact : Le volume Deploy:\ est localement restreint pour l'accès depuis l'espace utilisateur, mais cette restriction est contournée via le chemin de partage réseau à travers la jonction S:\Deployment\SoftwareDistribution\. Les traces ETL de mise à jour, le chemin de la base de données WU et l'URL de l'endpoint SLS (y compris l'identifiant de plateforme et les packs de langue installés) sont entièrement lisibles.

S:\Deployment\SoftwareDistribution\ est une jonction vers le volume de périphérique noyau caché Deploy:\.

Analyse des traces ETL

Deux sessions de mise à jour ont été capturées :

Session 1 — 9 mars 2026 18:25:23

  • Le service WU a démarré à froid, DataStore.edb n'existait pas (créé à neuf lors de cette session)
  • État réseau : déconnecté au démarrage
  • Endpoint SLS tenté : https://slscr.update.microsoft.com/SLS/{REDACTED_GUID}/x64/10.0.26100.7010/0
  • Échec immédiat avec 0x8024402C (pas d'Internet). Aucune vérification de mise à jour n'a abouti.

Session 2 — 10 mars 2026 03:59:18

  • Le service WU a démarré et chargé le DataStore.edb existant
  • État réseau : déconnecté au démarrage
  • La même requête SLS a échoué avec 0x8024402C
  • Le réseau est revenu en ligne à 03:59:24, 6 secondes après que le service avait déjà échoué et abandonné la session
  • Le service est resté inactif pendant 10 minutes, puis s'est arrêté proprement à 04:09:19 avec le code de sortie 0x240001
  • Aucune vérification de mise à jour n'a abouti dans l'une ou l'autre session

Remarque : Dans les deux sessions, le réseau était indisponible lors de l'initialisation du service WU, ce qui l'a conduit à abandonner la vérification de mise à jour. La session 2 est revenue en ligne 6 secondes après que le service avait déjà quitté la phase de découverte, ce qui suggère que le pipeline de mise à jour n'effectue aucune nouvelle tentative de reconnexion une fois la vérification réseau initiale échouée.

Structure de l'URL de l'endpoint SLS

root@kitploit:~
https://slscr.update.microsoft.com/SLS/{SERVICE_GUID}/x64/{BUILD}/0
?CH=928          catalog hash / change counter (928 in session 1, 19 in session 2)
&L=en-US;...     31 installed language packs
&PT=0xc0         platform type: Xbox
&WUA=1451.2510.27012.0  Windows Update Agent version

PT=0xc0 est l'identifiant de plateforme Xbox intégré à chaque vérification de mise à jour. CH est passé de 928 à 19 entre les sessions, ce qui est cohérent avec un compteur d'état du catalogue qui se réinitialise lorsque la base de données est recréée.

GUID de configuration du service

[REDACTED] identifiant de configuration du service Xbox Windows Update, présent dans le sous-répertoire SLS\ et intégré à chaque URL de requête SLS.

Arborescence source du client WU

Chemins de build internes Azure DevOps divulgués via l'instrumentation de débogage :

root@kitploit:~
C:\__w\1\s\src\Client\comapi\DiscoveryJob.cpp
C:\__w\1\s\src\Client\comapi\XxxJob.cpp
C:\__w\1\s\src\Client\lib\DownloadFile\DownloadSession.cpp
C:\__w\1\s\src\Client\Engine\handler\UHManager\uhmgr.cpp
C:\__w\1\s\src\Client\lib\util\fileutil.cpp
C:\__w\1\s\src\Client\lib\wusyshelper\wusyshelper.cpp

C:\__w\1\s\ est le chemin d'espace de travail standard de l'agent auto-hébergé Azure DevOps. Le client Xbox Windows Update partage ses sources avec Windows Update de bureau : il s'agit de la même base de code compilée pour la plateforme Xbox.

Minuterie persistante

Le GUID de minuterie REDACTED_GUID a été défini lors de la session 1 et a survécu au redémarrage jusqu'à la session 2. Il est stocké en dehors de DataStore.edb (probablement dans le registre) et planifie la prochaine vérification de mise à jour indépendamment du cycle de vie de la base de données.


26. Analyse des pilotes de la pile d'E/S inter-partitions

xbtplinkc.sys XVIO Transport Link Client

L'analyse des imports révèle la surface d'API complète du tampon annulaire XVIO ainsi que le mécanisme de traduction GPA :

root@kitploit:~
XvioAcquireRingBufferRundown / XvioReleaseRingBufferRundown
XvioSignalFlag
XvioWriteRingBuffer
XvioGetIncomingRingBufferAvailableBytes
XvioReadRingBufferEx
XvioInitialize
XvioGetRingBufferContext
XvioCreateRingBuffer
XvioGetReservedMemory           reserved hypervisor memory carve-out
XvioTranslateXrfsGuestGpa       translate ERA guest physical address for SystemOS access

XvioTranslateXrfsGuestGpa est la primitive de mémoire partagée inter-partitions. ERA transmet à SystemOS une adresse physique invitée (GPA) ; SystemOS appelle cette fonction pour obtenir un mappage utilisable. C'est le mécanisme derrière la capture GameDVR, la composition du framebuffer et l'audio inter-partitions.

xbtplinkc importe également XpalIsCapabilityEnabledByVm depuis xpalk.dll. Le suffixe ByVm interroge l'état des capacités au niveau de l'hyperviseur, et non au niveau de l'OS, ce qui confirme qu'il vérifie si l'hyperviseur lui-même a activé la capacité avant de continuer.

xrfs.sys Xbox Runtime Filesystem

Pilote de système de fichiers NT complet. L'analyse des imports confirme qu'il implémente une authentique sémantique de système de fichiers : Cache Manager (Cc*), E/S MDL, verrous de fichiers (FsRtl*), construction de descripteurs de sécurité, tables génériques d'arbres AVL pour l'indexation des répertoires.

Imports distinctifs clés :

root@kitploit:~
FsRtlRegisterFileSystemFilterCallbacks
IoRegisterFileSystem
RtlCreateSecurityDescriptor / RtlCreateAcl / RtlAddAccessAllowedAce
XpalIsCapabilityEnabled
WppRecorder.sys in-memory ETW trace recorder

xrfs.sys n'importe pas XVIO directement. En revanche, xbtplinkc.sys importe XvioTranslateXrfsGuestGpa ; XRFS est la couche système de fichiers, XVIO fournit la traduction GPA en dessous.

Architecture du système de fichiers inter-partitions

root@kitploit:~
ERA game process
    ↓
ERA kernel / XVIO guest side
    ↓  [hypervisor shared memory / GPA translation via XvioTranslateXrfsGuestGpa]
SystemOS: xbtplinkc.sys  (ring buffer transport)
    ↓
SystemOS: xrfs.sys       (NT filesystem semantics)
    ↓
S:\Shares\TitleScratch   (junction, target redacted by OS)
    ↓
SystemOS userspace / shell

27. eracontrol.exe

Imports clés spécifiques Xbox :

XCRDAPI.dll contrôle direct du montage XVD :

root@kitploit:~
XCrdSetEraLaunchMapping   associates XVD content with ERA partition pre-launch
XCrdMountContentType      mounts content categories into ERA
XCrdUnmount               tears down ERA content mounts
XCrdOpenAdapter / XCrdCloseAdapter
XCrdQueryDevicePath / XCrdBuildPath
XCrdDeleteXVD
XCrdSuspendResumeIoBalancer
XCrdIsCorruptionError
XCrdFreeDevicePathBuffer

ntdll.dll

root@kitploit:~
NtOpenPartition
RtlSetProcessIsCritical
RtlWaitForWnfMetaNotification / RtlPublishWnfStateData
NtQueryWnfStateData / NtDeleteWnfStateName

ext-ms-win-xblauth-console-l1-1-0.dll (chargé en différé) :

root@kitploit:~
XblaInitialize            bootstraps Xbox Live auth identity into ERA partition

ext-ms-win-ntuser-rim-l1-1-0.dll (chargé en différé) :

root@kitploit:~
RIMAddInputObserver / RIMRemoveInputObserver  intercepts raw controller input for ERA routing

SspiCli.dll :

root@kitploit:~
LogonUserExExW            creates user logon tokens for the ERA session

ext-ms-win-session-usermgr-l1-1-0.dll (chargé en différé) :

root@kitploit:~
UMgrOpenProcessHandleForAccess

RPCRT4.dll :

root@kitploit:~
RpcServerInqCallAttributesW / I_RpcBindingInqLocalClientPID  RPC caller identity verification

28. eraproxyapp.exe

eraproxyapp.exe est le compositeur côté SystemOS et le pont IPC entre la partition ERA et le shell. 339KB, nettement plus volumineux qu'eracontrol.exe (249KB).

Composition du framebuffer :

root@kitploit:~
d3d11.dll:  D3D11CreateDevice
dcomp.dll:  DCompositionCreateDevice
AVRT.dll:   AvSetMmThreadCharacteristicsW / AvSetMmThreadPriority / AvRevertMmThreadCharacteristics

eraproxyapp crée un périphérique D3D11 et un périphérique DirectComposition pour composer le framebuffer ERA dans le shell SystemOS. La priorité de thread multimédia AVRT garantit une livraison des trames à faible latence.

IPC inter-partitions via ALPC :

root@kitploit:~
ntdll: NtAlpcConnectPort / NtAlpcAcceptConnectPort
    NtAlpcSendWaitReceivePort
    NtAlpcCreatePortSection / NtAlpcCreateSectionView
    NtAlpcDeletePortSection / NtAlpcDeleteSectionView
    NtAlpcDisconnectPort / NtAlpcCancelMessage

Les sections de port ALPC fournissent une mémoire partagée sans copie (zero-copy). Le framebuffer du jeu ERA n'est pas copié : il est partagé via des vues de section ALPC mappées simultanément dans les deux espaces d'adressage.

Espace de noms privé (canal IPC sécurisé) :

root@kitploit:~
CreatePrivateNamespaceW / OpenPrivateNamespaceW
CreateBoundaryDescriptorW / AddSIDToBoundaryDescriptor / DeleteBoundaryDescriptor
ClosePrivateNamespace
bcrypt: BCryptGenRandom / BCryptHashData / BCryptCreateHash / BCryptFinishHash

eraproxyapp établit un espace de noms d'objets privé avec un descripteur de limite basé sur un SID, un espace de noms d'objets nommé visible uniquement par ERA et SystemOS. BCrypt fournit le matériel de clé aléatoire pour la limite.

Identité du titre et audio :

root@kitploit:~
XboxLiveTitleId.dll:  GetCurrentXboxLiveInfo identifies the running title
xamapi.dll:           XamApiDisableLayoutScaling
ConsoleGlobalization.dll: GetConsoleGlobalizationInfo
api-ms-win-audiocore-spatial-config-l1-1-0.dll: Create_SpatialAudioDevicePropertyReader

Tubes nommés :

root@kitploit:~
CreateNamedPipeW / ConnectNamedPipe / DisconnectNamedPipe

29. Analyse supplémentaire des DLL

XblAuthConsoleExt.dll : identité matérielle et authentification (46 exports)

Identité de la console :

root@kitploit:~
XblaGetConsoleCert / XblaGetConsoleId / XblaGetConsoleSerialNumber
XblaGetDevkitType      retail vs devkit detection
XblaGetXblSandbox      Xbox Live environment (retail/preview/dev)

Identité du titre :

root@kitploit:~
XblaGetXboxLiveTitleId
XblaGetTitleAttestation / XblaGetTitleConsoleGeneration

Cryptographie :

root@kitploit:~
XblaSignDigest         sign with console private key
XblaGetAttestation / XblaGetTpmPcrAttestation fTPM PCR boot chain measurements
XblaProcessChallenge / XblaProcessSpToken

XblaGetTpmPcrAttestation confirme que la console effectue une attestation complète de la chaîne de démarrage. Microsoft peut vérifier cryptographiquement l'état exact de la séquence de démarrage lorsqu'une console s'authentifie auprès de Xbox Live.

xamapi.dll : shim de compatibilité Xbox Application Manager (24 exports)

Remplace les API Win32 standard pour les applications ERA s'exécutant dans le contexte SystemOS :

root@kitploit:~
ClipCursorOverride / GetClipCursorOverride
GetCursorPosOverride / SetCursorPosOverride
GetMonitorInfoWOverride / GetSystemMetricsOverride
XamApiDisableLayoutScaling / XamApiSetLayoutScaleOverride
AdjustDeviceIdMappingForKeyEventBefore / After
UserContextExtInitialize / SetToken / Cleanup

C'est ainsi que SystemOS présente un environnement Windows PC convaincant aux composants qui attendent des API Win32 standard d'affichage et de saisie.

xboxsynthetickm.dll : injection d'entrées synthétiques (M:, 12 exports)

Située sur le volume de superposition matériel M:\ (traité comme un niveau matériel, et non applicatif) :

root@kitploit:~
SyntheticInput_CreateKeyboard / CreateMouse / CreateMouseAbsolute
SyntheticInput_InjectKeyboardInput / InjectMouseInput
SyntheticInput_ReadKeyboardOutput

C'est ainsi que xCloud convertit les paquets réseau en événements d'entrée locaux. La console ne peut pas distinguer une entrée synthétique d'une entrée physique au niveau matériel.

xboxcloudstreaming.dll : moteur de streaming xCloud (2 exports)

root@kitploit:~
GetCloudStreamManager
ShutdownCloudStreamManager

XboxLiveTitleId.dll : détection de jeu à l'exécution (12 exports)

root@kitploit:~
GetCurrentXboxLiveTitleId / GetCurrentXboxLiveInfo
GetProcessXboxLiveInfo / GetPackageXboxLiveInfo
AuthenticateSystemXboxLiveTitle

XBBlackbox.dll : enregistreur de vol

Export unique : BlackboxServiceMain

XBCastRecv.dll : récepteur Miracast (22 exports)

root@kitploit:~
GetWiFiDirectDeviceCategoryForCurrentPlatform
IsMiracastReceiverStartAllowedWithoutApp
GetEdidForCurrentDisplayDevice

Xbox.Shell.Api.dll : intégration au shell (44 exports)

root@kitploit:~
CheckGamingPrivilegeSilently / WithUI
ShowProfileCardUI / ShowGameInviteUI
PlaySystemSound
AreWebAppsEnabled

Pile de contrôleurs — nom de code « Pendragon »

XAccessoriesGip.dll :

root@kitploit:~
PendragonGIP_SendGIPMessage
PendragonGIP_SetMessageCallback
PendragonGIP_Start / Stop

30. Résumé complet de l'architecture système

Architecture globale

root@kitploit:~
Hypervisor (lowest layer, hardware virtualization)
    ↓
Host OS (Root Partition) hidden from SystemOS, management OS
├── 108MB fixed RAM carve-out
├── 5 core system processes
├── **XVIO.SYS**             Xbox Virtual I/O core (ring buffers, GPA translation)
├── **XSraFlt.sys**          GPU security filter (display capture interception)
├── **sevpipe driver**       secure IPC namespace root
├── **xvncbus.sys**          Durango Virtual XVNC Bus Driver
├── **xvnc.sys**             XVSC miniport
├── **xrfs.sys**             NTFS Filesystem driver
└── Hardware device ownership (GPU, network, storage)
    ↓ (creates child VMs with virtualized hardware)
SRA SystemOS Partition (Windows 11 24H2 / WCOS, child partition)
├── Total RAM: 6400MB (dynamically allocated)
├── 89-95 processes
├── sevpipe IPC backbone (client views)
├── ERA lifecycle management (eracontrol.exe)
├── Telemetry pipeline (EtwUploader->NetworkTransferManager)
├── XTF toolchain (J:\tools\, always present on retail)
├── Device Portal web server (:11443)
└── Virtualized hardware views (GPU, NIC, storage via Host OS)
    ↓ (manages as child)
ERA GameOS Partition
├── Game title process
├── XVIO client view
└── All hardware access proxied: ERA->SystemOS->Host OS

Initialisations des pilotes (hypothèses basées sur ce que j'ai jusqu'à présent)

root@kitploit:~
Host OS Boot (invisible to research, complete assumptions):
1. Host OS loads from its own protected storage partition
2. Normal Windows driver loading within Host OS:
    - XVIO.SYS (registers as \Device\Xvio)
    - XSraFlt.sys (filters GPU commands)
    - sevpipe driver (creates \\.\sevpipe namespace)
    - xvncbus.sys/xvnc.sys (virtual NIC root)
3. Host OS creates SystemOS VM with virtualized hardware, and symlinks images
4. SystemOS never sees Host OS drivers or filesystem

SystemOS View (what research can tell):
1. Sees virtualized devices provided by Host OS
2. XVIO appears as a service, not a driver (xvmctrl.sys interface)
3. sevpipe appears as a namespace but server runs in Host OS
4. Cannot enumerate or access Host OS drivers/files

Séquence de lancement d'ERA (hypothèses)

root@kitploit:~
1. eracontrol.exe: NtOpenPartition - open ERA hypervisor partition handle
2. eracontrol.exe: XCRDAPI XCrdSetEraLaunchMapping - associate XVD with partition
3. eracontrol.exe: XCRDAPI XCrdMountContentType - mount game content into ERA
4. eracontrol.exe: XblaInitialize - provision Xbox Live identity into ERA
5. eracontrol.exe: LogonUserExExW - create ERA session user token
6. eracontrol.exe: RIMAddInputObserver - begin routing controller input to ERA
7. eraproxyapp.exe: ALPC port sections - establish zero-copy framebuffer channel
8. eraproxyapp.exe: CreatePrivateNamespaceW - establish secure IPC namespace
9. eraproxyapp.exe: D3D11 + DComp - prepare framebuffer compositor
10. ERA partition boots game

Flux d'appels (hypothèses)ERA Game Process needs GPU memory:

root@kitploit:~
    ↓
ERA: XVIO guest call->SystemOS
    ↓
SystemOS: xvmctrl.sys->xvioc.sys->Host OS via hypercall
    ↓
Host OS: XVIO.SYS validates request
    ↓
Host OS: Programs actual GPU MMU
    ↓
Host OS: Returns GPA mapping token to SystemOS
    ↓
SystemOS: Forwards to ERA

Carte complète de la pile


31. Registre des contrats WinRT

Le WinMD HDRGameCalibration contient de manière surprenante apparemment l’INTÉGRALITÉ du registre des contrats WinRT de la Xbox, soit plus de 100 contrats définissant toutes les surfaces d’API WinRT propriétaires disponibles sur la plateforme.

Contrats notables

Implications

Kinect en tant que contrat maintenu. Windows.Kinect.KinectContract v1 est présent en tant que contrat de première classe non déprécié, cohérent avec la pile active (C:\Windows\System32\ht) et KinectSensorEnabled=true dans WdConfig. La vision Kinect est une infrastructure activement maintenue même sur du matériel sans Kinect physique. L’intégralité du pipeline d’orchestration (nuiservice.exe, KinectMediaSource.dll, trois pistes d’inférence, routage de sortie) est documentée dans la section 33.

Les publicités sont une infrastructure interne. Le fait que AdsContract soit un contrat Internal, et non une API SDK publique, signifie que la diffusion de publicités est intégrée à l’OS au même niveau que l’authentification et le stockage, et non pas une intégration SDK tierce.

Automatisation des tests sur retail. Windows.Xbox.TestAutomationContract est livré sur les unités retail, ce qui est cohérent avec l’accès à Windows.Xbox.TestAutomationContract par les outils du mode développeur.


32. UserMgr2

UserMgr2 est le compte utilisateur interactif propriétaire de la session ouverte active. NTUSER.DAT est verrouillé (UserMgr2 est actif). Principales constatations du profil :

Structure du profil

CheminContenu
ntuser.ini3 sauts de ligne
AccountPictures\UserImage.jpgPhoto unique de compte Microsoft en 1080x1080, distincte du système de gamerpics (voir section 3.2)

Note sur les privilèges

Les jonctions du Device Portal sont résolues avec les autorisations de UserMgr2 plutôt que celles de DevToolsUser (voir section 1.2 et question non résolue 12). UserMgr2 dispose d’un niveau de privilège supérieur à DevToolsUser ; UserMgr2 est le propriétaire de la session interactive tandis que DevToolsUser est un compte d’accès développeur restreint.


33. Pipeline de vision Kinect de nuiservice.exe

nuiservice.exe (3,8 Mo, tournant sous SYSTEM, toujours actif) est le processus d’orchestration de toute la pile de perception Kinect/NUI. Il héberge trois pistes d’inférence parallèles : corps, visage et audio ; chacune s’exécute comme un pipeline de traitement distinct, planifié de manière coopérative via un graphe de fibres et alimenté en images via une pompe IOCP adossée à un dispositif d’inférence GPU D3D11.

Architecture

root@kitploit:~
nuiservice.exe
├── D3D11CreateDevice          <- GPU inference device
├── IOCP frame pump            <- async frame dispatch
└── Fiber graph                <- cooperative ML inference scheduling

Entrée : KinectMediaSource.dll

L’ingestion des images est gérée par KinectMediaSource.dll :

root@kitploit:~
KinectMediaSource.dll
├── MFCreate2DMediaBuffer          <- allocates 2D image frames (Media Foundation)
├── alignment.bin     [10.7MB]     <- depth -> 3D coordinate transform LUT
├── alignment_color.bin  [5.7MB]  <- depth/color registration
├── DeviceIoControl->\\.\KinectSensorControl   <- talks to PetraXC.sys
└── CoCreateInstance {9178b0a6}    <- self-registration CLSID

alignment.bin (10,7 Mo) et alignment_color.bin (5,7 Mo) sont des tables de correspondance précalculées pour convertir les données brutes du capteur de profondeur en coordonnées 3D de l’espace monde et pour enregistrer respectivement les pixels de profondeur avec les pixels couleur.

Suivi du corps

Modèles chargés depuis X:\ht\versions\{1.0.0|1.0.1|1.0.2}\ via vvtechs.dll (NuiVisionCreateFactory) :

  • Entrée : images de profondeur provenant de KinectMediaSource.dll
  • Sortie : articulations du squelette, position de la tête, état des mains (prise/relâchement)
  • Trois répertoires de versions sont présents simultanément ; la version active est sélectionnée au moment de l’exécution.

Visage

Modèles chargés depuis C:\Windows\System32\ht\ (voir section 3.3 pour l’inventaire complet des modèles) :

  • Entrée : images de profondeur, infrarouge et couleur
  • Sortie : identité (qui), expression (émotion), regard (direction de l’attention), état des lèvres (ouvert/bougé), attributs d’apparence (lunettes, pilosité faciale)
  • La sortie d’identité alimente directement LogonUserExExW pour la connexion automatique par reconnaissance faciale (voir Routage de sortie ci-dessous).

Audio

Géré par speechwov.dll :

root@kitploit:~
speechwov.dll
├── SpeechWov_Create / UpdateAcousticModels
├── SpeechWov_ProcessRecognition
└── Output->wake word events, speech recognition events

speechwov.dll est un moteur de mot déclencheur et de reconnaissance vocale. UpdateAcousticModels indique que le modèle acoustique peut être mis à jour au moment de l’exécution (changements de pack de langue ou de calibration du microphone). C’est l’infrastructure de commande vocale « Hey Cortana » au niveau système.

Routage de sortie

nuiservice.exe distribue les résultats d’inférence à travers plusieurs canaux :

RtlCapabilityCheck est le mécanisme de contrôle d’accès : un processus doit détenir la capacité NT appropriée pour recevoir toute donnée NUI. Cela contrôle séparément l’accès des titres de jeux, l’accès du shell et l’accès des développeurs.

Consommateurs (via abonnement WNF)

Le contrat WinRT Windows.Kinect.KinectContract v1 (voir section 31) est la surface destinée au retail pour l’accès des titres de jeux à ce pipeline.

root@kitploit:~
Camera Sensor Hardware
└── ciumd_wddm.dll  <- most likely WDDM user-mode camera driver
    └── PetraXC.sys (KinectSensorControl)  <- WDF 1.11, disabled until device arrives
        └── \\.\KinectSensorControl

nuiservice.exe  [always running, SYSTEM]
└── KinectMediaSource.dll->DeviceIoControl->\\.\KinectSensorControl
    ├── Track 1: vvtechs.dll  (body)
    ├── Track 2: FaceDetector/FaceRecognition + RF models  (face)
    └── Track 3: speechwov.dll  (audio)
        └──->WNF / LogonUserExExW / named pipe / RPC / State Repository

Recherche menée sur une Xbox Series S retail en mode développeur. Tout l’accès a été effectué via l’infrastructure de mode développeur fournie par Microsoft.

Télécharger l’outil
OutilObjectif
Explorateur WindowsPartager réseau Xbox (Instructions à https://XBOX:11443/#File%20explorer > Parcourir)
SSH (DevToolsUser + PIN VS)Accès shell à SystemOS
mklink /JCréation de jonction NTFS pour exposer les lecteurs sur le partage réseau
Device Portal (https://XBOX:11443)API REST, explorateur de fichiers, liste des processus, dumps en direct
dumpbin /IMPORTS, dumpbin /EXPORTSAnalyse statique des binaires PE sur le partage réseau
PythonScript pour automatiser l'API REST
PhasorRuntime de script à utiliser sur la console (copié via le partage réseau, exécuté via SSH) télécharger ici
reg queryÉnumération du registre depuis le shell SSH
WdApp.exeGestionnaire de packages et contrôle du cycle de vie ERA (énumération de la surface de commandes)
WdConfig.exeÉnumération de l'API des paramètres de la console
Analyse des traces ETLPipeline Windows Update via la jonction S:\Deployment\SoftwareDistribution\
Dumps de processus en directGET /api/debug/dump/usermode/live?pid=<pid>
GhidraAnalyse des interfaces COM / pilotes
IDA ProGraphes d'appels de DLL complexes et d'interfaces COM
XboxToolsMa collection personnelle d'utilitaires pour diverses tâches
Espace de nomsURI de baseEndpoints clés
Déploiement d'applications/api/appx/packagemanager/installer, désinstaller, lister les packages, groupes de contenu
Gestionnaire de périphériques/api/devicemanager/arborescence complète et hiérarchique des périphériques
Collecte de vidages/api/debug/dump/vidages de processus en direct, vidages bugcheck, contrôle des crashs
ETW/api/etw/ETW en temps réel via WebSocket, énumération des fournisseurs
Explorateur de fichiers/api/filesystem/parcourir, téléverser, télécharger, supprimer, renommer
Réseau/api/networking/ipconfig
Informations sur l'OS/api/os/nom de la machine, informations sur l'OS
Performances/api/resourcemanager/liste des processus en direct avec CPU/mémoire, statistiques de performances système
Alimentation/api/power/batterie, schémas d'alimentation, rapports d'étude de veille
Contrôle à distance/api/control/redémarrer, éteindre
Gestionnaire des tâches/api/taskmanager/démarrer/arrêter les applications, tuer les processus
Bluetooth/api/bt/énumérer, appairer, connecter les périphériques audio
WiFi/api/wifi/énumérer les interfaces/réseaux, connecter, déconnecter
WER/api/wer/énumérer et télécharger les rapports Windows Error Reporting
WPR/api/wpr/démarrer/arrêter/télécharger les traces de performances WPR, profils personnalisés
IndicateurEndpoints concernés
NoKernelDumpsVidage du noyau en direct, téléchargement du vidage bugcheck
NoUserModeDumpsVidage de processus en direct (par PID)
NoBugcheckDumpsListe/téléchargement/contrôle des vidages bugcheck
NoWPRBootTracingTrace WPR au démarrage
NoPowerSchemeAccessLecture/écriture du schéma d'alimentation
FichierTailleRôle
RestDocumentation.json40KBSchéma complet de l'API REST lisible par machine
workspace-definitions.js26KBDisposition des panneaux de l'espace de travail du portail (index d'API secondaire)
common-xbox.js21KBAjouts spécifiques Xbox au Device Portal de base
common.js56KBFramework de base du Device Portal
toolhost.js7.8KBCouche d'hébergement des outils
rest.js19KBBibliothèque de construction des appels REST
d3.js570KBVisualisation de données D3
konva.js676KBRendu Canvas
PIDImageUserNotes
156(masqué)SYSTEMJeu de travail de 66MB, aucun nom d'image visible
1456xbdiagservice.exeSYSTEMService de diagnostic Xbox
1808EtwUploader.exeSYSTEMTéléverseur de télémétrie ETW
1832StorageManagement.exeDefaultAccountUWP Xbox.StorageManagement, IsRunning: false (suspendu)
1904ApplicationClipService.exeSYSTEMGestion des clips GameDVR, jeu de travail de 37MB
2032xnetsharedservice.exeSYSTEMPont réseau inter-partitions
2040NetworkTransferManagerService.exeSYSTEMGestionnaire de téléchargement de contenu Xbox
2344WebManagement.exeSYSTEMServeur web du Device Portal
2416XUpdMgr.exeSYSTEMGestionnaire de mise à jour Xbox
2436PRProvisioningService.exeNETWORK SERVICEService de provisionnement PlayReady
2460XNetConfig.exeSYSTEMConfiguration réseau
2468toolsautoexec.exeSYSTEMExécuteur autoexec du script .xboxunattend
2572sihost.exeDefaultAccountHôte d'infrastructure du shell, jeu de travail de 60MB
2836XboxDevService.exeSYSTEMHôte du service développeur Xbox, 37MB
3160xrun.exeDefaultAccountCoordinateur de lancement des jeux côté shell
3256MicrosoftXboxSecurityClip.exeSYSTEMHôte de vérification DRM à l'exécution
3600XboxUI.exeDefaultAccountInterface du shell Dashboard, jeu de travail de 60MB
3844xrfssvc.exeSYSTEMService de système de fichiers inter-partitions XRFS, 352KB (inactif)
3864xrmntcl.exeSYSTEMClient de montage Xbox Runtime
3888xtfrtservice.exeSYSTEMService d'exécution XTF
4320Guide.exeDefaultAccountGuide Xbox (Xbox.Guide_2602.0.2602.11003), IsRunning: true
4548eracontrol.exeSYSTEMGestionnaire du cycle de vie de la partition ERA, jeu de travail de 991KB
4660WWAHost.exeDefaultAccountDev Home (Microsoft.Xbox.DevHome_1.0.2601.4001), IsRunning: true
6524CastSrv.exeDefaultAccountService de diffusion Miracast
CoucheComposants
ContenuXCRDAPI.dll (montage/démontage/streaming XVD)
IdentitéXblAuthConsoleExt.dll, XboxLiveTitleId.dll, pspsra.sys
DRMMicrosoftXboxSecurityClip.exe, XCRDAPI.dll
Contrôle ERAeracontrol.exe (NtOpenPartition, XCRDAPI, XblaInitialize)
Proxy ERAeraproxyapp.exe (ALPC, D3D11, DComp, espace de noms privé)
Entrée (locale)xviokbd.sys, xviomou.sys, XAccessoriesGip.dll (Pendragon)
Entrée (distante)xboxcloudstreaming.dll, xboxsynthetickm.dll
Focus d’entréexviomonc.sys (emprunt d’identité)
NPFS?VMNP.SYS pilote NPFS (système de fichiers de tubes nommés ? système de filtres ?) également utilisé pour l’emprunt d’identité ERA
OS hôtexvmctrl.sys, XVIO.SYS, FLTMGR.sys (pas présent sur le système de fichiers)
Système de fichiers inter-partitionsxrfs.sys, xbtplinkc.sys, xrmntcl.exe, xrfssvc.exe
Affichageeraproxyapp.exe, xamapi.dll (substitutions Win32), MPO niveau 3
GPUumd12ddi_arden.dll, newbe_xs.dll, xbsc_xs.dll, xg_xs.dll
AudioXVMAudioServer.dll, XAudio2_8/9.dll, configuration audio spatiale
Réseauxvnc.sys/xvncbus.sys (carte réseau virtuelle), NetXVmService
DiagnosticsXBBlackbox.dll, xbdiagservice.exe, EtwUploader.exe, EtwPlus.dll (pipeline Etx)
Mise à jourXUpdMgr.exe, client WU (wuauengcore.dll), volume Deploy:\
ShellXbox.Shell.Api.dll, XboxUI.exe, Guide.exe, sihost.exe
Streamingxboxcloudstreaming.dll, XBCastRecv.dll (Miracast)
Outils de développementWebManagement.exe (Device Portal), pile XTF (132 fichiers), WdApp.exe, unattendedsetuphelper.exe
Compatibilitéxamapi.dll (shim Win32), dxbc2dxil_xs.dll (DX11->DX12)
Vision / Kinectnuiservice.exe (3,8 Mo, SYSTEM, orchestrateur toujours actif), KinectMediaSource.dll (ingestion d’images, alignment.bin 10,7 Mo, alignment_color.bin 5,7 Mo), vvtechs.dll (NuiVisionCreateFactory, suivi du corps), speechwov.dll (piste mot déclencheur/parole), modèles Random Forest du visage (FaceDetector.bin, FaceRecognition.bin, ExpressionRandomForest.model, +8 autres), 3 versions actives (X:\ht\versions\)
PublicitésAdsLauncher (application système), Windows.Xbox.System.Internal.AdsContract (WinRT)
Legacy (désactivé)Zurich (tuner TV, lié à XVIO), PetraXC / KinectSensorControl (WDF 1.11, désactivé jusqu’à l’arrivée d’un périphérique Kinect, alimente KinectMediaSource.dll via \\.\KinectSensorControl)
ContratVersionNotes
Windows.Kinect.KinectContractv1Kinect est probablement pris en charge pour la rétrocompatibilité des titres
Windows.Xbox.TestAutomationContractLa surface d’automatisation des tests est livrée sur le matériel retail
Windows.Xbox.System.Internal.AdsContractLe système de publicités est un contrat WinRT interne
Windows.Xbox.System.Internal.CopyOnLan.CopyOnLanContractCopie de jeux sur le réseau local, transfert de titres sur le réseau local ?
Windows.System.Internal.XboxLive.Auth.AuthContractv2Surface d’authentification Xbox Live interne (distincte des API XBL publiques)
AppData\Local\Packages\Seules les configurations d’applications de développement chargées en sideload sont présentes, les applications système Xbox n’utilisent pas les chemins de stockage UWP standard LocalPackages
CanalAPIFonction
Diffusion à l’échelle du systèmeRtlPublishWnfStateDataPublie l’état du corps/visage/audio à tous les abonnés WNF
Connexion par visageLogonUserExExWDéclenche la connexion automatique de l’utilisateur par reconnaissance faciale
Tube nommé par applicationTube nommé serveur + GetNamedPipeClientProcessIdSortie filtrée par processus ; vérifie l’identité de l’appelant avant de fournir les données
RPC par appelantServeur RPC + RpcServerInqCallAttributesWAccès authentifié par appelant aux résultats d’inférence
Identité persistanteState Repository (SRDictionaryToPropertySet)Persiste l’identité reconnue entre les sessions
Contrôle d’accès par capacitéRtlCapabilityCheckTout accès à la sortie d’inférence est contrôlé par une vérification de capacité NT
ConsommateurRemarques
Xbox ShellAdaptation de l’interface en fonction de l’expression
Guide.exeDéclencheur de connexion automatique
XboxUI.exeInterface sensible à l’attention/au regard
Titres de jeuxVia le contrat WinRT NuiVision (Windows.Kinect.KinectContract v1, retail)
xCloudle client de streaming reçoit l’état NUI