
Uma ferramenta automática de ofuscação para aplicativos Android que funciona de forma black-box, suporta recursos avançados de ofuscação e possui uma arquitetura modular facilmente extensível com novas técnicas.
[!IMPORTANT] Este projeto está arquivado e não é mais mantido.
Algumas das perguntas mais comuns são respondidas no FAQ e no guia de solução de problemas.

Uma ferramenta de ofuscação de caixa-preta para aplicativos Android.
Obfuscapk é uma ferramenta Python modular para ofuscar aplicativos Android sem precisar
do código-fonte, já que o apktool é usado
para descompilar o arquivo apk original e construir um novo aplicativo, após aplicar algumas
técnicas de ofuscação no código smali descompilado, nos recursos e no manifesto. O
aplicativo ofuscado mantém a mesma funcionalidade do original, mas as diferenças
internas às vezes tornam o novo aplicativo muito diferente do original
(por exemplo, para softwares antivírus baseados em assinatura).
O Obfuscapk está adicionando suporte para
Android App Bundles (arquivos aab)
utilizando o BundleDecompiler (veja
#121). Para usar esta nova
funcionalidade, baixe a versão mais recente do BundleDecompiler disponível
aqui,
salve-o como BundleDecompiler.jar em um diretório incluído no PATH (por exemplo, no Ubuntu,
/usr/local/bin ou /usr/bin) e certifique-se de que tenha a flag executável ativada.
[!IMPORTANT] O BundleDecompiler ainda não funciona no Windows, portanto a ofuscação de app bundles não é suportada pelo Obfuscapk na plataforma Windows. Além disso, o suporte a app bundles ainda está em desenvolvimento inicial, então se você encontrar problemas ou quiser nos ajudar a melhorar, consulte contributing.
Mais detalhes sobre o Obfuscapk podem ser encontrados no artigo "Obfuscapk: An open-source black-box obfuscation tool for Android apps". Você pode citar o artigo da seguinte forma:```BibTeX @article{aonzo2020obfuscapk, title = "Obfuscapk: An open-source black-box obfuscation tool for Android apps", journal = "SoftwareX", volume = "11", pages = "100403", year = "2020", issn = "2352-7110", doi = "https://doi.org/10.1016/j.softx.2020.100403", url = "https://www.sciencedirect.com/science/article/pii/S2352711019302791", author = "Simone Aonzo and Gabriel Claudiu Georgiu and Luca Verderame and Alessio Merlo", keywords = "Android, Obfuscation, Program analysis" }
## ❱ Demonstração

## ❱ Arquitetura

O Obfuscapk foi projetado para ser modular e fácil de estender, por isso é construído usando um
[sistema de plugins](https://github.com/tibonihoo/yapsy). Consequentemente, cada ofuscador é
um plugin que herda de uma
[classe base](https://github.com/ClaudiuGeorgiu/Obfuscapk/blob/master/src/obfuscapk/obfuscator_category.py)
abstrata e precisa implementar o método `obfuscate`. Quando a ferramenta começa a processar um novo
arquivo de aplicação Android, ela cria um
[objeto de ofuscação](https://github.com/ClaudiuGeorgiu/Obfuscapk/blob/master/src/obfuscapk/obfuscation.py)
para armazenar todas as informações necessárias (por exemplo, a localização do código `smali` descompilado)
e o estado interno das operações (por exemplo, a lista de ofuscadores já utilizados).
Em seguida, o objeto de ofuscação é passado, como parâmetro para o método `obfuscate`, para todos
os plugins/ofuscadores ativos (em sequência) para ser processado e modificado. A lista e
a ordem dos plugins ativos é especificada através de [opções de linha de comando](#-usage).
A ferramenta é facilmente extensível com novos ofuscadores: basta adicionar o código
fonte implementando a técnica de ofuscação e os metadados do plugin (um
arquivo `<obfuscator-name>.obfuscator`) no
diretório
[`src/obfuscapk/obfuscators`](https://github.com/ClaudiuGeorgiu/Obfuscapk/tree/master/src/obfuscapk/obfuscators)
(pegue um ofuscador simples existente como
[`Nop`](https://github.com/ClaudiuGeorgiu/Obfuscapk/blob/master/src/obfuscapk/obfuscators/nop/nop.py)
como exemplo inicial). A ferramenta detectará automaticamente o novo plugin, portanto,
nenhuma configuração adicional é necessária (o novo plugin será tratado como todos os outros
plugins fornecidos com a ferramenta).
## ❱ Instalação
Existem duas maneiras de obter uma cópia funcional do Obfuscapk no seu computador: ou
[usando Docker](#docker-image) ou [usando diretamente o código fonte](#from-source)
em um ambiente `Python 3`. Em ambos os casos, a primeira coisa a fazer é obter uma cópia
local deste repositório, então abra um terminal no diretório onde deseja salvar
o projeto e clone o repositório:```Shell
$ git clone https://github.com/ClaudiuGeorgiu/Obfuscapk.git
Esta é a forma sugerida de instalar o Obfuscapk, já que o único requisito é ter uma versão recente do Docker instalada:```Shell $ docker --version Docker version 20.10.21, build baeda1f
#### Imagem oficial do Docker Hub
A [imagem oficial do Docker Obfuscapk](https://hub.docker.com/r/claudiugeorgiu/obfuscapk) está disponível no Docker Hub (construída automaticamente a partir deste repositório):```Shell
$ # Download the Docker image.
$ docker pull claudiugeorgiu/obfuscapk
$ # Give it a shorter name.
$ docker tag claudiugeorgiu/obfuscapk obfuscapk
Se você baixou a imagem oficial do Docker Hub, já está pronto para usar a ferramenta, então vá em frente e consulte as instruções de uso, caso contrário, execute o seguinte comando no diretório Obfuscapk/src/ criado anteriormente (a pasta que contém o Dockerfile) para construir a imagem Docker:```Shell
$ # Make sure to run the command in Obfuscapk/src/ directory.
$ # It will take some time to download and install all the dependencies.
$ docker build -t obfuscapk .
Quando a imagem Docker estiver pronta, faça um teste rápido para verificar se tudo foi instalado corretamente:```Shell
$ docker run --rm -it obfuscapk --help
usage: python3 -m obfuscapk.cli [-h] -o OBFUSCATOR [-w DIR] [-d OUT_APK_OR_AAB]
...
O Obfuscapk está agora pronto para ser usado, veja as instruções de uso para mais informações.