
Um Explorador de Cobertura para Engenheiros Reversos
Lighthouse é um poderoso explorador de cobertura de código para IDA Pro e Binary Ninja, proporcionando aos pesquisadores de software controles exclusivamente interativos para estudar mapas de execução de aplicações nativas sem exigir símbolos ou código-fonte.
Este projeto ficou em 2º lugar no Concurso de Plug-Ins de 2017 da IDA e mais tarde foi nomeado no Pwnie Awards de 2021 por suas contribuições à indústria de pesquisa de segurança.
Agradecimentos especiais a @0vercl0k pela inspiração.
Lighthouse é um plugin Python 2/3 multiplataforma (Windows, macOS, Linux). Ele não possui dependências de terceiros, tornando o código portátil e fácil de instalar.
Use as instruções abaixo para o seu desassemblador respectivo.
import idaapi, os; print(os.path.join(idaapi.get_user_idadir(), "plugins"))/plugins/ deste repositório para o diretório listado.Lighthouse pode ser instalado através do gerenciador de plugins do Binary Ninja, com suporte à v3.5 e mais recentes.
Edit -> Preferences -> Manage PluginsEnable no canto inferior direito.Uma vez instalado corretamente, haverá algumas novas entradas de menu disponíveis no desassemblador. Estes são os pontos de entrada para um usuário carregar dados de cobertura e começar a usar o Lighthouse.
Lighthouse é capaz de carregar alguns 'sabores' diferentes de dados de cobertura. Para gerar dados de cobertura que possam ser carregados no Lighthouse, consulte o README no diretório coverage deste repositório.
Enquanto o Lighthouse está em uso, ele irá 'pintar' os dados de cobertura ativos em todos os visualizadores de código disponíveis no desassemblador. Especificamente, isso se aplicará às suas janelas de desassemblagem linear, grafo e descompilador.
No Binary Ninja, apenas as visualizações de desassemblagem linear, grafo e IL são suportadas. O suporte para pintura da saída do descompilador no Binary Ninja será adicionado ao Lighthouse em um futuro próximo, à medida que o recurso se estabilizar.
A Visão Geral da Cobertura é um widget acoplável que será aberto assim que a cobertura for carregada no Lighthouse.
Este widget interativo fornece uma visão em nível de função dos dados de cobertura carregados. Ele também abriga uma série de ferramentas para gerenciar os dados carregados e conduzir formas mais avançadas de análise de cobertura.
Clicar com o botão direito na tabela da Visão Geral da Cobertura produzirá um menu de contexto com algumas comodidades básicas para extrair informações da tabela, ou manipular o banco de dados como parte do seu processo de engenharia reversa.
Se houver outras ações que você acha que podem ser úteis para adicionar a este menu de contexto, por favor abra uma issue e elas serão consideradas para uma versão futura do Lighthouse.
Coberturas carregadas e composições construídas pelo usuário podem ser selecionadas ou excluídas através do combobox de cobertura.
Lighthouse pode gerar relatórios rudimentares de cobertura em HTML. Um exemplo de relatório pode ser visto aqui.
Na parte inferior da janela de visão geral da cobertura está o shell de cobertura. Este shell pode ser usado para realizar operações baseadas em lógica que combinam ou manipulam os conjuntos de cobertura carregados.
Este recurso é extremamente útil para explorar as relações de execução do programa em múltiplas execuções. Em outras palavras, o shell pode ser usado para 'diferenciar' a execução entre conjuntos de cobertura e extrair um significado mais profundo que de outra forma está obscurecido dentro do ruído de suas partes individuais.
A composição de cobertura, ou Composing como demonstrado acima, é alcançada através de uma gramática de expressão simples e símbolos de cobertura 'abreviados' (A a Z) no shell de composição.
|, &, ^, -A, B, C, ..., Z, *(...)