
Framework de instrumentação de código aberto para aplicativos Android e middleware Java, modificando código durante a compilação no dispositivo através do compilador ART. Preserva assinaturas de aplicativos e permite análise de segurança baseada em módulos.
ARTist é um framework flexível de instrumentação de código aberto para aplicativos Android e middleware Java. Ele é baseado no compilador do Android Runtime (ART) e modifica o código durante a compilação no dispositivo. Em contraste com frameworks de instrumentação existentes, ele preserva a assinatura original do aplicativo e opera no nível de instrução.
Este repositório representa o núcleo do ecossistema ARTist, a implementação real do framework de instrumentação. Ele é integrado ao projeto Android Runtime (ART) da AOSP para criar uma versão especializada do compilador dex2oat no dispositivo e fornece aos desenvolvedores uma API de Módulos que dá controle total sobre o código-fonte Java completo do alvo, fornecido na representação intermediária do compilador. O ARTist permite que usuários finais utilizem Módulos já disponíveis, desenvolvedores criem suas próprias instrumentações para aplicativos e o sistema Android, e pesquisadores analisem e estendam o comportamento de aplicativos e do sistema.
O ARTist pode ser implantado de duas maneiras diferentes: Primeiro, como um aplicativo comum usando nosso projeto ArtistGui que permite instrumentação não invasiva de aplicativos em dispositivos com root, ou segundo, como um compilador de sistema para ROMs personalizadas onde pode adicionalmente instrumentar o servidor do sistema (Package Manager Service, Activity Manager Service, ...) e as classes do framework Android (boot.oat). Ele suporta versões do Android posteriores (e incluindo) Marshmallow 6.0.
Para tutoriais detalhados e informações mais aprofundadas sobre o ecossistema ARTist, dê uma olhada em nossa documentação oficial e junte-se ao nosso chat no Gitter.
Você pode encontrar verificações no código que checam versões específicas do Android, pois algumas APIs que usamos internamente podem ter mudado entre versões. O projeto ART está mudando constantemente, então tentamos compartmentalizar todo código dependente de versão em nosso fork do ART ou escondê-lo atrás de APIs mais convenientes e independentes de versão. O objetivo geral é esconder a dependência de versão dos desenvolvedores de módulos para que os módulos resultantes sejam compatíveis com todas as versões do Android suportadas pelo ARTist.
Na versão pré-beta atual, os módulos são criados na pasta modules e compilados com o ARTist. No entanto, nosso próximo lançamento beta (veja abaixo) contará com um SDK dedicado que permite desenvolver módulos independentemente do código-fonte do ARTist, portanto, não será mais necessário o AOSP e você não precisará codificar módulos fixos, mas poderá escolher dinamicamente quais usar para um alvo específico.
Se você apenas deseja criar suas próprias instrumentações, não precisa se preocupar em construir o ARTist. Apenas siga a explicação acima. Se, no entanto, você quiser trabalhar no próprio framework de instrumentação, o seguinte ajudará você a começar:
O ARTist é uma extensão do compilador ART dex2oat, portanto, é incorporado como um submódulo em nosso fork do ART personalizado. Para construir o ARTist, você precisa construir o fork do ART como parte do AOSP. O que chamamos de versão ARTist do dex2oat é na verdade o binário dex2oat mais várias bibliotecas (por exemplo, libart-compiler) que juntos formam nosso compilador de instrumentação. O projeto ArtistGui tem scripts prontos para construir o ART e o ARTist, e copiar os binários e bibliotecas resultantes para as pastas corretas do ArtistGui para enviá-los a um dispositivo para teste.
Estamos prestes a entrar na fase beta em breve, o que trará muitas mudanças para todo o ecossistema ARTist, incluindo um SDK ARTist dedicado para desenvolvimento simplificado de Módulos, um esquema de lançamento e versionamento inspirado em versionamento semântico, uma versão melhorada e atualizada de nossa documentação online, ótimos novos Módulos e muitas outras melhorias. No entanto, especialmente durante a fase de transição, algumas informações como as contidas nos arquivos README.md dos repositórios e na documentação em https://artist.cispa.saarland podem estar ligeiramente dessincronizadas. Pedimos desculpas pelo inconveniente e aceitamos feedback com satisfação no Gitter. Para acompanhar o progresso atual, fique de olho nos marcos beta dos repositórios do Project: ARTist e confira novas postagens no blog em https://artist.cispa.saarland .
Esperamos criar uma comunidade ativa de desenvolvedores, pesquisadores e usuários em torno do Project ARTist e, portanto, estamos felizes com contribuições e feedback de qualquer tipo. Existem muitas maneiras de se envolver e ajudar o projeto, como testar e escrever Módulos, fornecer feedback sobre quais funcionalidades são essenciais ou estão faltando, relatar bugs e outros problemas, ou em geral falar sobre suas experiências. A equipe está monitorando ativamente o Gitter e, claro, os repositórios, e estamos felizes em entrar em contato e discutir. Ainda não temos um guia de contribuição completo, mas ele virá em breve (veja o anúncio beta acima).
O ARTist é baseado em um artigo chamado ARTist - The Android Runtime Instrumentation and Security Toolkit, publicado no 2º IEEE European Symposium on Security and Privacy (EuroS&P'17). O artigo completo está disponível aqui. Se você está citando o ARTist em sua pesquisa, por favor use a seguinte entrada de bibliografia:
@inproceedings{artist,
title={ARTist: The Android runtime instrumentation and security toolkit},
author={Backes, Michael and Bugiel, Sven and Schranz, Oliver and von Styp-Rekowsky, Philipp and Weisgerber, Sebastian},
booktitle={2017 IEEE European Symposium on Security and Privacy (EuroS\&P)},
pages={481--495},
year={2017},
organization={IEEE}
}
Há um artigo de acompanhamento onde utilizamos o ARTist para extrair bibliotecas de anúncios de aplicativos de terceiros, mover a biblioteca para um aplicativo dedicado (com seu próprio principal de segurança) e reconectar ambos usando um protocolo Binder IPC personalizado, tudo enquanto preservamos a fidelidade visual exibindo os anúncios remotos como visualizações flutuantes sobre o agora aplicativo limpo de anúncios. O artigo completo The ART of App Compartmentalization: Compiler-based Library Privilege Separation on Stock Android, como foi publicado na 2017 ACM SIGSAC Conference on Computer and Communications Security (CCS'17), está disponível aqui.