Este repositório hospeda a ferramenta FlowDroid Data Flow Analysis. O FlowDroid calcula estaticamente os fluxos de dados em aplicativos Android e programas Java. Seu objetivo é fornecer aos pesquisadores e profissionais uma ferramenta e biblioteca na qual possam basear seus próprios projetos de pesquisa e implementações de produtos. Estamos felizes em ver que o FlowDroid agora é amplamente utilizado na academia e na indústria.
Você pode criar o FlowDroid por conta própria usando o Maven, ou pode baixar um lançamento daqui no Github.
O FlowDroid agora pode ser encontrado no Maven Central. Para usar o FlowDroid em sua compilação Maven, inclua o seguinte no seu arquivo pom.xml . Recomendamos usar a versão mais recente e melhor, a menos que você tenha um problema específico que impeça que você o faça. Nesse caso, informe -nos (consulte o contato abaixo).
<dependencies>
<dependency>
<groupId>de.fraunhofer.sit.sse.flowdroid</groupId>
<artifactId>soot-infoflow</artifactId>
<version>2.12.0</version>
</dependency>
<dependency>
<groupId>de.fraunhofer.sit.sse.flowdroid</groupId>
<artifactId>soot-infoflow-summaries</artifactId>
<version>2.12.0</version>
</dependency>
<dependency>
<groupId>de.fraunhofer.sit.sse.flowdroid</groupId>
<artifactId>soot-infoflow-android</artifactId>
<version>2.12.0</version>
</dependency>
</dependencies>
Para um início rápido com o FlowDroid, consulte "Usando o rastreador de fluxo de dados" abaixo. Se você deseja usar apenas a ferramenta de linha de comando, tudo o que você precisa é o arquivo "fuligem-infoflow-cmd-jar-with-dependencies.jar".
A página de lançamento contém todos os arquivos JAR pré-construídos para cada lançamento que publicamos oficialmente. Recomendamos usar a versão mais recente e melhor, a menos que você tenha um problema específico que impeça que você o faça. Nesse caso, informe -nos (consulte o contato abaixo).
Para um início rápido com o FlowDroid, consulte "Usando o rastreador de fluxo de dados" abaixo. Se você deseja usar apenas a ferramenta de linha de comando, tudo o que você precisa é o arquivo "fuligem-infoflow-cmd-jar-with-dependencies.jar".
Requisitos:
Na primeira vez, o FlowDroid precisa ser construído a partir do módulo pai, ou seja, a pasta raiz do projeto. A suíte de teste completa leva cerca de 30 minutos, por isso recomendamos desativar os testes ao criar:
mvn install -DskipTestsPara executar a construção com testes ativados, são necessárias algumas etapas adicionais:
rt.jar deve estar no local padrão (alternativamente, coloque o rt.jar dentro de $JAVA_HOME/lib/ )--recursive )ANDROID_JARS deve ser definida como o diretório de plataformas Android (normalmente $HOME/Android/Sdk/platforms/ )Trabalhamos no FlowDroid usando o Eclipse IDE. Todos os módulos são projetos Eclipse e podem ser importados para o Eclipse IDE. Eles aparecerão como projetos maven lá e o Eclipse deve cuidar do download de todas as dependências necessárias para você.
Você pode usar o FlowDroid através de sua interface de linha de comando (módulo Soot-InfOflow-CMD) ou como uma biblioteca. Em geral, se você deseja implementar algo e precisar de um rastreador de fluxo de dados como componente, é melhor integrar os módulos FlowDroid como arquivos JAR. Se você precisar apenas dos resultados rapidamente, basta executar a interface da linha de comando.
O FlowDroid é suportado no Windows, Mac OS e Linux.
Se você deseja usar a ferramenta de linha de comando para executar o rastreador de fluxo de dados, você pode usar o seguinte comando:
java -jar soot-infoflow-cmd/target/soot-infoflow-cmd-jar-with-dependencies.jar
-a <APK File>
-p <Android JAR folder>
-s <SourcesSinks file>
A pasta Android Jar é o diretório "plataformas" dentro da pasta de instalação do Android SDK. O arquivo de definição para fontes e coletores define o que deve ser tratado como uma fonte de informações confidenciais e o que deve ser tratado como um coletor que pode vazar dados sensíveis ao mundo externo. Essas definições são específicas para o seu caso de uso. No entanto, se você estiver procurando por problemas de privacidade, poderá usar nossa pasta "fontes e sinks.txt" na pasta "fuligem-infoflow-android" como ponto de partida.
Para descobrir as outras opções da ferramenta de linha de comando, você pode executar a ferramenta com a opção "--help" ou dar uma olhada no método mainClass.initializeCommandLineOptions () "no código-fonte (módulo Soot-Infoflow-CMD).
Para alguns aplicativos, o FlowDroid levará muito tempo para aplicativos grandes. Existem várias opções com as quais você pode configurar uma troca entre desempenho, precisão e recall.
-ns não rastreiam as manchas nos campos estáticos e desconsideram os inicializadores estáticos.-ne não rastreiam fluxos excepcionais.Você também pode definir tempo limite:
-dt N aborta a análise do fluxo de dados após n segundos e retorna os resultados obtidos até agora.-ct N aborta a coleção de retorno de chamada durante a construção de callgraph após n segundos e continua com o callgraph (incompleto) construído até agora.-rt N aborta a coleta de resultados após n segundos e retorna os resultados obtidos até agora.Observe que os tempos limite são aditivos. Todas as três etapas devem concluir ou atingir um tempo limite para a ferramenta retornar e fornecer resultados.
Se você deseja incluir o FlowDroid como uma biblioteca em sua própria solução, poderá fazer referência diretamente aos respectivos arquivos JAR. Se você usar o MAVEN, poderá adicionar o FlowDroid como referência e ter o MAVEN resolver todos os componentes necessários. Dependendo do que você deseja analisar (aplicativos Android ou programas Java), suas dependências podem variar.
Nesta seção, coletaremos trechos de código e configuração para tarefas comuns com o FlowDroid.
Para executar uma análise simples de fluxo de dados, você pode usar o seguinte código. Você precisa substituir o espaço reservado androidJarFolder pelo local do diretório platforms em sua instalação do Android SDK. O espaço reservado apkPath refere -se ao caminho completo do arquivo do arquivo APK. Os resultados do fluxo de dados são acessíveis através da classe InfoflowResults .
SetupApplication app = new SetupApplication(androidJarFolder, apkPath);
app.setTaintWrapper(new SummaryTaintWrapper(new LazySummaryProvider("summariesManual")));
InfoflowResults results = app.runInfoflow();
A análise do fluxo de dados usa os resumos padrão da biblioteca de stubdroid. Na configuração padrão, esses resumos são armazenados na pasta summariesManual e não há necessidade de alterar isso.
Se você quiser ler os detalhes sobre como o FlowDroid funciona, a tese de doutorado de Steven Arzt é um bom lugar para começar.
As contribuições são sempre bem -vindas. O FlowDroid é um projeto de código aberto que publicamos na esperança de que seja útil para a comunidade de pesquisa como um todo. Se você tiver um novo recurso ou uma correção de bug que gostaria de ver no repositório oficial de código, abra uma solicitação de mesclagem aqui no Github e entre em contato conosco (veja abaixo) com uma breve descrição do que você fez.
O FlowDroid é licenciado sob a licença LGPL, consulte o arquivo de licença. Isso basicamente significa que você é livre para usar a ferramenta (mesmo em projetos comerciais de fonte fechada). No entanto, se você estender ou modificar a ferramenta, também deve disponibilizar suas alterações no LGPL. Isso garante que possamos continuar a melhorar a ferramenta como um esforço da comunidade.
Se você tiver algum problema, poderá pedir ajuda na lista de discussão da fuligem. Você também pode entrar em contato conosco em [email protected].