TIRO es un marco de desobfuscación iterativo híbrido para aplicaciones de Android. Su nombre representa los cuatro pasos: Target , Instrument , Run y Observe . El enfoque de TIRO utiliza la idea de la ejecución dirigida (consulte nuestra herramienta anterior, Intellidroid) para identificar estáticamente ubicaciones de posible ofuscación y determinar las entradas para activar estas ubicaciones de código. Al instrumentar estas ubicaciones y ejecutarlas utilizando la información de orientación, la información de desobfuscación en tiempo de ejecución se puede recopilar y volver a análisis estáticos para desobfuscar la aplicación y lograr resultados de análisis más completos.
Para obtener más detalles, consulte nuestro artículo, publicado en Usenix Security 2018.
Actualmente, el código en este repositorio contiene el código base para el paso Target y es principalmente un puerto del componente estático de Intellidroid para el marco del hollín. Planeamos liberar código para los otros pasos TIRO en el futuro.
El análisis estático de Tiro se compone de los pasos Target y Instrument . En el paso Target , se identifican ubicaciones de ofuscación y se extraen rutas de llamadas a esas ubicaciones. Para cada ruta, Tiro reúne restricciones que determinan las entradas que deben inyectarse para activar la ruta dinámicamente. Actualmente usamos el solucionador de restricciones Z3 y convertimos restricciones en los formatos Z3-PY y Z3-Java.
El componente de análisis estático requiere Java 8 (JDK 1.8).
Este repositorio contiene una dependencia del repositorio de android-platforms , que contiene las bibliotecas de Android Framework utilizadas por las aplicaciones. Esta dependencia es un submódulo dentro del proyecto. Para clonar Tiro con el submódulo, ejecute:
git clone --recursive [email protected]:miwong/tiro.git
Alternativamente, si ya ha clonado a Tiro sin el submódulo, ejecute:
git submodule update --init --recursive
Esto tarda varios minutos, ya que las bibliotecas de Android Framework son grandes.
Este proyecto utiliza el sistema de construcción de Gradle. Los archivos de salida se encuentran en la build/ directorio. El script Gradlew es un envoltorio para máquinas que no tienen Gradle ya instalado. Si su máquina de desarrollo ya contiene Gradle, puede usar su propia instalación reemplazando ./gradlew con gradle en los comandos a continuación. Se requiere una conexión de red al compilar el código por primera vez para que Gradle pueda descargar automáticamente las dependencias.
Para construir:
./gradlew build
Para construir y ejecutar:
./TIROStaticAnalysis <APK>
Por defecto, TIRO escribe los resultados del análisis estático en el directorio tiroOutput . Las opciones -o permiten que esto se cambie. Para ver otras opciones de línea de comandos, ejecute:
./TIROStaticAnalysis --help
Actualmente, la salida de análisis estático de Tiro (es decir, appInfo.json ) no es compatible con Intellidroid. A medida que lanzamos el componente dinámico de TIRO, también actualizaremos el cliente dinámico utilizado en Intellidroid para que la extracción de restricciones de TIRO pueda integrarse en un análisis dinámico.
Tiro se basa en el marco de análisis estático de hollín. Se hicieron varias modificaciones a la generación de llamadas de hollín para mejorar el gráfico de llamadas con bordes que representan el flujo de ejecución específico de Android (p. Ej., Intentos). Las modificaciones se publican en un repositorio separado aquí.
Dado que las aplicaciones de Android están basadas en eventos, los puntos de entrada en una aplicación deben calcularse para lograr un análisis completo. TIRO utiliza el descubrimiento de punto de entrada implementado en FlowDroid. Se hicieron modificaciones menores a este código de punto de entrada para extraer la información requerida por el análisis de Tiro; Estos cambios se almacenan en static/src/soot/ y static/src/tiro/target/entrypoint/ .
Los siguientes han contribuido con código a Tiro:
Tiro fue desarrollado como un proyecto de doctorado por Michelle Wong en la Universidad de Toronto. Para cualquier consulta, comuníquese con Michelle en [email protected].
Tiro se lanza bajo la Licencia Pública General General de GNU, versión 2.1.