Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
gdid-reversal — Análisis de ingeniería inversa del Identificador Global de Dispositivo (GDID) de Microsoft, revelando su generación como un MSA Device PUID asignado por el servidor, almacenamiento en el registro y transmisión a través de la Plataforma de Dispositivos Conectados, con metodología forense reproducible. | Kitploit
Herramientas/GitHubGitHub/smtimesiwndr/gdid-reversal
Ingeniería InversaAnálisis ForensePrivacidadAprendizaje y Educación
GitHubsmtimesiwndr/gdid-reversal

gdid-reversal

Ver Repositorio

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
706426hace 2 mesesRevisado por Kitploit

Acerca de

Análisis de ingeniería inversa del Identificador Global de Dispositivo (GDID) de Microsoft, revelando su generación como un MSA Device PUID asignado por el servidor, almacenamiento en el registro y transmisión a través de la Plataforma de Dispositivos Conectados, con metodología forense reproducible.

Compartir

Análisis completo del GDID de Windows

Identificador Global de Dispositivo completamente ingeniado inversamente

Primary source Platform Symbols Method Claims

Cómo se genera, almacena y transmite realmente el "Identificador Global de Dispositivo" de Microsoft, la huella persistente de Windows mencionada en la denuncia de julio de 2026 contra Scattered Spider.


TL;DR

[!NOTE] Lo que se enumera a continuación es cierto, pero falta información. Independientemente de si se ha iniciado sesión con una MSA, TENDRÁS un GDID. No me di cuenta de esto al momento de publicar, pero lo investigué. CDP tiene una ruta de dispositivo anónima que se utiliza si no se ha conectado una MSA. El sistema subyacente sigue siendo factualmente correcto, solo faltan algunas cosas.

  • GDID es un elemento real de telemetría. Aparece en la denuncia penal federal de EE. UU. (United States v. Peter Stokes, N.D. Ill., julio de 2026) como Global Device Identifier g:6755467234350028.
  • Es un "Device PUID" de cuenta Microsoft. Un ID único de Passport de 64 bits asignado a una instalación de Windows cuando se registra con una cuenta Microsoft, escrito en el gráfico de dispositivos como g:<decimal>.
  • Las afirmaciones son incorrectas. No es "de 128 bits" ni "generado a partir de números de serie". El propio expediente judicial dice que una reinstalación produce un nuevo GDID, lo que descarta que se derive de seriales de hardware como tu GPU.
  • La pila, de abajo arriba: wlidsvc (servicio de cuenta Microsoft) aprovisiona el dispositivo con login.live.com y recibe un PUID de dispositivo -> lo almacena en el registro -> la Plataforma de Dispositivos Conectados (cdp.dll / CDPSvc) lo lee y lo registra en el gráfico del Servicio de Directorio de Dispositivos (DDS) -> Delivery Optimization lo reporta como el documentado UCDOStatus.GlobalDeviceId.
  • Todo se reprodujo en una máquina con Windows 11 (26200) en vivo y símbolos públicos. Puedes encontrar tu propio GDID con una lectura del registro (§7).

[!NOTE] Etiquetado de confianza. Cada afirmación está etiquetada para que puedas evaluarlas por tu cuenta: [COURT] hecho de fuente primaria, [OBSERVED] reproducido en vivo en mi máquina de prueba, [STATIC] probado a partir de binarios y PDB públicos de Windows, [ASSESSED] inferencia sólida a partir de la evidencia.


Contenido

  1. Antecedentes: lo que realmente dijo el tribunal
  2. Desmontando los mitos virales
  3. Dónde aparece GDID: Delivery Optimization
  4. Quién lo posee: la Plataforma de Dispositivos Conectados a DDS
  5. Cómo lo obtiene CDP: lo consume, no lo calcula
  6. La acuñación: Device PUID de MSA (wlidsvc)
  7. Encuentra tu propio GDID
  8. Reduciendo la exposición
  9. Metodología (reproducible)
  10. Limitaciones y advertencias honestas

1. Antecedentes: lo que realmente dijo el tribunal

El 1 de julio de 2026, el DOJ desveló una denuncia penal contra Peter Stokes, un presunto miembro de Scattered Spider (también conocido como Octo Tempest / UNC3944 / 0ktapus). La declaración describe cómo Microsoft ayudó al FBI a atribuir actividad a un dispositivo.

[!IMPORTANT] [COURT] De la denuncia sustitutoria (¶25, p.34), textualmente:

"la cuenta de ngrok se configuró a través del Identificador Global de Dispositivo g:6755467234350028 ('el GDID'). Según un representante de Microsoft, un Identificador Global de Dispositivo en el ecosistema de Windows es un identificador persistente a nivel de dispositivo diseñado para identificar de forma única una instalación de un sistema operativo Windows en un dispositivo... Un GDID es un identificador único global vinculado a la instalación de Windows en un dispositivo. Un GDID permanece constante a través de las actualizaciones del sistema operativo Windows en un dispositivo, pero una reinstalación de Windows... estará vinculada a un nuevo GDID único."

Una nota al pie añade que un usuario de Microsoft puede tener múltiples GDID. La declaración luego correlaciona el historial de IP y navegación del GDID (p. ej., empirehotelnyc.com, una URL de inicio de sesión de Growtopia/Ubisoft) con las cuentas en las que el sospechoso había iniciado sesión.

Dos cosas aquí sustentan el resto de este análisis:

  1. El valor es g: más un entero decimal (g:6755467234350028). En hexadecimal es 0x0018000FC8CB93CC, por lo que es un número de 64 bits.
  2. Una reinstalación da un nuevo GDID. Por lo tanto, no puede ser simplemente una función del hardware inmutable.

2. Desmontando los mitos virales

El resumen de redes sociales afirmaba que el GDID es "un identificador de 128 bits generado a partir de números de serie en la instalación." Ambas mitades son falsas:

Afirmación (redes sociales)Realidad (fuente primaria)
"128 bits"El valor en la denuncia es g:6755467234350028, un decimal que cabe en 64 bits (0x0018000FC8CB93CC).
"generado a partir de números de serie en la instalación"

[!NOTE] Después de más ingeniería inversa de CDP. Proporcioné información errónea. Usar una cuenta local no impide un GDID. CDP tiene una ruta de dispositivo anónima que se toma si no hay cuenta Microsoft. Ten esto en cuenta al leer.


3. Dónde aparece GDID: Delivery Optimization

[STATIC] Los documentos públicos de Azure Monitor de Microsoft definen una columna GlobalDeviceId en la tabla UCDOStatus (Update Compliance / Delivery Optimization):

GlobalDeviceId (string): "Identificador global de dispositivo de Microsoft. Este es un identificador utilizado internamente por Microsoft."

Se encuentra justo al lado de LastCensusSeenTime, ISP, City, Country, por lo que un ID de dispositivo alineado con geo e IP. Este es el único lugar donde Microsoft nombra el valor en documentos públicos. Pero Delivery Optimization solo lo reporta. Es importante destacar que NO es su propietario. Síguelo aguas arriba y llegarás a la Plataforma de Dispositivos Conectados.


4. Quién lo posee: la Plataforma de Dispositivos Conectados a DDS

[STATIC] C:\Windows\System32\cdp.dll (la Plataforma de Dispositivos Conectados, servicios CDPSvc + CDPUserSvc) contiene el símbolo GlobalDeviceId y un subsistema completo de registro del Servicio de Directorio de Dispositivos:

root@kitploit:~
ddsregistrationclient.cpp   ddsregistrationmanager.cpp   ddsregistrationinfo.cpp
DdsRegistrationClient   RegisterUserDevicesObserver   DdsRegistrationInfoProviderForCDP
endpoints: dds.microsoft.com  fd.dds.microsoft.com  aad.cs.dds.microsoft.com  cdpcs.access.microsoft.com
device-id format string: "g:%s"

DDS = Device Directory Service (Servicio de Directorio de Dispositivos), el gráfico de identidad entre dispositivos de Microsoft (el backend detrás de Phone Link, portapapeles en la nube, "Continuar en PC", Compartir cerca). CDP es el cliente de Windows que registra la instalación en ese gráfico, donde se etiqueta como g:<decimal>.

4.1 Capturado en vivo

[OBSERVED] Forzar un registro nuevo (reiniciar CDPSvc con su estado local limpiado) y capturar los propios proveedores ETW de CDP produjo todo el intercambio:

root@kitploit:~
DdsClient::RegisterUserDeviceAsync()   RegistrationReason: Startup   Account Type: MSA
DDSClient: Registration response received. HTTP status code: 200
OnRegisterUserDeviceComplete
GetDeviceIdAndTicketActivity -> deviceid: 0018XXXXXXXXXXXX

Ese deviceid, escrito como g:<decimal>, coincide estructuralmente con el valor de la denuncia:

Ambos son valores de 64 bits en la misma clase de palabra alta 0x0018 (el espacio de nombres de PUID de dispositivo, ver §6). El prefijo g: es solo ese entero en decimal.


5. Cómo lo obtiene CDP: lo consume, no lo calcula

[STATIC] Con el PDB público (cdp.pdb), la ruta del ID de dispositivo en cdp.dll es solo una solicitud y espera contra la pila de identidad. CDP nunca calcula el ID por sí mismo:

root@kitploit:~
flowchart TD
    A["GetStableDeviceIdFromProvider<br/>0x0A3140"] --> B["provider.GetStableDeviceIdAsync<br/>(vtable +0x48)"]
    B --> C["OneCoreAccountProvider::<br/>GetStableDeviceIdAsync 0x0C8370"]
    C --> D["IWebAccountBackedAccountProvider<br/>(MSA / AAD identity COM)"]
    D --> E["OnGetStableDeviceIdCompleted<br/>(const char* deviceId) 0x06CEA0"]
    E -->|"assign() string, signal flag"| A

La devolución de llamada que lo recibe lo hace obvio. El ID aparece como una cadena y simplemente se almacena:

root@kitploit:~
; OnGetStableDeviceIdCompleted
mov  rbp, r9                 ; r9 = cadena device-id proporcionada por el proveedor de identidad
lea  rcx, [rsi+0xD8]         ; campo miembro de CDP
mov  rdx, rbp
call assign@basic_string     ; almacenarlo, sin cálculo, sin seriales
call Set@CdpWaitableFlag      ; desbloquear el esperador

En resumen: el GDID se acuña por debajo de CDP, en la pila de identidad de Windows, y se entrega a CDP como una cadena opaca. Eso apunta al servicio de cuenta Microsoft.


6. La acuñación: Device PUID de MSA (wlidsvc)

[STATIC] C:\Windows\System32\wlidsvc.dll, el servicio de cuenta Microsoft / Passport (Windows Live ID), es el único binario de identidad que contiene el literal GlobalDeviceId, y contiene toda la maquinaria de aprovisionamiento de dispositivos:

root@kitploit:~
CDeviceIdentityBase::CreateNewDeviceIdentity / Provision / BindDeviceToHardware / GetDeviceCert
DeviceAssociateRequest      (Passport PPCRL SOAP -> login.live.com)
<ps:DevicePUID> ... </ps:DevicePUID>
DeviceIdStore::LogToRegistry
BCryptGenRandom / CCryptRandom::GenRandom     (clave del dispositivo, no el ID)

El identificador es un Device PUID (Passport Unique ID), un identificador MSA de 64 bits. El BCryptGenRandom que hay genera la clave de autenticación del dispositivo que BindDeviceToHardware vincula a la máquina, no el PUID.

6.1 Es asignado por el servidor

[STATIC] El cliente extrae el PUID de la respuesta SOAP del servidor, con un XPath en el cuerpo de la respuesta:

root@kitploit:~
/S:Envelope/S:Body/ps:DeviceUpdatePropertiesResponse/HWPUIDFlipped

CAssociateDeviceRequest::ParseResponseBody y los métodos relacionados ParseResponse leen nodos XML de respuesta en BSTR. Por lo tanto, el flujo es: el cliente aprovisiona el dispositivo -> login.live.com asigna y devuelve el PUID del dispositivo -> el cliente lo almacena. Eso es exactamente por qué una reinstalación produce un nuevo GDID (nuevo aprovisionamiento, nuevo PUID asignado por el servidor), y por qué no es un hash de hardware.

6.2 Se persiste en texto claro

[OBSERVED] El almacén de identidad de la cuenta Microsoft mantiene el valor justo en el registro, en tu propio hive de usuario:

root@kitploit:~
HKCU\SOFTWARE\Microsoft\IdentityCRL\ExtendedProperties
    LID = 0018XXXXXXXXXXXX

HKCU\SOFTWARE\Microsoft\IdentityCRL\Immersive\production\Token\{...}
    DeviceId = 0018XXXXXXXXXXXX

Byte por byte el mismo valor que CDP registró en DDS en vivo. El PUID de tu cuenta de usuario es un número diferente almacenado en otro lugar como puid = 0003... (p. ej., 00034002XXXXXXXX). También hay una clave de caché HKLM nombrada después del PUID (HKLM\SOFTWARE\Microsoft\IdentityCRL\NegativeCache\<PUID>_<userSID>), pero esa es solo para SYSTEM, por lo que lees el valor de HKCU.

[!NOTE] El prefijo te dice qué es. Los PUID de usuario son de clase 0003, los PUID de dispositivo son de clase 0018. El GDID del tribunal (0018000FC8CB93CC) está en el espacio de PUID de dispositivo 0018, al igual que el mío.

6.3 Autentica los puntos finales del gráfico

[OBSERVED] La caché de tokens MSA (HKLM\SOFTWARE\Microsoft\IdentityCRL\NegativeCache\...) tiene tokens de dispositivo con alcance exactamente a los puntos finales que CDP utiliza:

root@kitploit:~
scope=service::dds.microsoft.com::MBI_SSL_TOKEN_BROKER
scope=service::activity.windows.com::MBI_SSL_SA_TOKEN_BROKER

Por lo tanto, el servicio de cuenta Microsoft distribuye las credenciales del dispositivo que autentican el registro DDS y las subidas de actividad que transportan el GDID.

6.4 La cadena completa

root@kitploit:~
flowchart TD
    subgraph MSA["Capa de identidad MSA: wlidsvc.dll"]
        A1["Provision device with login.live.com<br/>(Passport PPCRL SOAP)"] --> A2["Server assigns Device PUID<br/>&lt;ps:DevicePUID&gt; / HWPUIDFlipped"]
        A2 --> A3["Store DeviceId / LID = PUID<br/>HKLM\...\IdentityStore"]
        A3 --> A4["Issue device tokens for<br/>dds.microsoft.com and activity.windows.com"]
    end
    subgraph CDP["Cliente de gráfico de dispositivos: cdp.dll / CDPSvc"]
        B1["GetStableDeviceId -> receives PUID string"] --> B2["RegisterUserDeviceAsync -> DDS<br/>OBSERVED: HTTP 200"]
    end
    subgraph SRV["Servidor: Device Directory Service"]
        C1["Keys g:PUID to the MSA account,<br/>activity and IP history"]
    end
    subgraph REP["Reportes"]
        D1["Delivery Optimization -><br/>UCDOStatus.GlobalDeviceId"]
    end
    A4 --> B1
    B2 --> C1
    C1 --> D1

Todo lo que la denuncia atribuye a "el GDID" (persistente por instalación, sobrevive a actualizaciones, nuevo en reinstalación, vinculado a una cuenta Microsoft, rastreable a través de IPs y navegación) se desprende de que esto sea un Device PUID de MSA asignado por el servidor que CDP registra en el gráfico de dispositivos.


7. Encuentra tu propio GDID

[OBSERVED] En una máquina con sesión iniciada en una cuenta Microsoft, una lectura del registro desde tu propio hive de usuario, sin necesidad de administrador:

root@kitploit:~
(Get-ItemProperty 'HKCU:\SOFTWARE\Microsoft\IdentityCRL\ExtendedProperties').LID

Eso te da tu PUID de dispositivo como 16 dígitos hexadecimales (p. ej., 0018XXXXXXXXXXXX). Para verlo en la forma g:<decimal> tal como aparece del lado del servidor:

root@kitploit:~
$hex = (Get-ItemProperty 'HKCU:\SOFTWARE\Microsoft\IdentityCRL\ExtendedProperties').LID
"g:$([Convert]::ToUInt64($hex,16))"

Si ExtendedProperties\LID está vacío en tu equipo, el mismo valor se encuentra en HKCU\SOFTWARE\Microsoft\IdentityCRL\Immersive\production\Token\{...}\DeviceId.

[!WARNING] No publiques tu propio valor. Tu PUID de dispositivo, tu CID de MSA (0003...) y tu SID de usuario te desanonimizan. Redacta en cualquier análisis público. El único valor seguro de citar es el del tribunal, porque ya es público.


8. Reduciendo la exposición

El GDID existe porque tu dispositivo está registrado en el gráfico de dispositivos de la cuenta Microsoft y la Plataforma de Dispositivos Conectados lo mantiene sincronizado. Para reducirlo:

  • Mata la Plataforma de Dispositivos Conectados (CDPSvc, CDPUserSvc) y desactiva el Historial de actividad (Configuración, Privacidad, Historial de actividad) para detener la sincronización del gráfico y las subidas de actividad.
  • Eliminar %LOCALAPPDATA%\ConnectedDevicesPlatform solo borra el estado local de CDP. El PUID vuelve inmediatamente desde el almacén de identidad, por lo que solo eso no bastará.
  • Una reinstalación te da un nuevo GDID (la denuncia lo dice), pero se vincula a uno nuevo en cuanto se registra de nuevo.

9. Metodología (reproducible)

Todo esto se obtuvo de una máquina Windows 11 estándar (compilación 26200).

  • Captura en vivo: Proveedores ETW de TraceLogging de CDP (Microsoft.Windows.CDP.*) mediante logman mientras se forzaba un registro nuevo de CDPSvc, decodificados con tracerpt.
  • Registro y caché de tokens: IdentityStore y IdentityCRL bajo HKLM\SOFTWARE\Microsoft.

ETW y el análisis estático es lo que realmente funcionó. Un proxy solo te hará perder el tiempo.

Apéndice: GUIDs de proveedores ETW de CDP (clic para expandir)

Calculados con el hash del nombre del EventSource (SHA1 del espacio de nombres más el nombre del proveedor en mayúsculas UTF-16BE). Verifícalo contra el valor conocido System.Runtime 49592c0f-5a05-516d-aa4b-a64e02026c89:

root@kitploit:~
Microsoft.Windows.CDP.Core                    {7762de0c-b0a6-571a-68d3-c018bf009496}
Microsoft.Windows.CDP.Core.Error              {a1ea5efc-402e-5285-3898-22a5acce1b76}
Microsoft.Windows.CDP.CDS                     {dfa6e32a-095f-5f57-d025-0887d33507a1}
Microsoft.Windows.CDP.Aggr                    {bc1826c8-369c-5b0b-4cd1-3c6ae5bfe2e7}
Microsoft.Windows.CDP.AFS                     {5fe36556-c4cd-509a-8c3e-2a547ea568ae}
Microsoft.Windows.CDP.OnecoreAccountProvider  {4ee5bf9a-3e8f-540b-8bfb-12457a2854b6}
Microsoft.Windows.CDP                          {9f4cc6dc-1bab-5772-0c71-a89954718d66}
Apéndice: binarios y símbolos clave (clic para expandir)

[!NOTE] NullZeroX en twitter me ha dicho que el GDID también se envía independientemente de si se ha iniciado sesión con una cuenta de Microsoft en el dispositivo. No estoy seguro de qué tan cierto sea, pero vale la pena tenerlo en cuenta.


Análisis de primera mano. Se aceptan correcciones. También gracias a claude por ayudar con este análisis y los diagramas :3

Descargar herramienta
La denuncia dice que una reinstalación produce un nuevo GDID. Un valor derivado de seriales fijos volvería igual después de una reinstalación, no cambiaría.
valorhex (64 bits)prefijo de clase
Mi máquina (redactado)g:XXXXXXXXXXXXXXXX0x0018XXXXXXXXXXXX0018
Exhibición judicialg:67554672343500280x0018000FC8CB93CC0018
BinarioRolSímbolos notables
wlidsvc.dllServicio de cuenta Microsoft / Passport, acuña el Device PUIDCDeviceIdentityBase::CreateNewDeviceIdentity, CAssociateDeviceRequest::ParseResponseBody, DeviceIdStore::LogToRegistry
cdp.dllPlataforma de Dispositivos Conectados, registra el PUID en DDSDdsRegistrationClient, GetStableDeviceIdFromProvider (0x0A3140), OnGetStableDeviceIdCompleted (0x06CEA0)
dosvc.dll / DOReporta el ID como UCDOStatus.GlobalDeviceIdn/a

Registro: HKLM\SOFTWARE\Microsoft\IdentityStore (DeviceId y LID), HKLM\SOFTWARE\Microsoft\IdentityCRL\NegativeCache (alcances de tokens).