A crowd-sourcing and heuristic approach to proguard rule generation for third party libraries and key source-code conflicts
Professor Advisor
dc.contributor.advisor
Bergel, Alexandre Henri
Professor Advisor
dc.contributor.advisor
Hetch, Geoffrey
Author
dc.contributor.author
Suazo Sarrocchi, Juan Pablo
Associate professor
dc.contributor.other
Hevia Angulo, Alejandro
Associate professor
dc.contributor.other
González Jure, Pablo Antonio
Admission date
dc.date.accessioned
2021-12-02T19:43:25Z
Available date
dc.date.available
2021-12-02T19:43:25Z
Publication date
dc.date.issued
2021
Identifier
dc.identifier.uri
https://repositorio.uchile.cl/handle/2250/183033
Abstract
dc.description.abstract
Dado que las aplicaciones móviles han adquirido protagonismo en rubro de la ingeniería de software, siendo estas uno de los tipos de software más utilizados en todo el mundo, se han creado diversas herramientas para facilitar su desarrollo. Los ofuscadores son una de estas, dedicadas a la optimización, reducción y ofuscación del código de las aplicaciones. Estos ofrecen claros beneficios al minimizar el tamaño de los archivos de las aplicaciones, haciéndolas más rápidas y reduciendo la legibilidad del código para proteger la propiedad intelectual.
A pesar de estas ventajas, la mayoría de las aplicaciones no utilizan ofuscadores. Esto es especialmente desconcertante en el ecosistema de Android, donde ofuscadores como ProGuard vienen incorporados y listos para su uso. Esta reticencia puede deberse a la dificultad que presenta implementar ofuscadores y mantener su código usable. Específicamente, la identificación de los conflictos entre la ofuscación y la funcionalidad del código, y la redacción de reglas de configuración para resolverlos. Estas dificultades incrementan cuando se trata de bibliotecas de terceros, ya que los desarrolladores tienen que lidiar con los conflictos provocados por código ajeno. La detección de los conflictos y la redacción de las reglas para abordarlos puede ser un proceso exhaustivo. Requiere que los desarrolladores tengan familiaridad con el código y con la sintaxis de las reglas para poder implementar ProGuard eficientemente. Esto podría disuadir a los desarrolladores de habilitar esta herramienta.
Se proponen dos soluciones para generar reglas de ProGuard para una aplicación de forma automática, eliminando los obstáculos que impiden a los usuarios habilitar ProGuard. La primera es un enfoque de crowdsourcing que pretende generar reglas para las dependencias de las aplicaciones. Nuestra solución estudia el código fuente de un número considerable de aplicaciones de código abierto. Nuestro enfoque limita los esfuerzos de los desarrolladores en la implementación de la ofuscación al código con el que están familiarizados. Lo hace detectando las dependencias de una aplicación, consultando la sabiduría de la multitud para conocer las reglas utilizadas en otras aplicaciones con las mismas dependencias y aplicando heurísticas para elegir las reglas pertinentes para la aplicación. La segunda solución pretende detectar algunas de las prácticas clave, que poseen conflictos reflexivos con ProGuard, dentro del código fuente de una aplicación y redactar reglas específicas para abordarlas.
Por último, observamos que la solución de reglas de dependencia es bastante precisa a la hora de decidir qué reglas debe incluir para las dependencias de una aplicación. Genera correctamente el 80\% de estas reglas con un recall de 0,89. Por otro lado, lo hace arrastrando reglas que no son relevantes para la aplicación y, aunque no generen ningún error, desordenan los resultados y confunden al usuario. La segunda solución no tiene tanto éxito, ya que la detección de conflictos resulto ser un gran desafío. Aun así, la primera solución es de gran ayuda para poder habilitar ProGuard, ya que las reglas para dependencias representan la mayoría de las reglas necesitadas por aplicaciones
es_ES
Lenguage
dc.language.iso
en
es_ES
Publisher
dc.publisher
Universidad de Chile
es_ES
Type of license
dc.rights
Attribution-NonCommercial-NoDerivs 3.0 United States