
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.
Certifique-se de ter versões recentes do
apktool,
apksigner
e zipalign instaladas
e disponíveis a partir da linha de comando:```Shell
$ apktool
Apktool v2.9.0 - a tool for reengineering Android apk files
...
```Shell
$ apksigner
Usage: apksigner <command> [options]
apksigner --version
apksigner --help
...
$ zipalign
Zip alignment utility
Copyright (C) 2009 The Android Open Source Project
...
Para suportar a ofuscação de pacotes de aplicativos, você também precisa do
BundleDecompiler, então baixe
a versão mais recente 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 possui a permissão de execução definida.
Para usar o BundleDecompiler e o apktool, você também precisa de uma versão recente do Java.
zipalign e apksigner estão incluídos no Android SDK. A localização dos
executáveis também pode ser especificada através das seguintes variáveis de ambiente:
APKTOOL_PATH, BUNDLE_DECOMPILER_PATH, APKSIGNER_PATH e ZIPALIGN_PATH (por exemplo,
no Ubuntu, execute export APKTOOL_PATH=/custom/location/apktool antes de executar o Obfuscapk
no mesmo terminal).
Além das ferramentas acima, o único requisito deste projeto é uma instalação funcional
do Python 3 (pelo menos 3.7) (junto com seu gerenciador de pacotes pip).
Execute os seguintes comandos no diretório principal do projeto (Obfuscapk/) para
instalar as dependências necessárias:
pip install -r requirements.txt
``````Shell
$ # Make sure to run the commands in Obfuscapk/ directory.
$ # The usage of a virtual environment is highly recommended.
$ python3 -m venv venv
$ source venv/bin/activate
$ # Install Obfuscapk's requirements.
$ python3 -m pip install -r src/requirements.txt
Depois que os requisitos forem instalados, faça um teste rápido para verificar se tudo funciona corretamente:```Shell $ cd src/ $ # The following command has to be executed always from Obfuscapk/src/ directory $ # or by adding Obfuscapk/src/ directory to PYTHONPATH environment variable. $ python3 -m obfuscapk.cli --help usage: python3 -m obfuscapk.cli [-h] -o OBFUSCATOR [-w DIR] [-d OUT_APK_OR_AAB] ...
O Obfuscapk já está pronto para ser utilizado, consulte as [instruções de uso](#-usage) para mais informações.
## ❱ Uso
De agora em diante, o Obfuscapk será considerado como um executável disponível como `obfuscapk`,
então você precisa adaptar os comandos de acordo com como instalou a ferramenta:
* **Imagem Docker**: um diretório local contendo o aplicativo a ser ofuscado deve ser
montado em `/workdir` no contêiner (por exemplo, o diretório atual `"${PWD}"`), então o
comando:
```Shell
$ obfuscapk [params...]
```
torna-se:
```Shell
$ docker run --rm -it -u $(id -u):$(id -g) -v "${PWD}":"/workdir" obfuscapk [params...]
```
* **A partir do código fonte**: todas as instruções devem ser executadas a partir do diretório `Obfuscapk/src/`
(ou adicionando o diretório `Obfuscapk/src/` à variável de ambiente `PYTHONPATH`)
e o comando:
```Shell
$ obfuscapk [params...]
```
torna-se:
```Shell
$ python3 -m obfuscapk.cli [params...]
```
Vamos começar observando a mensagem de ajuda:```Shell
$ obfuscapk --help
obfuscapk [-h] -o OBFUSCATOR [-w DIR] [-d OUT_APK_OR_AAB] [-i] [-p] [-k VT_API_KEY]
[--keystore-file KEYSTORE_FILE] [--keystore-password KEYSTORE_PASSWORD]
[--key-alias KEY_ALIAS] [--key-password KEY_PASSWORD] [--use-aapt2]
<APK_OR_BUNDLE_FILE>
Existem dois parâmetros obrigatórios: <APK_OR_BUNDLE_FILE>, o caminho (relativo ou absoluto) para o arquivo apk ou app bundle a ser ofuscado e a lista com os nomes das técnicas de ofuscação a serem aplicadas (especificada com uma opção -o que pode ser usada várias vezes, por exemplo, -o Rebuild -o NewAlignment -o NewSignature). Os outros argumentos opcionais são os seguintes:
-w DIR é usado para definir o diretório de trabalho onde salvar os arquivos intermediários (gerados pelo apktool). Se não for especificado, um diretório chamado obfuscation_working_dir é criado no mesmo diretório do aplicativo de entrada. Isso pode ser útil para fins de depuração, mas se não for necessário, pode ser definido como um diretório temporário (por exemplo, -w /tmp/).
-d OUT_APK_OR_AAB é usado para definir o caminho do arquivo de destino: o arquivo apk gerado pelo processo de ofuscação (por exemplo, -d /home/user/Desktop/obfuscated.apk ou -d /home/user/Desktop/obfuscated.aab). Se não for especificado, o arquivo ofuscado final será salvo dentro do diretório de trabalho. Nota: os arquivos existentes serão sobrescritos sem qualquer aviso.
-i é uma flag para ignorar bibliotecas de terceiros conhecidas durante o processo de ofuscação, para usar menos recursos, aumentar o desempenho e reduzir o risco de erros. A lista de bibliotecas a ignorar é adaptada do projeto LiteRadar.
-p é uma flag para mostrar barras de progresso durante as operações de ofuscação. Ao usar a ferramenta em operações em lote/construções automáticas, é conveniente ter as barras de progresso desabilitadas; caso contrário, esta flag deve ser ativada para ver o progresso da ofuscação.
Vamos considerar agora um exemplo de trabalho simples para ver como o Obfuscapk funciona:```Shell $ # original.apk is a valid Android apk file. $ obfuscapk -o RandomManifest -o Rebuild -o NewAlignment -o NewSignature original.apk
Ao executar o comando acima, é isso que acontece nos bastidores:
* já que nenhum diretório de trabalho foi especificado, um novo diretório de trabalho
(`obfuscation_working_dir`) é criado no mesmo local que `original.apk` (isso pode
ser útil para inspecionar os arquivos `smali`/manifesto/recursos em caso de erros)
* algumas verificações são realizadas para garantir que todos os arquivos/executáveis necessários estejam
disponíveis e prontos para uso
* o processo real de ofuscação começa: os ofuscadores especificados são executados
(em ordem) um a um até que não haja mais ofuscadores ou até que um erro seja encontrado
- ao executar o primeiro ofuscador, `original.apk` é descompilado com `apktool`
e os resultados são armazenados no diretório de trabalho
- como o primeiro ofuscador é `RandomManifest`, as entradas no manifesto Android
descompilado são reordenadas aleatoriamente (sem quebrar as estruturas `xml`)
- o ofuscador `Rebuild` simplesmente reconstrói a aplicação (agora com o manifesto
modificado) usando `apktool`, e como nenhum arquivo de saída foi especificado, o arquivo
apk resultante é salvo no diretório de trabalho criado anteriormente
- o ofuscador `NewAlignment` usa a ferramenta `zipalign` para alinhar o arquivo apk resultante
- o ofuscador `NewSignature` assina o novo arquivo apk com um certificado personalizado contido em um
[keystore incluído no Obfuscapk](https://github.com/ClaudiuGeorgiu/Obfuscapk/blob/master/src/obfuscapk/resources/obfuscation_keystore.jks)
(embora um keystore diferente possa ser especificado com o parâmetro `--keystore-file`)
* quando todos os ofuscadores foram executados sem erros, o arquivo apk ofuscado
resultante pode ser encontrado em `obfuscation_working_dir/original_obfuscated.apk`, assinado,
alinhado e pronto para ser instalado em um dispositivo/emulador
Como visto no exemplo anterior, os ofuscadores `Rebuild`, `NewAlignment` e `NewSignature`
são sempre necessários para completar uma operação de ofuscação, para construir o apk ofuscado
final. Eles não são técnicas reais de ofuscação, mas são necessários no processo de
construção, por isso são incluídos na lista de ofuscadores para manter a arquitetura geral
modular.
Não está funcionando como esperado? Veja
[FAQ](https://github.com/ClaudiuGeorgiu/Obfuscapk/blob/master/docs/FAQ.md) e
[solução de problemas](https://github.com/ClaudiuGeorgiu/Obfuscapk/blob/master/docs/TROUBLESHOOTING.md).
## ❱ Ofuscadores
Os ofuscadores incluídos no Obfuscapk podem ser divididos em diferentes categorias,
dependendo das operações que realizam:
* **Trivial**: como o nome sugere, esta categoria inclui operações simples (que
não modificam muito a aplicação original), como assinar o arquivo apk com uma nova
assinatura.
* **Renomear**: operações que alteram os nomes dos identificadores usados (classes, campos,
métodos).
* **Criptografia**: empacotar código/recursos criptografados e descriptografá-los durante a execução
do aplicativo. Quando o Obfuscapk inicia, ele gera automaticamente uma chave secreta aleatória (32
caracteres, usando letras e dígitos ASCII) que será usada para criptografia.
* **Código**: todas as operações que envolvem a modificação do código-fonte descompilado.
* **Recursos**: operações nos arquivos de recursos (como modificar o manifesto).
* **Outro**
Os ofuscadores atualmente incluídos no Obfuscapk são apresentados brevemente abaixo (em
ordem alfabética). Consulte o código-fonte do projeto para mais detalhes.
> [!TIP]
> Nem todos os ofuscadores abaixo correspondem a técnicas reais de ofuscação (ex.,
> `Rebuild`, `NewAlignment`, `NewSignature` e `VirusTotal`), mas são implementados
> como ofuscadores para manter a arquitetura modular e fácil de estender com novas
> funcionalidades.
<details><summary><b>AdvancedReflection</b> [Code]</summary>
> Usa reflexão para invocar APIs perigosas do Android Framework. Para descobrir se um
> método pertence ao Android Framework, o Obfuscapk refere-se ao mapeamento descoberto por
> [Backes et al](https://www.usenix.org/system/files/conference/usenixsecurity16/sec16_paper_backes-android.pdf).
> [:page_facing_up: Código-fonte do AdvancedReflection](https://github.com/ClaudiuGeorgiu/Obfuscapk/tree/master/src/obfuscapk/obfuscators/advanced_reflection)
</details>
<details><summary><b>ArithmeticBranch</b> [Code]</summary>
> Insere código lixo. Neste caso, o código lixo é composto por computações aritméticas
> e uma instrução de desvio dependendo do resultado dessas computações, criada de
> forma que o desvio nunca seja tomado.
> [:page_facing_up: Código-fonte do ArithmeticBranch](https://github.com/ClaudiuGeorgiu/Obfuscapk/tree/master/src/obfuscapk/obfuscators/arithmetic_branch)
</details>
<details><summary><b>AssetEncryption</b> [Encryption]</summary>
> Criptografar arquivos de assets.
> [:page_facing_up: Código-fonte do AssetEncryption](https://github.com/ClaudiuGeorgiu/Obfuscapk/tree/master/src/obfuscapk/obfuscators/asset_encryption)
</details>
<details><summary><b>CallIndirection</b> [Code]</summary>
> Esta técnica modifica o grafo de fluxo de controle sem impactar a semântica do código:
> ela adiciona novos métodos que invocam os originais. Por exemplo, uma invocação ao
> método *m1* será substituída por um novo método wrapper *m2*, que, quando invocado,
> chama o método original *m1*.
> [:page_facing_up: Código-fonte do CallIndirection](https://github.com/ClaudiuGeorgiu/Obfuscapk/tree/master/src/obfuscapk/obfuscators/call_indirection)
</details>
<details><summary><b>ClassRename</b> [Rename]</summary>
> Alterar o nome do pacote e renomear classes (mesmo no arquivo de manifesto).
> [:page_facing_up: Código-fonte do ClassRename](https://github.com/ClaudiuGeorgiu/Obfuscapk/tree/master/src/obfuscapk/obfuscators/class_rename)
</details>
<details><summary><b>ConstStringEncryption</b> [Encryption]</summary>
> Criptografar strings constantes no código.
> [:page_facing_up: Código-fonte do ConstStringEncryption](https://github.com/ClaudiuGeorgiu/Obfuscapk/tree/master/src/obfuscapk/obfuscators/const_string_encryption)
</details>
<details><summary><b>DebugRemoval</b> [Code]</summary>
> Remover informações de depuração.
> [:page_facing_up: Código-fonte do DebugRemoval](https://github.com/ClaudiuGeorgiu/Obfuscapk/tree/master/src/obfuscapk/obfuscators/debug_removal)
</details>
<details><summary><b>FieldRename</b> [Rename]</summary>
> Renomear campos.
> [:page_facing_up: Código-fonte do FieldRename](https://github.com/ClaudiuGeorgiu/Obfuscapk/tree/master/src/obfuscapk/obfuscators/field_rename)
</details>
<details><summary><b>Goto</b> [Code]</summary>
> Dado um método, insere uma instrução `goto` apontando para o final do método e
> outra `goto` apontando para a instrução após o primeiro `goto`; modifica o
> grafo de fluxo de controle adicionando dois novos nós.
> [:page_facing_up: Código-fonte do Goto](https://github.com/ClaudiuGeorgiu/Obfuscapk/tree/master/src/obfuscapk/obfuscators/goto)
</details>
<details><summary><b>LibEncryption</b> [Encryption]</summary>
> Criptografar bibliotecas nativas.
> [:page_facing_up: Código-fonte do LibEncryption](https://github.com/ClaudiuGeorgiu/Obfuscapk/tree/master/src/obfuscapk/obfuscators/lib_encryption)
</details>
<details><summary><b>MethodOverload</b> [Code]</summary>
> Explora o recurso de sobrecarga da linguagem de programação Java para atribuir o
> mesmo nome a métodos diferentes, mas usando argumentos diferentes. Dado um método
> já existente, esta técnica cria um novo método void com o mesmo nome e argumentos,
> mas também adiciona novos argumentos aleatórios. Então, o corpo do novo método
> é preenchido com instruções aritméticas aleatórias.
> [:page_facing_up: Código-fonte do MethodOverload](https://github.com/ClaudiuGeorgiu/Obfuscapk/tree/master/src/obfuscapk/obfuscators/method_overload)
</details>
<details><summary><b>MethodRename</b> [Rename]</summary>
> Renomear métodos.
> [:page_facing_up: Código-fonte do MethodRename](https://github.com/ClaudiuGeorgiu/Obfuscapk/tree/master/src/obfuscapk/obfuscators/method_rename)
</details>
<details><summary><b>NewAlignment</b> [Trivial]</summary>
> Realinhar a aplicação.
> [:page_facing_up: Código-fonte do NewAlignment](https://github.com/ClaudiuGeorgiu/Obfuscapk/tree/master/src/obfuscapk/obfuscators/new_alignment)
</details>
<details><summary><b>NewSignature</b> [Trivial]</summary>
> Reassinar a aplicação com uma nova assinatura personalizada.
> [:page_facing_up: Código-fonte do NewSignature](https://github.com/ClaudiuGeorgiu/Obfuscapk/tree/master/src/obfuscapk/obfuscators/new_signature)
</details>
<details><summary><b>Nop</b> [Code]</summary>
> Insere código lixo. Nop, abreviação de *no-operation*, é uma instrução dedicada que não
> faz nada. Esta técnica apenas insere instruções `nop` aleatórias dentro de cada implementação
> de método.
> [:page_facing_up: Código-fonte do Nop](https://github.com/ClaudiuGeorgiu/Obfuscapk/tree/master/src/obfuscapk/obfuscators/nop)
</details>
<details><summary><b>RandomManifest</b> [Resource]</summary>
> Reordenar aleatoriamente as entradas no arquivo de manifesto.
> [:page_facing_up: Código-fonte do RandomManifest](https://github.com/ClaudiuGeorgiu/Obfuscapk/tree/master/src/obfuscapk/obfuscators/random_manifest)
</details>
<details><summary><b>Rebuild</b> [Trivial]</summary>
> Reconstruir a aplicação.
> [:page_facing_up: Código-fonte do Rebuild](https://github.com/ClaudiuGeorgiu/Obfuscapk/tree/master/src/obfuscapk/obfuscators/rebuild)
</details>
<details><summary><b>Reflection</b> [Code]</summary>
> Esta técnica analisa o código existente em busca de invocações de métodos do aplicativo,
> ignorando as chamadas ao framework Android (veja `AdvancedReflection`). Se encontrar
> uma instrução com uma invocação de método adequada (ou seja, sem métodos construtores,
> visibilidade pública, registradores livres suficientes, etc.), tal invocação é redirecionada para
> um método personalizado que invocará o método original usando as APIs de Reflexão.
> [:page_facing_up: Código-fonte do Reflection](https://github.com/ClaudiuGeorgiu/Obfuscapk/tree/master/src/obfuscapk/obfuscators/reflection)
</details>
<details><summary><b>Reorder</b> [Code]</summary>
> Esta técnica consiste em alterar a ordem dos blocos básicos no código. Quando uma
> instrução de desvio é encontrada, a condição é invertida (ex., *branch if lower than*,
> torna-se *branch if greater or equal than*) e os blocos básicos de destino são reordenados
> de acordo. Além disso, também reorganiza aleatoriamente o código abusando de instruções
> `goto`.
> [:page_facing_up: Código-fonte do Reorder](https://github.com/ClaudiuGeorgiu/Obfuscapk/tree/master/src/obfuscapk/obfuscators/reorder)
</details>
<details><summary><b>ResStringEncryption</b> [Encryption]</summary>
> Criptografar strings em recursos (apenas aquelas chamadas dentro do código).
> [:page_facing_up: Código-fonte do ResStringEncryption](https://github.com/ClaudiuGeorgiu/Obfuscapk/tree/master/src/obfuscapk/obfuscators/res_string_encryption)
</details>
<details><summary><b>VirusTotal</b> [Other]</summary>
> Enviar a aplicação original e a ofuscada para o Virus Total. Você deve fornecer
> a chave da API do VT (veja a opção `-k`).
> [:page_facing_up: Código-fonte do VirusTotal](https://github.com/ClaudiuGeorgiu/Obfuscapk/tree/master/src/obfuscapk/obfuscators/virus_total)
</details>
## ❱ Licença
Você é livre para usar este código sob a
[Licença MIT](https://github.com/ClaudiuGeorgiu/Obfuscapk/blob/master/LICENSE).
## ❱ Créditos
[](https://unige.it/en/)
[](https://www.dibris.unige.it/en/)
Este software foi desenvolvido para fins de pesquisa no Laboratório de Segurança de Computadores
([CSecLab](https://csec.it/)), hospedado no DIBRIS, Universidade de Gênova.
## ❱ Equipe
* [Simone Aonzo](https://simoneaonzo.it/) - Assistente de Pesquisa
* [Gabriel Claudiu Georgiu](https://github.com/ClaudiuGeorgiu) - Desenvolvedor Principal
* [Luca Verderame](https://csec.it/people/luca_verderame/) - Pesquisador Pós-Doutorado
* [Alessio Merlo](https://csec.it/people/alessio_merlo/) - Membro do Corpo Docente
-k VT_API_KEY é necessário apenas ao usar o ofuscador VirusTotal, para definir a chave de API a ser usada ao se comunicar com o Virus Total.
--keystore-file KEYSTORE_FILE, --keystore-password KEYSTORE_PASSWORD, --key-alias KEY_ALIAS e --key-password KEY_PASSWORD podem ser usados para especificar um keystore personalizado (necessário para a assinatura do apk). Se --keystore-file for usado, --keystore-password e --key-alias também devem ser especificados, enquanto --key-password é necessário apenas se a chave escolhida tiver uma senha diferente da senha do keystore. Por padrão (quando --keystore-file não é especificado), um keystore incluído com o Obfuscapk é usado para as operações de assinatura.
--ignore-packages-file IGNORE_PACKAGES_FILE é um caminho para um arquivo que contém nomes de pacotes a serem ignorados. Todas as classes dentro desses pacotes não serão ofuscadas quando esta opção for usada. O arquivo deve ter um nome de pacote por linha, conforme mostrado no exemplo abaixo:
com.mycompany.dontobfuscate
com.mycompany.ignore
...
--use-aapt2 é uma flag para usar a opção aapt2 ao reconstruir um aplicativo com apktool.