
.NET/PowerShell/VBA Ofuscador de Segurança Ofensiva
[!CAUTION] Este repositório não é mantido, visite https://github.com/sadreck/Codecepticon para a versão mais recente.
Codecepticon é uma aplicação .NET que permite ofuscar código-fonte C#, VBA/VB6 (macros) e PowerShell, desenvolvida para operações ofensivas de segurança, como Red/Purple Teams. O que diferencia o Codecepticon de outros ofuscadores é que ele ataca o código-fonte, e não os executáveis compilados, e foi desenvolvido especificamente para evasão de AV/EDR.
O Codecepticon permite ofuscar e reescrever código, mas também oferece funcionalidades como a reescrita da linha de comando.
! Antes de começarmos !
Esta documentação aborda apenas a instalação e o uso do Codecepticon. Não serão fornecidos suporte, compilação ou uso de ferramentas como Rubeus e SharpHound. Consulte o repositório de cada projeto separadamente para mais informações.
O Codecepticon é ativamente desenvolvido/testado no VS2022, mas deveria funcionar também no VS2019. Quaisquer tickets/problemas abertos para VS2019 e versões anteriores não serão investigados a menos que o problema seja reproduzível no VS2022. Portanto, use a versão mais recente do VS2022.
Os seguintes pacotes DEVEM estar na versão 3.9.0, pois versões mais novas possuem o seguinte problema ainda aberto: https://github.com/dotnet/roslyn/issues/58463
O Codecepticon verifica a versão desses pacotes em tempo de execução e informará se a versão for diferente da 3.9.0.
Não é demais reforçar: sempre teste seu código ofuscado localmente primeiro.


Abra o Codecepticon, aguarde o download de todos os pacotes NuGet e então compile a solução.
Há duas maneiras de usar o Codecepticon: inserindo todos os argumentos na linha de comando ou passando um único arquivo de configuração XML. Devido ao alto nível de personalizações suportadas, não é recomendado percorrer manualmente a saída --help para tentar descobrir quais parâmetros usar e como. Use o CommandLineGenerator.html e gere seu comando rapidamente:

O formato de saída do gerador de comandos pode ser Console ou XML, dependendo da sua preferência. Comandos no console podem ser executados como:
Codecepticon.exe --action obfuscate --module csharp --verbose ...etc
Enquanto usando um arquivo de configuração XML, como:
Codecepticon.exe --config C:\Your\Path\To\The\File.xml
Se você quiser se aprofundar na funcionalidade do Codecepticon, confira este documento.
Para dicas que você pode usar, confira este documento.
Ofuscar um projeto C# é simples: basta selecionar a solução que deseja segmentar. Observe que não será feito um backup da solução; a atual será a que será ofuscada. Certifique-se de que consegue compilar o projeto alvo de forma independente antes de tentar executar o Codecepticon contra ele.
A ofuscação VBA funciona sobre o código-fonte em si, não sobre um documento do Microsoft Office. Isso significa que você não pode passar um arquivo doc(x) ou xls(x) para o Codecepticon. Será necessário usar o código-fonte do módulo em si (pressione Alt-F11 e copie o código de lá).
Devido à complexidade dos scripts PowerShell, juntamente com a liberdade que ele oferece na forma de escrever scripts, é desafiador cobrir todos os casos extremos e garantir que o resultado ofuscado seja totalmente funcional. Embora se espere que o Codecepticon funcione bem com scripts/funcionalidades simples, executá-lo em scripts complexos como o PowerView não funcionará — isso é um trabalho em andamento.
Após ofuscar uma aplicação ou script, é muito provável que os argumentos de linha de comando também tenham sido renomeados. A solução é usar o arquivo de mapeamento HTML para descobrir quais são os novos nomes. Por exemplo, vamos converter a seguinte linha de comando:
SharpHound.exe --CollectionMethods DCOnly --OutputDirectory C:\temp\
Ao pesquisar no arquivo de mapeamento HTML por cada argumento, obtemos:



E substituindo todas as strings, o resultado é:
ObfuscatedSharpHound.exe --AphylesPiansAsp TurthsTance --AnineWondon C:\temp\
No entanto, alguns valores podem existir em mais de uma categoria:

Portanto, é fundamental testar sempre o resultado em um ambiente local primeiro.
Também é possível usar o Codecepticon para assinar digitalmente arquivos executáveis (sua saída compilada). O Codecepticon pode tanto gerar um certificado de assinatura para você, quanto usá-lo (ou qualquer outro que você fornecer) para assinar seu arquivo alvo.
A saída compilada inclui muitas DLLs de dependência que, devido a requisitos de licenciamento, não podem ser redistribuídas sem consentimento por escrito.
Não, o Codecepticon deve funcionar com tudo. Os perfis são apenas alguns ajustes extras feitos no projeto alvo para torná-lo mais confiável e fácil de trabalhar.
Mas como todo código é único, haverá casos em que ofuscar um projeto resultará em um ou dois erros que impedirão sua compilação ou execução. Nesse caso, um novo perfil pode ser necessário — por favor, abra uma nova issue se for o caso.
O mesmo princípio se aplica a código PowerShell/VBA — embora atualmente não existam perfis que acompanhem o Codecepticon, é uma tarefa fácil adicioná-los se necessário.
Para relatar bugs e sugerir novos recursos, por favor, crie uma issue.
Para enviar pull requests, veja a seção Contribuições.
Antes de executar o Codecepticon, certifique-se de que consegue compilar uma versão limpa do projeto alvo. Muitas vezes, quando esse problema aparece, é devido a dependências ausentes da solução alvo, e não ao Codecepticon. Mas se ainda assim não compilar:
Farei o meu melhor, mas como scripts PowerShell podem ser MUITO complexos e o PSParser não é tão avançado quanto o Roslyn para C#, não posso prometer nada. O mesmo se aplica para VBA/VB6.
Você pode em algum momento encontrar o seguinte erro:

Ainda estou tentando descobrir a causa raiz. Uma correção rápida é desinstalar e reinstalar o pacote System.Collections.Immutable pelo Gerenciador de Pacotes NuGet.
Seja um erro de digitação, um bug ou um novo recurso, o Codecepticon está muito aberto a contribuições, desde que concordemos com o seguinte: