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
Herramientas/GitHubGitHub/nirvanaon/own-defender
Herramientas DefensivasExplotaciónIngeniería InversaAnálisis de BinariosAprendizaje y Educación
GitHubnirvanaon/own-defender

OWN-Defender

Proyecto de investigación de ingeniería inversa de las interfaces COM de Windows Security Center para rastrear el registro de AV a través de ATL, vtable, WSCAPI y RPC, con verificación en tiempo de ejecución mediante WMI.

Ver Repositorio
36358hace 20 díasRevisado por Kitploit

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 →
Compartir

OWN-Defender — Investigación COM del Centro de seguridad de Windows

OWN-Defender es un proyecto de investigación de seguridad de Windows centrado en comprender cómo el Centro de seguridad de Windows (WSC) representa y gestiona los productos de seguridad antivirus a través de sus interfaces COM.

El proyecto comenzó como una investigación sobre el comportamiento demostrado por DefendNot, pero en lugar de tratar la implementación existente como una caja negra, lo utilicé como punto de partida para una ingeniería inversa independiente y su verificación.

Screenshot 2026-08-26 111717

El objetivo de este proyecto es comprender la ruta de ejecución completa:

root@kitploit:~
COM
 ↓
CLSID / IID
 ↓
CoCreateInstance
 ↓
QueryInterface
 ↓
Mapa de interfaces ATL
 ↓
vtable
 ↓
IWscAVStatus4
 ↓
CWscIsv
 ↓
WSCAPI.dll
 ↓
RPC
 ↓
Centro de seguridad de Windows

El proyecto se desarrolló y probó en un entorno de investigación de Windows controlado.

Solo para investigación / uso educativo

Este proyecto está destinado a la investigación de internals de Windows, ingeniería inversa, educación en seguridad y pruebas de seguridad autorizadas. No lo utilices para interferir con software de seguridad en sistemas que no poseas o para los que no tengas permiso explícito de prueba.


Motivación de la investigación

La pregunta inicial era simple:

¿Cómo sabe el Centro de seguridad de Windows que existe un producto antivirus?

En lugar de detenerme en la documentación pública de la API, quería entender qué ocurre debajo de la API.

Esto llevó a varias preguntas:

  • ¿Qué clase COM implementa la funcionalidad de WSC?
  • ¿Qué IID corresponde a la interfaz antivirus?
  • ¿Cómo resuelve QueryInterface() la interfaz?
  • ¿Dónde se almacena la interfaz en el mapa de interfaces ATL?
  • ¿Por qué IDA a veces muestra solo __int64 a1 para un método?
  • ¿Por qué la interfaz C++ reconstruida contiene parámetros adicionales?
  • ¿Qué función Register() es realmente la función de registro de AV?
  • ¿Cómo llega finalmente el registro al Centro de seguridad de Windows?
  • ¿Dónde aparece el límite de RPC?
  • ¿Cómo se puede verificar el resultado de forma independiente?

Viaje de ingeniería inversa

1. Identificación de la clase COM

El primer paso fue identificar la clase COM del Centro de seguridad de Windows.

El proyecto utiliza la clase COM de WSC:

root@kitploit:~
CLSID_WscIsv
F2102C37-90C3-450C-B3F6-92BE1693BDF2

La implementación también contiene lógica para localizar el CLSID dinámicamente desde el registro de Windows en lugar de depender exclusivamente de un valor codificado.

Conceptualmente:

root@kitploit:~
HKLM
 └── SOFTWARE
     └── Classes
         └── CLSID
             └── {CLSID}
                 └── API ISV del Centro de seguridad de Windows

Esto proporcionó la primera relación importante:

root@kitploit:~
Registro
   ↓
CLSID
   ↓
API ISV del Centro de seguridad de Windows

2. Identificación de la interfaz correcta

El siguiente desafío fue determinar qué interfaz COM debía solicitarse.

El proyecto utiliza:

root@kitploit:~
IWscAVStatus4

con:

root@kitploit:~
4DCBAFAC-29BA-46B1-80FC-B8BDE3C0AE4D

Una de las lecciones importantes de la investigación fue:

Un nombre de GUID por sí solo no es evidencia suficiente.

Verifiqué la relación mediante ingeniería inversa en lugar de asumir que el nombre de la interfaz y el GUID eran correctos.

La investigación incluyó:

  • Referencias de GUID
  • QueryInterface
  • Mapas de interfaces ATL
  • _ATL_INTMAP_ENTRY
  • Ubicaciones de vtable
  • Referencias cruzadas
  • Implementaciones de funciones
  • Comportamiento en tiempo de ejecución

3. Comprensión de QueryInterface

Uno de los pasos de reversión más útiles fue seguir la implementación de:

root@kitploit:~
CComAggObject<CWscIsv>::QueryInterface()

que finalmente llega a:

root@kitploit:~
ATL::CComObjectRootBase::InternalQueryInterface()

El mapa de interfaces ATL se utiliza para comparar el IID solicitado con las entradas de interfaz registradas.

Conceptualmente:

root@kitploit:~
IID solicitado
     ↓
QueryInterface()
     ↓
InternalQueryInterface()
     ↓
Mapa de interfaces ATL
     ↓
Comparación de GUID
     ↓
Interfaz coincidente
     ↓
Puntero de interfaz

Esto proporcionó evidencia independiente de que el GUID investigado correspondía realmente a la interfaz COM esperada.


4. La confusión de Register()

Uno de los mayores desafíos de la reversión fue comprender por qué IDA/Ghidra no siempre mostraba la firma del método que esperaba.

La interfaz reconstruida contiene:

root@kitploit:~
virtual HRESULT __stdcall Register(
    BSTR path,
    BSTR name,
    unsigned int,
    unsigned int
) = 0;

Sin embargo, el descompilador podría mostrar una implementación como:

root@kitploit:~
_IWscAVStatus4<CWscIsv>::Register(__int64 a1)

Al principio esto parecía inconsistente.

Una investigación más profunda mostró que la representación del descompilador describía un wrapper/thunk y la llamada indirecta subyacente a la vtable, en lugar de presentar la firma lógica completa de la interfaz.

Esto se convirtió en una lección importante:

La salida del descompilador es una interpretación del código máquina, no la verdad original a nivel de código fuente.

Para resolver estas discrepancias, comparé:

root@kitploit:~
Definición de la interfaz COM
        ↓
Diseño de la vtable
        ↓
Ensamblador
        ↓
Wrapper/thunk
        ↓
Convención de llamada
        ↓
Función objetivo real

5. Múltiples funciones Register()

Otra fuente de confusión fue la presencia de múltiples funciones con nombres como:

root@kitploit:~
IWscAVStatus2::Register
IWscAVStatus4::Register
IWscFWStatus2::Register
RegisterAV

La comprensión importante fue que nombres similares no significan interfaces idénticas.

Por ejemplo:

root@kitploit:~
AV
 ↓
IWscAVStatus4
 ↓
Registro de AV

mientras que:

root@kitploit:~
Firewall
 ↓
IWscFWStatus2
 ↓
Registro de firewall

El número de interfaz y la implementación circundante tuvieron que verificarse en lugar de seleccionar una función simplemente porque su nombre contenía Register.

Esta fue una de las partes más útiles de la investigación porque me obligó a correlacionar:

root@kitploit:~
Interfaz
+
IID
+
vtable
+
implementación
+
diseño de parámetros
+
objetivo de llamada

6. Rastreo de la ruta de registro

Después de identificar la interfaz correcta, rastreé la operación de registro más profundamente en el binario.

La ruta observada fue aproximadamente:

root@kitploit:~
IWscAVStatus4::Register()
        ↓
CWscIsv
        ↓
RegisterSecurityProductFunction
        ↓
wscRegisterSecurityProduct()
        ↓
WSCAPI.dll
        ↓
s_wscRegisterSecurityProduct()
        ↓
NdrClientCall3()
        ↓
RPC
        ↓
Centro de seguridad de Windows

Esto fue particularmente importante porque el método COM en sí no era la operación final.

La llamada finalmente cruzaba un límite de RPC.

Eso cambió mi forma de ver la arquitectura:

root@kitploit:~
COM
  ≠
implementación final

En su lugar:

root@kitploit:~
COM
 ↓
implementación local
 ↓
API de WSC
 ↓
cliente RPC
 ↓
componente de Windows

7. Comprensión de WSCAPI.dll

La siguiente capa era WSCAPI.dll.

La ruta con ingeniería inversa alcanzó:

root@kitploit:~
wscRegisterSecurityProduct()

que finalmente invocaba:

root@kitploit:~
s_wscRegisterSecurityProduct()

y luego:

root@kitploit:~
NdrClientCall3()

Este fue el punto donde la investigación pasó de una llamada COM normal a la infraestructura RPC de Windows.

Comprender esta capa ayudó a explicar por qué el comportamiento no podía entenderse completamente mirando solo el DLL COM original.


8. Verificación en tiempo de ejecución

El análisis estático fue solo una parte de la investigación.

Después de reconstruir la interfaz y la ruta de llamada relevantes, creé mi propia implementación controlada y comparé el comportamiento resultante con el Centro de seguridad de Windows.

Utilicé información del Centro de seguridad de Windows / WMI como:

root@kitploit:~
ROOT\SecurityCenter2
    AntiVirusProduct

para observar de forma independiente la información del producto registrado.

El proceso de verificación fue:

root@kitploit:~
Ingeniería inversa
       ↓
Reconstrucción de la interfaz
       ↓
Implementación propia
       ↓
Ejecución en tiempo de ejecución
       ↓
Centro de seguridad de Windows
       ↓
Observación WMI
       ↓
Comparación de resultados

Esto me permitió verificar que las conclusiones del análisis estático correspondían con el comportamiento observable de Windows.


9. Lo que aprendí

Este proyecto me enseñó considerablemente más que cómo interactuar con una interfaz COM.

COM

  • CLSID vs IID
  • Activación COM
  • CoCreateInstance
  • QueryInterface
  • Conteo de referencias
  • Punteros de interfaz
  • vtables
  • Mapas de interfaces ATL

Ingeniería inversa

  • Limitaciones del descompilador de IDA/Ghidra
  • Seguimiento de referencias cruzadas
  • Identificación de GUID
  • Reconstrucción de interfaces
  • Análisis de wrappers/thunks generados por el compilador
  • Comprensión de llamadas indirectas a vtable
  • Validación de convenciones de llamada

Internals de Windows

  • Centro de seguridad de Windows
  • Interfaces de proveedor de WSC
  • WSCAPI.dll
  • RPC de Windows
  • Stubs RPC generados por MIDL
  • NdrClientCall3
  • Estado del producto del Centro de seguridad

Metodología de investigación

Lo más importante fue aprender a evitar depender de una sola evidencia.

En su lugar:

root@kitploit:~
Símbolo
   ↓
Descompilador
   ↓
Ensamblador
   ↓
GUID
   ↓
Mapa de interfaces
   ↓
vtable
   ↓
Grafo de llamadas
   ↓
RPC
   ↓
Verificación en tiempo de ejecución

Cada capa aumenta la confianza en la conclusión.


Arquitectura del proyecto

La implementación de la investigación consta de dos componentes principales.

root@kitploit:~
OWN-Defender
│
├── OWN-Defender.cpp
│   ├── Interacción COM con WSC
│   ├── Descubrimiento de CLSID
│   ├── Inicialización COM
│   ├── Interacción con IWscAVStatus4
│   ├── Registro
│   ├── Actualización de estado
│   └── Limpieza
│
└── dllmain.cpp
    ├── Punto de entrada del DLL
    ├── Cargador de investigación
    ├── Ejecución controlada
    └── Manejo de limpieza/detención

El repositorio es intencionalmente pequeño para que la relación entre el comportamiento con ingeniería inversa y la implementación siga siendo fácil de seguir.


Preguntas clave de investigación

Este proyecto se construyó en torno a preguntas en lugar de simplemente reproducir funcionalidad:

root@kitploit:~
¿Cómo identifica WSC la clase COM?

¿Cómo se asigna el IID a la interfaz?

¿Cómo localiza QueryInterface la interfaz?

¿Por qué IDA muestra firmas de función diferentes?

¿Dónde está la vtable real?

¿Qué Register() es la implementación de AV?

¿Qué ocurre después del método COM?

¿Dónde entra WSCAPI.dll en la cadena de llamadas?

¿Dónde comienza RPC?

¿Cómo se puede verificar el resultado de forma independiente?

Estas preguntas fueron finalmente más valiosas que la implementación final en sí.


Perspectiva de investigación de seguridad

El proyecto también proporciona un punto de partida útil para estudiar el límite de seguridad entre:

root@kitploit:~
Aplicación
     ↓
COM
     ↓
Centro de seguridad de Windows
     ↓
Información del proveedor de seguridad

Una distinción importante es que registrar información de productos de seguridad no equivale automáticamente a deshabilitar el motor de Defender ni a eludir sus mecanismos de protección.

Por lo tanto, este proyecto debe verse principalmente como:

Investigación de ingeniería inversa del Centro de seguridad de Windows / COM

en lugar de como una afirmación de que el registro en WSC por sí solo constituye una vulnerabilidad de Defender.

Cualquier impacto de seguridad requiere una investigación y validación separadas.


Créditos

Esta investigación se inspiró en parte en el trabajo demostrado en DefendNot por es3n1n.

Un agradecimiento especial al autor por proporcionar un punto de partida útil para comprender el mecanismo de WSC.

Proyecto original: https://github.com/es3n1n/defendnot

El propósito de este repositorio no es reclamar la investigación original como propia, sino documentar mi propio proceso de ingeniería inversa, implementación independiente y verificación del comportamiento subyacente de Windows.


Aviso legal

Este repositorio se proporciona para:

  • Investigación de internals de Windows
  • Educación en ingeniería inversa
  • Investigación de seguridad
  • Ingeniería de detección
  • Pruebas de laboratorio autorizadas

Utiliza este proyecto solo en sistemas que poseas o para los que estés explícitamente autorizado a probar.

El autor no es responsable del uso indebido, daños, pérdida de datos, interferencia con controles de seguridad o despliegue no autorizado.


Licencia

Este proyecto está licenciado bajo la GNU General Public License v3.0.

Consulta LICENSE para más detalles.


Conclusión final

El objetivo principal de OWN-Defender no es simplemente reproducir una técnica de registro de AV.

Es demostrar una metodología de ingeniería inversa repetible:

root@kitploit:~
Encontrar
 ↓
Mapear
 ↓
Reversar
 ↓
Reconstruir
 ↓
Rastrear
 ↓
Implementar
 ↓
Verificar

Lo que comenzó con una pregunta sobre el Centro de seguridad de Windows se convirtió en una exploración más profunda de COM, ATL, mapeo GUID/IID, vtables, código generado por el compilador, WSCAPI, RPC y la arquitectura de seguridad de Windows.

La implementación es el resultado. El proceso de ingeniería inversa es el proyecto real.

Descargar herramienta