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
Spartacus — Spartacus Kit de Sequestro de DLL/COM | Kitploit
Ferramentas/GitHubGitHub/accenture/spartacus
Ferramentas DefensivasGeração de PayloadsAnálise de CódigoExploraçãoEngenharia ReversaTestes de PenetraçãoAnálise de BináriosRed TeamingArchived
GitHubaccenture/spartacus

Spartacus

Spartacus Kit de Sequestro de DLL/COM

Ver Repositório
1.1k153há 2 anosRevisado 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

[!CAUTION] Este repositório não é mais mantido, visite https://github.com/sadreck/Spartacus para a versão mais recente.

Spartacus - Toolkit de DLL/COM Hijacking version

Porquê "Spartacus"?

Se viste o filme Spartacus de 1960, lembrar-te-ás da cena em que os romanos pedem que Spartacus se entregue. No momento em que o verdadeiro Spartacus se levantou, muitos outros também se levantaram e afirmaram ser ele, usando a frase "EU SOU SPARTACUS".

Quando um processo vulnerável a DLL Hijacking pede que uma DLL seja carregada, é como se perguntasse "QUEM É VERSION.DLL?" e diretórios aleatórios começam a afirmar "EU SOU VERSION.DLL" e "NÃO, EU SOU VERSION.DLL". E assim, Spartacus.

Em que é que esta ferramenta é diferente de todas as outras ferramentas de hijacking existentes?

  • Spartacus automatiza a maior parte do processo. Ele analisa logs crus do SysInternals Process Monitor, e podes deixar o ProcMon a correr durante horas e descobrir vulnerabilidades de DLL/COM hijacking de 2º e 3º nível (por exemplo, uma app que carrega outra DLL que, por sua vez, carrega outra DLL quando usas uma funcionalidade específica da app pai).
  • Gera automaticamente soluções do Visual Studio para DLLs vulneráveis.
  • Capaz de processar grandes ficheiros PML e armazenar todos os eventos de interesse num ficheiro CSV. Benchmark local processou um ficheiro de 3GB com 8 milhões de eventos em 45 segundos.
  • Suporta a procura por vulnerabilidades de hijacking tanto de DLL como de COM.
  • Suporta a geração de certificados auto-assinados e a assinatura de ficheiros DLL.
  • Utilizando a funcionalidade Ghidra, extrai assinaturas de funções de exportação e executa o teu payload através de funções proxy individuais em vez de executar tudo a partir de DllMain. Esta técnica foi inspirada e implementada a partir do tutorial descrito em https://www.redteam.cafe/red-team/dll-sideloading/dll-sideloading-not-by-dllmain, por Shantanu Khandelwal.
  • [Defesa] Modo de monitorização que tenta identificar aplicações em execução a fazer proxy de chamadas, como em "DLL Hijacking em andamento". Isto serve apenas para detetar frutos mais fáceis e não deve ser considerado fiável.

Índice

  • Instalação
  • Funcionalidades Suportadas
    • DLL Hijacking
      • Uso
    • COM Hijacking
      • Uso
    • Geração de Proxy DLL
      • Uso
    • Assinatura de Ficheiros DLL
      • Uso
    • Deteção de DLL Hijacking
  • Argumentos da Linha de Comandos
  • Contribuições
  • Créditos

Instalação

Encontra e descarrega a versão mais recente do Spartacus em Releases. Caso contrário, clona simplesmente este repositório e compila a partir do código fonte.

Funcionalidades Suportadas

Abaixo está uma descrição de cada um dos modos que o Spartacus suporta.

Nota: Os argumentos da linha de comandos mudaram significativamente da v1 para a v2.

DLL Hijacking

A funcionalidade original do Spartacus era exclusivamente encontrar vulnerabilidades de DLL hijacking. A forma como funciona é:

  1. Gera dinamicamente um ficheiro de configuração ProcMon (PMC), com base nos argumentos passados. Os filtros que serão definidos são:
    • A operação é CreateFile.
    • O caminho termina com .dll.
    • O nome do processo não é procmon.exe nem procmon64.exe.
    • Ativar "Drop Filtered Events" para garantir o tamanho mínimo do ficheiro PML.
    • Desativar "Auto Scroll".
  2. Executa o Process Monitor e pára até que o utilizador prima ENTER.
  3. O utilizador executa/termina processos, ou deixa o sistema a correr durante o tempo que desejar.
  4. Termina o Process Monitor quando o utilizador prime ENTER.
  5. Analisa o ficheiro de Event Log (PML) de saída.
    1. Cria um ficheiro CSV com todas as DLLs com NAME_NOT_FOUND e PATH_NOT_FOUND.
    2. Compara as DLLs acima e tenta identificar as DLLs que foram efetivamente carregadas.
    3. Para cada DLL "encontrada", gera uma solução Visual Studio para fazer proxy de todas as funções de exportação da DLL identificada.

Uso DLL Hijacking

Recolhe todos os eventos e guarda-os em C:\Data\logs.pml. Todas as DLLs vulneráveis serão guardadas como C:\Data\VulnerableDLLFiles.csv e todas as soluções de DLL proxy em C:\Data\Solutions.

root@kitploit:~
--mode dll --procmon C:\SysInternals\Procmon.exe --pml C:\Data\logs.pml --csv C:\Data\VulnerableDLLFiles.csv --solution C:\Data\Solutions --verbose

Analisa um ficheiro PML existente, guarda a saída em CSV e gera soluções Visual Studio de proxy.

root@kitploit:~
--mode dll --existing --pml C:\MyData\SomeBackup.pml --csv C:\Data\VulnerableDLLFiles.csv --solution C:\Data\Solutions --verbose

Screenshots

DLL Runtime

CSV Output

COM Hijacking

Uma nova funcionalidade do Spartacus é identificar vulnerabilidades de hijacking COM local. A forma como funciona é:

  1. Gera dinamicamente um ficheiro de configuração ProcMon (PMC), com base nos argumentos passados. Os filtros que serão definidos são:
    • A operação é RegOpenKey.
    • O nome do processo não é procmon.exe nem procmon64.exe.
    • Ativar "Drop Filtered Events" para garantir o tamanho mínimo do ficheiro PML.
    • Desativar "Auto Scroll".
  2. Executa o Process Monitor e pára até que o utilizador prima ENTER.
  3. O utilizador executa/termina processos, ou deixa o sistema a correr durante o tempo que desejar.
  4. Termina o Process Monitor quando o utilizador prime ENTER.
  5. Analisa o ficheiro de Event Log (PML) de saída.
    1. Identifica todas as chaves de registo em falta que terminam em InprocServer32 e cujo resultado é NAME_NOT_FOUND.
    2. Se a chave identificada estiver em HKEY_CURRENT_USER, procura o seu GUID em HKEY_CLASSES_ROOT e inclui os seus detalhes no CSV de exportação (se encontrado).
    3. Cria um ficheiro CSV com toda a informação recolhida.
  6. O Spartacus não cria automaticamente uma solução Visual Studio para COM hijacking, no entanto, se precisares de criar uma DLL proxy, podes usar o modo proxy.

Para COM hijacking, o Spartacus também suporta a análise do sistema local para entradas COM mal configuradas:

  1. Enumera todas as chaves HKEY_CLASSES_ROOT, HKEY_CURRENT_USER e HKEY_LOCAL_MACHINE.
  2. Procura chaves de registo chamadas InProcServer, InProcServer32, LocalServer ou LocalServer32.
  3. Identifica quaisquer localizações de EXE/DLL em falta, juntamente com qualquer configuração incorreta de ACL, como a capacidade de Modificar ou Apagar o ficheiro pelo utilizador atual.

Uso COM Hijacking

Recolhe todos os eventos e guarda-os em C:\Data\logs.pml. Toda a informação vulnerável sobre COM será guardada como C:\Data\VulnerableCOM.csv.

root@kitploit:~
--mode com --procmon C:\SysInternals\Procmon.exe --pml C:\Data\logs.pml --csv C:\Data\VulnerableCOM.csv --verbose

Processa um ficheiro PML existente para identificar entradas COM vulneráveis.

root@kitploit:~
--mode com --existing --pml C:\Data\logs.pml --csv C:\Data\VulnerableCOM.csv --verbose

Enumera o registo do sistema local para identificar bibliotecas e executáveis COM em falta/mal configurados.

root@kitploit:~
--mode com --acl --csv C:\Data\VulnerableCOM.csv --verbose

Screenshots

COM Runtime

CSV Output

Geração de Proxy DLL

O Spartacus suporta a geração de soluções Visual Studio, criando projetos esqueleto para usares, com base na DLL que pretendes explorar.

  • Redirecionar todas as chamadas exportando funções de volta para a DLL legítima.
    • Isto significa que terás de executar o teu payload a partir da função DllMain.
  • Usando Ghidra, extrair o maior número possível de assinaturas/definições de funções da DLL alvo e criar funções proxy para estas.
    • Para qualquer função cuja assinatura não seja possível extrair, será redirecionada diretamente para a função/DLL legítima.
    • Isto significa que podes executar o teu payload a partir de uma função fora de DllMain.
    • Por exemplo, se pretenderes explorar version.dll, podes executar o teu implante a partir de GetFileVersionInfoExW se essa função for chamada pela aplicação vulnerável.

Uso Geração de Proxy DLL

Gera uma solução que redireciona todas as exportações (sem proxy de funções).

root@kitploit:~
--mode proxy --dll C:\Windows\System32\version.dll --solution "C:\data\tmp\refactor-version" --overwrite --verbose --external-resources

É possível inserir várias DLLs de uma só vez.

root@kitploit:~
--mode proxy --dll C:\Windows\System32\version.dll --dll C:\Windows\System32\userenv.dll --solution "C:\data\tmp\dll-collection" --overwrite --verbose --external-resources

Cria proxies para o maior número possível de funções (com base na saída do Ghidra).

root@kitploit:~
--mode proxy --ghidra C:\ghidra\support\analyzeHeadless.bat --dll C:\Windows\System32\userenv.dll --solution C:\Projects\spartacus-userenv --overwrite --verbose

O mesmo que acima, mas usa ficheiros de ativos externos para gerar a solução (se precisares de os modificar).

root@kitploit:~
--mode proxy --ghidra C:\ghidra\support\analyzeHeadless.bat --dll C:\Windows\System32\userenv.dll --solution C:\Projects\spartacus-userenv --overwrite --verbose --external-resources

Utiliza protótipos de funções pré-gerados para funções para as quais o Ghidra não conseguiu extrair definições de funções.

root@kitploit:~
--mode proxy --ghidra C:\ghidra\support\analyzeHeadless.bat --dll C:\Windows\System32\userenv.dll --solution C:\Projects\spartacus-userenv --overwrite --verbose --external-resources --prototypes C:\data\prototypes.csv

Gera proxies apenas para as funções GetFileVersionInfoExW e GetFileVersionInfoExA.

root@kitploit:~
--mode proxy --ghidra C:\ghidra\support\analyzeHeadless.bat --dll C:\Windows\System32\version.dll --solution C:\Projects\spartacus-version --verbose --overwrite --external-resources --only "GetFileVersionInfoExW, GetFileVersionInfoExA"

Gera uma base de dados de protótipos de funções a partir de ficheiros *.h existentes, ajudando na geração de funções proxy para aquelas cuja definição o Ghidra não conseguiu extrair.

root@kitploit:~
--mode proxy --action prototypes --path "C:\Program Files (x86)\Windows Kits" --csv C:\data\prototypes.csv --verbose

Lista as exportações da DLL e verifica se cada função tem um protótipo pré-gerado.

root@kitploit:~
--mode proxy --action exports --dll C:\Windows\System32\version.dll --dll C:\Windows\System32\amsi.dll --prototypes ./Assets/prototypes.csv

Assinatura de Ficheiros DLL

O Spartacus agora suporta a geração de certificados auto-assinados (copiando atributos de ficheiros existentes) e a assinatura de ficheiros DLL.

Uso para Assinatura de Ficheiros DLL

Cria um certificado de assinatura, usando propriedades de C:\Windows\System32\version.dll (tem de ser uma DLL assinada).

root@kitploit:~
--mode sign --action generate --pfx "C:\Output\certificate.pfx" --password "Welcome1" --not-before "2022-12-31 00:00:55" --not-after "2026-01-01 00:00:01" --copy-from C:\Windows\System32\version.dll --verbose

Assina uma DLL usando um certificado existente/gerado.

root@kitploit:~
--mode sign --action sign --pfx "C:\Output\certificate.pfx" --password "Welcome1" --path "C:\Input\MyFakeVersion.dll" --algorithm SHA256 --verbose

Deteção de DLL Hijacking

O Spartacus também tem um modo --detect, que tenta identificar proxy de DLL ativo. A lógica por detrás é:

  • Enumerar todos os processos.
  • Para cada processo, carregar as DLLs (módulos) que tem carregadas em memória (assumindo que tens as permissões certas para o fazer).
  • Se encontrares uma DLL com o mesmo nome:
    • Se ambos os ficheiros estiverem num caminho do SO (ex: Windows, System32, Program Files), ignorar.
    • Se apenas um dos ficheiros estiver num caminho do SO e o outro estiver num local escrevível pelo utilizador, sinalizar o ficheiro.

Para usar esta funcionalidade, basta executar o Spartacus com --detect.

Auto-Assinatura de Executáveis/DLLs

O Spartacus suporta o modo --sign que te permite tanto gerar certificados auto-assinados como também assinar DLLs compiladas com eles.

Gera um certificado auto-assinado, copiando o Emissor/Assunto de um ficheiro existente:

root@kitploit:~
--mode sign --action generate --pfx "C:\Output\myCertificate.pfx" --password "Welcome1" --not-before "2023-01-01 00:00:04" --not-after "2025-01-01 00:00:42" --copy-from C:\Windows\System32\version.dll --verbose

E usa esse certificado para assinar o teu ficheiro compilado:

root@kitploit:~
--mode sign --action sign --pfx "C:\Output\myCertificate.pfx" --password "Welcome1" --path "C:\Projects\Spartacus-AMSI\amsi.dll" --algorithm SHA256 --verbose

Argumentos da Linha de Comandos

Para facilitar a tua vida, usa o ficheiro CommandLineGenerator.html.

Contribuições

Quer seja um erro de digitação, um bug ou uma nova funcionalidade, o Spartacus está muito aberto a contribuições desde que concordemos com o seguinte:

  • Concordas com a licença MIT deste projeto.
  • Antes de criares um pull request, cria um issue para que possa ser discutido antes de qualquer trabalho, pois o desenvolvimento interno não é rastreado através do repositório público do GitHub. Caso contrário, corres o risco de ter um pull request rejeitado se, por exemplo, já estivermos a trabalhar na mesma funcionalidade ou similar, ou por qualquer outra razão.

Créditos

  • https://github.com/eronnen/procmon-parser/
  • https://www.redteam.cafe/red-team/dll-sideloading/dll-sideloading-not-by-dllmain
  • https://stmxcsr.com/persistence/com-hijacking.html
  • Ícone do Spartacus é de Helmet icons created by Darius Dan - Flaticon | https://dariusdan.com/
  • https://github.com/Danielku15/SigningServer
Baixar ferramenta
ModoArgumentoDescrição
--modeDefine o modo a usar, um de: dll, proxy, com e detect.
all--verboseAtiva saída detalhada.
all--debugAtiva saída de depuração.
all--external-resourcesPor defeito, o Spartacus usa recursos embutidos para gerar ficheiros de solução VS, etc. Se precisares de modificar os modelos, usa este argumento para fazer o Spartacus carregar todos os ficheiros da pasta ./Assets.
dll, com--procmonLocalização (ficheiro) do SysInternals Process Monitor procmon.exe ou procmon64.exe
dll, com--pmlLocalização (ficheiro) para armazenar o ficheiro de event log do ProcMon. Se o ficheiro existir, será sobrescrito. Quando usado com --existing, indica o ficheiro de event log a ler e não será sobrescrito.
dll, com--pmcDefine um ficheiro ProcMon (PMC) personalizado a usar. Este ficheiro não será modificado e será usado como está.
dll, com--csvLocalização (ficheiro) para armazenar a saída CSV da execução.
dll, proxy--solutionCaminho para o diretório onde serão armazenadas as soluções para as DLLs proxy.
dll, com--existingIndicador para que o Spartacus processe um ficheiro de event log ProcMon existente (PML). Para indicar o ficheiro de event log, usa --pml, útil quando estiveste a executar o ProcMon durante horas ou o usaste no Boot Logging.
dll--allPor defeito, qualquer DLL nos diretórios Windows ou Program Files será ignorada. Usa este argumento para incluir esses diretórios na saída.
proxy--ghidraCaminho para o ficheiro 'analyzeHeadless.bat' do Ghidra. Usado quando queres fazer proxy de funções específicas em vez de apenas DllMain.
proxy--dllCaminho para a DLL que queres fazer proxy, e pode incluir várias instâncias deste argumento. Além disso, pode conter curingas como C:\Windows\System32\*.dll - no entanto, todos os caminhos têm de terminar em *.dll.
proxy, sign--overwriteSe o ficheiro --solution (proxy) ou --pfx (sign) já existir, usa esta flag para o sobrescrever.
proxy--onlyGera funções proxy apenas para as funções definidas nesta variável. Os valores são separados por vírgulas, como 'WTSFreeMemory,WTSFreeMemoryExA,WTSSetUserConfigA'.
proxy--actionA ação predefinida é gerar uma solução VS. --action prototypes recebe como entrada uma pasta do Windows SDK e analisa ficheiros *.h para gerar uma base de dados de protótipos de funções. --action exports exibe as funções de exportação de uma DLL e, quando combinado com --prototypes, mostra se a definição da função foi pré-gerada.
sign--actionAo usar --action com o módulo sign, aceita uma de duas opções: generate para criar um PFX e sign para assinar um ficheiro.
proxy--pathAtualmente funciona apenas com --action prototypes e é a localização de um diretório do Windows SDK.
proxy--prototypesLocalização de prototypes.csv (atualmente na pasta ./Assets).
com--aclEnumera o sistema local para bibliotecas e executáveis COM em falta/mal configurados.
sign--subjectUsado com --action generate para especificar o assunto do certificado.
sign--issuerUsado com --action generate para especificar o emissor do certificado.
sign--copy-fromUsado com --action generate para especificar um ficheiro assinado existente do qual copiar o Emissor e o Assunto.
sign--not-beforeUsado com --action generate para definir a data a partir da qual o novo certificado será válido, formato AAAA-MM-DD HH:MM:SS.
sign--not-afterUsado com --action generate para definir a data até à qual o novo certificado será válido, formato AAAA-MM-DD HH:MM:SS.
sign--pfxQuando usado com --action generate, é onde o ficheiro pfx será guardado. Quando usado com --action sign, é de onde o ficheiro pfx será carregado.
sign--passwordQuando usado com --action generate, define a password para o ficheiro --pfx.
sign--pathQuando usado com --action sign, define a localização do ficheiro executável/DLL a ser assinado.
sign--algorithmQuando usado com --action sign, define o algoritmo de hash que será usado para assinar. Opções: MD5, SHA1, SHA256, SHA384, SHA512.
sign--timestampQuando usado com --action sign, define o Servidor de Timestamp, como http://timestamp.sectigo.com ou http://timestamp.digicert.com.