
Un Explorador de Cobertura para Ingenieros Inversos
Lighthouse es un potente explorador de cobertura de código para IDA Pro y Binary Ninja, que proporciona a los investigadores de software controles únicos e interactivos para estudiar mapas de ejecución de aplicaciones nativas sin requerir símbolos ni código fuente.
Este proyecto obtuvo el 2.º puesto en el Concurso de Plugins de 2017 de IDA y posteriormente fue nominado en los Pwnie Awards de 2021 por sus contribuciones a la industria de la investigación de seguridad.
Agradecimientos especiales a @0vercl0k por la inspiración.
Lighthouse es un plugin multiplataforma (Windows, macOS, Linux) para Python 2/3. No tiene dependencias de terceros, lo que hace que el código sea portátil y fácil de instalar.
Utilice las instrucciones a continuación según su desensamblador correspondiente.
import idaapi, os; print(os.path.join(idaapi.get_user_idadir(), "plugins"))/plugins/ de este repositorio al directorio indicado.Lighthouse se puede instalar a través del gestor de plugins de Binary Ninja, compatible con la versión v3.5 y posteriores.
Edit -> Preferences -> Manage PluginsEnable en la esquina inferior derecha.Una vez instalado correctamente, habrá algunas entradas de menú nuevas disponibles en el desensamblador. Estos son los puntos de entrada para que un usuario cargue datos de cobertura y comience a usar Lighthouse.
Lighthouse puede cargar algunos 'sabores' diferentes de datos de cobertura. Para generar datos de cobertura que se puedan cargar en Lighthouse, consulte el README en el directorio coverage de este repositorio.
Mientras Lighthouse está en uso, 'pintará' los datos de cobertura activos en todos los visores de código disponibles en el desensamblador. Específicamente, esto se aplicará a sus ventanas de desensamblado lineal, grafo y descompilador.
En Binary Ninja, solo se admiten las vistas de desensamblado lineal, grafo e IL. La compatibilidad para pintar la salida del descompilador en Binary Ninja se añadirá a Lighthouse en un futuro cercano a medida que la función se estabilice.
La Descripción general de la cobertura es un widget acoplable que se abrirá una vez que se hayan cargado datos de cobertura en Lighthouse.
Este widget interactivo proporciona una vista a nivel de función de los datos de cobertura cargados. También alberga una serie de herramientas para gestionar los datos cargados e impulsar formas más avanzadas de análisis de cobertura.
Hacer clic derecho en la tabla de la Descripción general de la cobertura producirá un menú contextual con algunas comodidades básicas para extraer información de la tabla, o manipular la base de datos como parte de su proceso de ingeniería inversa.
Si hay otras acciones que cree que podrían ser útiles para añadir a este menú contextual, por favor abra un issue y se considerarán para una futura versión de Lighthouse.
La cobertura cargada y las composiciones construidas por el usuario se pueden seleccionar o eliminar a través del cuadro combinado de cobertura.
Lighthouse puede generar informes de cobertura HTML rudimentarios. Puede ver un informe de ejemplo aquí.
En la parte inferior de la ventana de descripción general de la cobertura se encuentra el shell de cobertura. Este shell se puede utilizar para realizar operaciones basadas en lógica que combinan o manipulan los conjuntos de cobertura cargados.
Esta función es extremadamente útil para explorar las relaciones de ejecución de un programa a lo largo de múltiples ejecuciones. En otras palabras, el shell se puede utilizar para 'diferenciar' la ejecución entre conjuntos de cobertura y extraer un significado más profundo que de otro modo queda oculto dentro del ruido de sus partes individuales.