
Ferramenta de descoberta e análise de interfaces RPC do Windows com enumeração visual de endpoints, parsing de PE, resolução de símbolos, sniffing ETW em tempo real e geração de código cliente em tempo real para auditoria de segurança.
Please read our blog post announcement.
O RPC Investigator (RPCI) é uma aplicação de interface de usuário Windows Forms em .NET/C# que fornece uma interface avançada de descoberta e análise para endpoints RPC do Windows. A ferramenta fornece uma interface visual ao redor das capacidades RPC existentes da plataforma NtApiDotNet, incluindo:
Além desses recursos principais, o RPCI oferece capacidades adicionais:
Existem vários fluxos de trabalho que o RPC Investigator suporta:
Neste exemplo, vamos inspecionar o serviço RPC do Agendador de Tarefas do Windows, que é usado para gerenciar e executar tarefas agendadas. Vamos encontrar o serviço, gerar código cliente e depois personalizar o cliente para interagir com um dos procedimentos expostos.
Primeiro, carregue a lista de serviços do Windows clicando em File -> Load From Service. Isso abre uma nova janela de lista de serviços:

Encontre o serviço Schedule, que é o Agendador de Tarefas do Windows, selecione o serviço e clique em Go.

Você será perguntado antes do RPCI carregar todas as DLLs RPC associadas. Clique em Yes para continuar. Uma vez carregado, você verá uma lista de todos os servidores RPC descobertos em todos os módulos carregados no processo do serviço. O servidor RPC do Agendador de Tarefas do Windows possui um ID de Interface 86D35949-83C9-4044-B424-DB363231FD0C. Encontre a linha na lista que possui esse ID de Interface, que deve ter um serviço em execução chamado Task Scheduler, clique com o botão direito na linha e selecione New Client.

A parte esquerda da janela do cliente mostra metadados do servidor RPC e a saída da linha de comando do código cliente. O lado direito mostra duas guias:
Neste exemplo, vamos chamar o procedimento SchRpcHighestVersion. Este método aceita um único argumento, out int version, que, após a chamada, conterá a versão mais alta do protocolo do Agendador de Tarefas suportada pela interface RPC. Os 16 bits mais altos são a versão principal e os 16 bits mais baixos são a versão secundária.
Para chamar este procedimento:
Na janela Client Code, encontre o método Run, que é o ponto de entrada principal para o cliente RPC.
Edite o corpo do método Run para chamar o procedimento:
public async Task<bool> Run()
{
int version;
int status = SchRpcHighestVersion(out version);
if (status == 0) {
long major = (version & 0xffff0000) >> 16;
long minor = version & 0x0000ffff;
Console.WriteLine("highest supported RPC version: {0}.{1}", major, minor);
} else {
Console.WriteLine("call to SchRpcHighestVersion failed with error: {0:X}", status);
}
return true;
}
Após adicionar este código, execute o cliente clicando no botão Run. Isso compilará o código C# e depois executará o método Run.
Se a compilação for bem-sucedida, você verá algo semelhante ao seguinte na caixa Output:
> Run() output:
highest supported RPC version: 1.6

O RPC Investigator possui várias configurações.
| Configuração | Descrição | Padrão |
|---|---|---|
| dbghelp.dll | Localização do arquivo do módulo dbghelp.dll | Encontrar a versão mais recente dentro dos Windows Kits instalados. |
| Symbol Path | Caminho para símbolos do Windows, que pode ser um servidor de símbolos ou diretório local | Servidor público padrão do Windows: srv*c:\symbols*https://msdl.microsoft.com/download/symbols |
| Trace Level | Nível de log de rastreamento | info |
As configurações podem ser modificadas dentro da aplicação através do menu Edit -> Settings.
Após seu lançamento inicial, o RPC Investigator foi convertido de uma aplicação .NET Framework para uma aplicação .NET 7. Se você encontrar problemas de compilação, certifique-se de que o Visual Studio esteja atualizado. É uma boa ideia limpar todas as pastas de saída de compilação antes de compilar a partir da versão .NET Framework.
Além disso, devido à migração da classe insegura BinaryFormatter para protobuf-net, as bibliotecas RPC geradas com a versão .NET Framework são incompatíveis com a versão .NET.
Se você estiver enfrentando travamentos aleatórios no RPC Investigator, pode encontrar uma solução pedindo ao seu administrador para ajustar seu EDR. Descobrimos que alguns EDRs não se comportam adequadamente com linguagens compiladas em tempo real (JIT).
Em alguns casos, o RPC Investigator é detectado como malicioso por EDRs, incluindo alguns falsos positivos no Virus Total. Este é um problema conhecido. Isso ocorre porque o RPC Investigator contém o NtObjectManager - um pacote criado por James Forshaw que é conhecido por ser detectado (falso positivo) por muitos EDRs, incluindo o Windows Defender.
Como o RPC do Windows tem sido um tópico de pesquisa popular por mais de uma década, há muitos recursos e esforços de pesquisa relacionados para listar aqui. Listamos alguns abaixo que encontramos enquanto construíamos esta ferramenta:
Se você não está familiarizado com os internals do RPC ou precisa de uma atualização técnica, recomendamos uma das fontes autoritativas sobre o assunto - a palestra de Alex Ionescu no SyScan 2014 em Singapura, All about the RPC, LRPC, ALPC, and LPC in your PC.