O TIMO é uma estrutura de deobfuscation híbrida para aplicativos Android. Seu nome representa as quatro etapas: Target , Instrument , Run e Observe . A abordagem do TIRO usa a idéia de execução direcionada (consulte nossa ferramenta anterior, IntelliDroid) para identificar estaticamente os locais de possível ofuscação e determinar as entradas para acionar esses locais de código. Ao instrumentar esses locais e executá-los usando as informações de segmentação, as informações de descontagem em tempo de execução podem ser coletadas e transmitidas de volta à análise estática para desviar o aplicativo e obter resultados de análise mais completos.
Para mais detalhes, consulte nosso artigo, publicado no USENIX Security 2018.
Atualmente, o código deste repositório contém o código base da etapa Target e é principalmente um componente estático do porto do Intellidroid na estrutura da fuligem. Planejamos lançar código para os outros passos do Tiro no futuro.
A análise estática do TIRO é composta pelas etapas Target e Instrument . Na etapa Target , os locais da ofuscação são identificados e os caminhos de chamada para esses locais são extraídos. Para cada caminho, o Tiro reúne restrições que determinam as entradas que devem ser injetadas para acionar o caminho dinamicamente. Atualmente, usamos o solucionador de restrição Z3 e convertimos restrições nos formatos Z3-PY e Z3-Java.
O componente de análise estática requer Java 8 (JDK 1.8).
Este repositório contém uma dependência do repositório android-platforms , que contém as bibliotecas da estrutura do Android usadas por aplicativos. Essa dependência é um submódulo dentro do projeto. Para clonar Tiro com o submódulo, execute:
git clone --recursive [email protected]:miwong/tiro.git
Como alternativa, se você já clonou Tiro sem o submódulo, execute:
git submodule update --init --recursive
Isso leva alguns minutos, pois as bibliotecas da estrutura do Android são grandes.
Este projeto usa o sistema de construção gradle. Os arquivos de saída estão localizados no diretório build/ . O Script Gradlew é um invólucro para máquinas que não têm o Gradle já instalado. Se a sua máquina de desenvolvimento já contiver o Gradle, você poderá usar sua própria instalação substituindo ./gradlew pelo gradle nos comandos abaixo. Uma conexão de rede é necessária ao compilar o código pela primeira vez, para que o Gradle possa baixar automaticamente as dependências.
Para construir:
./gradlew build
Para construir e correr:
./TIROStaticAnalysis <APK>
Por padrão, o TIMO escreve os resultados da análise estática no diretório tiroOutput . As opções -o permitem que isso seja alterado. Para ver outras opções de linha de comando, execute:
./TIROStaticAnalysis --help
Atualmente, a saída de análise estática do TIRO (ou seja, appInfo.json ) não é compatível com o IntelliDroid. Ao liberarmos o componente dinâmico do TIRO, também atualizaremos o cliente dinâmico usado no IntelliDroid, para que a extração de restrição do Tiro possa ser integrada à análise dinâmica.
O Tiro é construído na estrutura de análise estática da fuligem. Várias modificações foram feitas na geração de chamadas da Soot para aprimorar o gráfico de chamada com arestas representando o fluxo de execução específico do Android (por exemplo, intenções). As modificações são publicadas em um repositório separado aqui.
Como os aplicativos Android são orientados a eventos, os pontos de entrada em um aplicativo devem ser calculados para obter uma análise completa. O Tiro usa a descoberta de ponto de entrada implementada no FlowDroid. Modificações menores foram feitas nesse código de ponto de entrada para extrair informações exigidas pela análise do TIRO; Essas alterações são armazenadas em static/src/soot/ e static/src/tiro/target/entrypoint/ .
Os seguintes contribuíram com o código para Tiro:
Tiro foi desenvolvido como um projeto de doutorado por Michelle Wong na Universidade de Toronto. Para quaisquer consultas, entre em contato com Michelle em [email protected].
O TIRO é liberado sob a licença pública geral da GNU, a versão 2.1.