
ROPfuscator é um framework de ofuscação de código de granulação fina para programas em C/C++ que utiliza ROP (programação orientada a retorno).
ROPfuscator é uma prova de conceito de pesquisa e não se destina ao uso em produção. Os autores não assumem qualquer responsabilidade ou obrigação pelo uso do software. Tenha cautela e use por sua conta e risco.

ROPfuscator é um framework de ofuscação de código de granularidade fina para linguagens suportadas por LLVM, que utiliza ROP (programação orientada a retorno). O ROPfuscator ofusca um programa no nível de código de montagem, transformando instruções regulares em cadeias ROP, frustrando nossa concepção natural de fluxo de controle normal. Ele é implementado como uma extensão do backend x86 do LLVM (10.0.1).
Para build, uso e implementação, consulte os documentos individuais:
Leia o artigo aqui |
|
Este projeto visa fornecer uma versão aprimorada do ROPfuscator com forte foco em reprodutibilidade e facilidade de integração. Fizemos várias melhorias importantes neste repositório, conforme descrito abaixo.
O ROPfuscator agora utiliza o Nix, um poderoso gerenciador de pacotes declarativo que permite builds confiáveis e reproduzíveis. O Nix oferece vários benefícios:
O ROPfuscator fornece um flake Nix que expõe os stdenvs do ROPfuscator e várias funções auxiliares usadas para compilar nativamente derivações Nix, sem aplicar qualquer modificação ao sistema de build do projeto a ser compilado.
O processo de avaliação foi reescrito do zero, aproveitando ao máximo o gerenciador de pacotes Nix. Isso garante uma avaliação mais confiável e transparente, que servirá de base para trabalhos futuros no ROPfuscator.
O ROPfuscator agora pode tentar ofuscar de forma transparente qualquer pacote presente no repositório de pacotes Nix upstream, nixpkgs, sem exigir qualquer modificação. Isso permite que usuários do Nix integrem o ROPfuscator perfeitamente em seus fluxos de trabalho existentes e testem seus recursos.
O ROPfuscator pode ter como alvo um único projeto, ofuscando apenas os arquivos-objeto pertinentes ao próprio projeto, ou pode ofuscar o alvo junto com todas as suas dependências.
Instale o Nix (o gerenciador de pacotes) e certifique-se de que seu daemon esteja em execução.
Os Flakes permitem que você especifique as dependências do seu código de forma declarativa e facilitam a especificação de entradas e saídas para projetos. O ROPfuscator expõe diferentes saídas, portanto, precisamos habilitar o Nix para usar flakes.
Aqui está um processo passo a passo sobre como habilitá-los.
Esta etapa permite aproveitar o repositório de cache do ROPfuscator para evitar recompilar o projeto e todas as suas dependências do zero. Esta etapa é opcional, mas recomendada.
Para habilitar o cache do ROPfuscator, primeiro instale o cachix:
nix-env -iA cachix -f https://cachix.org/api/v1/install
Em seguida, configure o nix.conf para usar o cache binário:
cachix use ropfuscator
A etapa final é compilar o ROPfuscator. Isso pode ser feito executando:
nix build github:ropfuscator/ropfuscator -L
Se você quiser entrar em um shell configurado para usar o ROPfuscator por padrão, basta executar:
nix shell github:ropfuscator/ropfuscator
O ROPfuscator pode ser usado para ofuscar pacotes presentes no repositório Nixpkgs. Atualmente, estamos usando um fork personalizado porque alguns pacotes upstream não foram configurados corretamente para compilação cruzada. Embora já tenhamos enviado alguns dos patches para o upstream, ainda há trabalho a ser feito para uma experiência perfeita.
Para começar, siga os dois primeiros passos listados acima e instale o Nix. Em seguida, copie o flake-example.nix para um diretório, renomeando-o para flake.nix:
mkdir -p ropfuscator-example && cd ropfuscator-example
cp ../flake-example.nix flake.nix
Neste ponto, você pode compilar os dois pacotes definidos no flake: hello e obfuscatedHello.
Para compilar o obfuscatedHello, use:
nix build .#obfuscatedHello -L
Da mesma forma, para compilar o hello, execute:
nix build .#hello -L
Combinamos as seguintes camadas de ofuscação para alcançar uma ofuscação robusta contra diversos ataques.
O ROPfuscator pode ser configurado por meio de arquivos de configuração TOML. Este repositório inclui as seguintes configurações prontas:
Cada configuração pode ser personalizada ainda mais com as opções disponíveis na tabela de configuração no README.