Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
OWN-Defender — Projeto de pesquisa que faz engenharia reversa das interfaces COM do Windows Security Center para rastrear o registro de antivírus por meio de ATL, vtable, WSCAPI e RPC, com verificação em tempo de execução via WMI. | Kitploit
Ferramentas/GitHubGitHub/nirvanaon/own-defender
Ferramentas DefensivasExploraçãoEngenharia ReversaAnálise de BináriosAprendizado e Educação
GitHubnirvanaon/own-defender

OWN-Defender

Projeto de pesquisa que faz engenharia reversa das interfaces COM do Windows Security Center para rastrear o registro de antivírus por meio de ATL, vtable, WSCAPI e RPC, com verificação em tempo de execução via WMI.

Ver Repositório
36358há 20 diasRevisado pelo Kitploit

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

OWN-Defender — Pesquisa sobre o COM do Windows Security Center

OWN-Defender é um projeto de pesquisa de segurança do Windows focado em entender como o Windows Security Center (WSC) representa e gerencia produtos de segurança antivírus por meio de suas interfaces COM.

O projeto começou como uma investigação sobre o comportamento demonstrado pelo DefendNot, mas em vez de tratar a implementação existente como uma caixa-preta, usei-a como ponto de partida para engenharia reversa independente e verificação.

Screenshot 2026-08-26 111717

O objetivo deste projeto é entender o caminho completo de execução:

root@kitploit:~
COM
 ↓
CLSID / IID
 ↓
CoCreateInstance
 ↓
QueryInterface
 ↓
ATL Interface Map
 ↓
vtable
 ↓
IWscAVStatus4
 ↓
CWscIsv
 ↓
WSCAPI.dll
 ↓
RPC
 ↓
Windows Security Center

O projeto foi desenvolvido e testado em um ambiente de pesquisa controlado do Windows.

Somente para Pesquisa / Uso Educacional

Este projeto destina-se à pesquisa de internals do Windows, engenharia reversa, educação em segurança e testes de segurança autorizados. Não o utilize para interferir em softwares de segurança em sistemas que você não possui ou para os quais não tem permissão explícita de teste.


Motivação da Pesquisa

A pergunta inicial era simples:

Como o Windows Security Center sabe que um produto antivírus existe?

Em vez de parar na documentação pública da API, quis entender o que acontece por baixo da API.

Isso levou a várias perguntas:

  • Qual classe COM implementa a funcionalidade do WSC?
  • Qual IID corresponde à interface de antivírus?
  • Como o QueryInterface() resolve a interface?
  • Onde a interface está armazenada no mapa de interfaces ATL?
  • Por que o IDA às vezes mostra apenas __int64 a1 para um método?
  • Por que a interface C++ reconstruída contém parâmetros adicionais?
  • Qual função Register() é realmente a função de registro de AV?
  • Como o registro chega ao Windows Security Center?
  • Onde aparece o limite do RPC?
  • Como o resultado pode ser verificado de forma independente?

Jornada de Engenharia Reversa

1. Identificando a Classe COM

O primeiro passo foi identificar a classe COM do Windows Security Center.

O projeto usa a classe COM do WSC:

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

A implementação também contém lógica para localizar o CLSID dinamicamente no registro do Windows, em vez de depender exclusivamente de um valor fixo.

Conceitualmente:

root@kitploit:~
HKLM
 └── SOFTWARE
     └── Classes
         └── CLSID
             └── {CLSID}
                 └── Windows Security Center ISV API

Isso forneceu a primeira relação importante:

root@kitploit:~
Registro
   ↓
CLSID
   ↓
Windows Security Center ISV API

2. Identificando a Interface Correta

O próximo desafio foi determinar qual interface COM deveria ser solicitada.

O projeto usa:

root@kitploit:~
IWscAVStatus4

com:

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

Uma das lições importantes da pesquisa foi:

Somente o nome de um GUID não é evidência suficiente.

Verifiquei a relação por meio de engenharia reversa, em vez de assumir que o nome da interface e o GUID estavam corretos.

A investigação incluiu:

  • Referências de GUID
  • QueryInterface
  • Mapas de interfaces ATL
  • _ATL_INTMAP_ENTRY
  • Localizações de vtable
  • Referências cruzadas
  • Implementações de funções
  • Comportamento em tempo de execução

3. Entendendo o QueryInterface

Uma das etapas de reversão mais úteis foi seguir a implementação de:

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

que eventualmente chega a:

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

O mapa de interfaces ATL é usado para comparar o IID solicitado com as entradas de interface registradas.

Conceitualmente:

root@kitploit:~
IID solicitado
     ↓
QueryInterface()
     ↓
InternalQueryInterface()
     ↓
ATL Interface Map
     ↓
Comparação de GUID
     ↓
Interface correspondente
     ↓
Ponteiro de interface

Isso forneceu evidência independente de que o GUID investigado realmente correspondia à interface COM esperada.


4. A Confusão do Register()

Um dos maiores desafios da reversão foi entender por que o IDA/Ghidra nem sempre exibia a assinatura de método que eu esperava.

A interface reconstruída contém:

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

No entanto, o descompilador poderia mostrar uma implementação como:

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

À primeira vista, isso parecia inconsistente.

Uma investigação mais aprofundada mostrou que a representação do descompilador descrevia um wrapper/thunk e a chamada indireta subjacente à vtable, em vez de apresentar a assinatura lógica completa da interface.

Isso se tornou uma lição importante:

A saída do descompilador é uma interpretação do código de máquina, não a verdade original no nível do código-fonte.

Para resolver essas discrepâncias, comparei:

root@kitploit:~
Definição da interface COM
        ↓
Layout da vtable
        ↓
Assembly
        ↓
Wrapper/thunk
        ↓
Convenção de chamada
        ↓
Função alvo real

5. Múltiplas Funções Register()

Outra fonte de confusão foi a presença de múltiplas funções com nomes como:

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

A percepção importante foi que nomes semelhantes não significam interfaces idênticas.

Por exemplo:

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

enquanto:

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

O número da interface e a implementação ao redor tiveram que ser verificados, em vez de selecionar uma função simplesmente porque seu nome continha Register.

Esta foi uma das partes mais úteis da pesquisa, pois me forçou a correlacionar:

root@kitploit:~
Interface
+
IID
+
vtable
+
implementação
+
layout de parâmetros
+
alvo da chamada

6. Rastreando o Caminho de Registro

Após identificar a interface correta, rastreei a operação de registro mais profundamente no binário.

O caminho observado foi aproximadamente:

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

Isso foi particularmente importante porque o método COM em si não era a operação final.

A chamada eventualmente cruzava um limite de RPC.

Isso mudou a forma como eu via a arquitetura:

root@kitploit:~
COM
  ≠
implementação final

Em vez disso:

root@kitploit:~
COM
 ↓
implementação local
 ↓
API do WSC
 ↓
cliente RPC
 ↓
componente do Windows

7. Entendendo o WSCAPI.dll

A próxima camada era o WSCAPI.dll.

O caminho reconstruído por engenharia reversa chegava a:

root@kitploit:~
wscRegisterSecurityProduct()

que eventualmente invocava:

root@kitploit:~
s_wscRegisterSecurityProduct()

e depois:

root@kitploit:~
NdrClientCall3()

Este foi o ponto em que a investigação passou de uma chamada COM normal para a infraestrutura RPC do Windows.

Entender essa camada ajudou a explicar por que o comportamento não podia ser totalmente compreendido olhando apenas para a DLL COM original.


8. Verificação em Tempo de Execução

A análise estática foi apenas uma parte da pesquisa.

Após reconstruir a interface e o caminho de chamada relevantes, criei minha própria implementação controlada e comparei o comportamento resultante com o Windows Security Center.

Usei informações do Windows Security Center / WMI, como:

root@kitploit:~
ROOT\SecurityCenter2
    AntiVirusProduct

para observar de forma independente as informações do produto registrado.

O processo de verificação foi:

root@kitploit:~
Engenharia reversa
       ↓
Reconstrução da interface
       ↓
Implementação própria
       ↓
Execução em tempo de execução
       ↓
Windows Security Center
       ↓
Observação via WMI
       ↓
Comparação de resultados

Isso me permitiu verificar que as conclusões da análise estática correspondiam ao comportamento observável do Windows.


9. O Que Aprendi

Este projeto me ensinou consideravelmente mais do que como interagir com uma interface COM.

COM

  • CLSID vs IID
  • Ativação COM
  • CoCreateInstance
  • QueryInterface
  • Contagem de referências
  • Ponteiros de interface
  • Vtables
  • Mapas de interfaces ATL

Engenharia Reversa

  • Limitações dos descompiladores IDA/Ghidra
  • Seguimento de referências cruzadas
  • Identificação de GUIDs
  • Reconstrução de interfaces
  • Análise de wrappers/thunks gerados pelo compilador
  • Entendimento de chamadas indiretas via vtable
  • Validação de convenções de chamada

Internals do Windows

  • Windows Security Center
  • Interfaces de provedor do WSC
  • WSCAPI.dll
  • RPC do Windows
  • Stubs RPC gerados por MIDL
  • NdrClientCall3
  • Estado do produto no Security Center

Metodologia de Pesquisa

Acima de tudo, aprendi a evitar depender de uma única evidência.

Em vez disso:

root@kitploit:~
Símbolo
   ↓
Descompilador
   ↓
Assembly
   ↓
GUID
   ↓
Mapa de Interfaces
   ↓
vtable
   ↓
Grafo de Chamadas
   ↓
RPC
   ↓
Verificação em Tempo de Execução

Cada camada aumenta a confiança na conclusão.


Arquitetura do Projeto

A implementação da pesquisa consiste em dois componentes principais.

root@kitploit:~
OWN-Defender
│
├── OWN-Defender.cpp
│   ├── Interação COM com o WSC
│   ├── Descoberta de CLSID
│   ├── Inicialização COM
│   ├── Interação com IWscAVStatus4
│   ├── Registro
│   ├── Atualização de status
│   └── Limpeza
│
└── dllmain.cpp
    ├── Ponto de entrada da DLL
    ├── Carregador de pesquisa
    ├── Execução controlada
    └── Tratamento de limpeza/parada

O repositório é intencionalmente pequeno para que a relação entre o comportamento reconstruído por engenharia reversa e a implementação permaneça fácil de seguir.


Perguntas-Chave da Pesquisa

Este projeto foi construído em torno de perguntas, em vez de simplesmente reproduzir funcionalidade:

root@kitploit:~
Como o WSC identifica a classe COM?

Como o IID é mapeado para a interface?

Como o QueryInterface localiza a interface?

Por que o IDA mostra assinaturas de função diferentes?

Onde está a vtable real?

Qual Register() é a implementação de AV?

O que acontece após o método COM?

Onde o WSCAPI.dll entra na cadeia de chamadas?

Onde o RPC começa?

Como o resultado pode ser verificado de forma independente?

Essas perguntas foram, em última análise, mais valiosas do que a própria implementação final.


Perspectiva de Pesquisa em Segurança

O projeto também fornece um ponto de partida útil para estudar o limite de segurança entre:

root@kitploit:~
Aplicação
     ↓
COM
     ↓
Windows Security Center
     ↓
Informações do Provedor de Segurança

Uma distinção importante é que registrar informações de produto de segurança não é automaticamente equivalente a desabilitar o mecanismo do Defender ou contornar seus mecanismos de proteção.

Portanto, este projeto deve ser visto principalmente como:

Pesquisa de engenharia reversa do Windows Security Center / COM

em vez de uma afirmação de que o registro no WSC por si só constitui uma vulnerabilidade do Defender.

Qualquer impacto de segurança exige investigação e validação separadas.


Créditos

Esta pesquisa foi inspirada em parte pelo trabalho demonstrado no DefendNot por es3n1n.

Um agradecimento especial ao autor por fornecer um ponto de partida útil para entender o mecanismo do WSC.

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

O propósito deste repositório não é reivindicar a pesquisa original como minha, mas documentar meu próprio processo de engenharia reversa, implementação independente e verificação do comportamento subjacente do Windows.


Aviso Legal

Este repositório é fornecido para:

  • Pesquisa de internals do Windows
  • Educação em engenharia reversa
  • Pesquisa em segurança
  • Engenharia de detecção
  • Testes de laboratório autorizados

Use este projeto apenas em sistemas que você possui ou para os quais está explicitamente autorizado a testar.

O autor não é responsável por uso indevido, danos, perda de dados, interferência em controles de segurança ou implantação não autorizada.


Licença

Este projeto está licenciado sob a GNU General Public License v3.0.

Consulte LICENSE para obter detalhes.


Conclusão Final

O objetivo principal do OWN-Defender não é simplesmente reproduzir uma técnica de registro de AV.

É demonstrar uma metodologia de engenharia reversa repetível:

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

O que começou com uma pergunta sobre o Windows Security Center tornou-se uma exploração mais profunda de COM, ATL, mapeamento GUID/IID, vtables, código gerado pelo compilador, WSCAPI, RPC e arquitetura de segurança do Windows.

A implementação é o resultado. O processo de engenharia reversa é o verdadeiro projeto.

Baixar ferramenta