Apiscout
Este projeto visa simplificar a recuperação de importação da API do Windows. Como entrada, os dumps arbitrários de memória para um ambiente conhecido podem ser processados (observe: um db de referência deve ser construído primeiro, usando o apiscout/db_builder).
A saída é uma lista ordenada de referências de API do Windows identificadas com algumas meta informações e uma impressão digital do apivor.
- scout.py - deve fornecer um bom esboço sobre como trabalhar com a biblioteca.
- IDA_SCOUT.PY - é um invólucro da GUI de conveniência para uso no IDA Pro.
- Ghidriscout.java-é um plug-in de Ghidra para o Apiscout (contribuído por @mari-mari).
- Match.py - demonstra como os apivetores podem ser comparados entre si e coleções de impressões digitais.
- COLLECT.PY - Constrói um banco de dados de impressões digitais WinAPI (Apivectores) que podem ser usadas para corresponder.
- export.py - gera diagramas de APIQR que visualizam os apivetores.
- UPDATE.PY - Puxe o db apivetor mais recente da Malpedia (requer uma conta Malpedia / token da API).
O código deve ser totalmente compatível com o Python 2 e 3.
Há uma postagem no blog descrevendo o Apiscout em mais detalhes: http://byte-atlas.blogspot.com/2017/04/apiscout.html.
Além disso, outra postagem no blog explicando como os apivetores são construídos e armazenados: https://byte-atlas.blogspot.com/2018/04/apivectors.html.
Também apresentamos um artigo no BotConf 2018 que descreve a metodologia do apiscuto em profundidade, incluindo uma avaliação sobre o Malpedia: https://journal.cecyf.fr/ojs/index.php/cybin/article/view/20/23/23
Histórico da versão
- 2023-03-27: v2.0.2-Bugfix para idascout e manuseio de conjuntos, contribuídos por @7a6570 (thx !!)
- 2023-01-02: v2.0.1-Bugfix para a tabela de importação baseada em Lief parsing com o python 3.10, contribuído por @malware-kitten (thx !!)
- 2022-08-01: v1.2.0-Adicionado plugin para ghidra, contribuído por @mari-mari (thx !!)
- 2022-09-20: v2.0.0-(potencialmente quebrando) Os resultados da rastreamento agora têm um campo de saída adicional com um conjunto de referências de chamada para um determinado Winapi. Isso também está incluído na saída JSON de
scout.py , contribuída por @renzhexigua (thx !!) - 2022-08-01: v1.2.0-Adicionado plugin para ghidra, contribuído por @mari-mari (thx !!)
- 2022-01-17: v1.1.9-Corrigido
ida_scout.py para trabalhar com o IDA 7.5+ quando o Apiscout também é instalado como um pacote Python. - 2021-10-04: v1.1.8-Extensão dos contextos de Winapi com base nas observações fornecidas pelo @blattm (thx!).
- 2021-08-30: v1.1.7-Aviso de depreciação fixa no APIQR, como criado por Numpy.
- 2021-07-31: v1.1.6-Não é mais necessário manter uma versão fixa do LIEF. (THX para @cccs-rs!)
- 2021-01-10: v1.1.5-pacote Python3 Lief corrigido na versão 0.10.1 (THX para @akhribfarouk!)
- 2020-12-09: v1.1.4-python3 correções no banco de dadosbuilder (thx para @dump-guy!)
- 2020-07-13: v1.1.3-Adicionado "Install_ReQuires" ao setup.py para garantir que as dependências sejam instaladas.
- 2020-06-30: v1.1.0-Agora, usando o LIEF para análise da tabela de importação. Corrigido o erro que não produziria apivetores ao usar a análise de tabela de importação. O Apiscout agora também está disponível no Pypi.
- 2020-03-03: Adicionado um script para extrair o db apivetor mais recente da Malpedia (requer uma conta Malpedia / token API).
- 2020-03-02: Portado para IDA 7.4 (THX para @Jenfrie).
- 2020-02-18: O DB Builder agora é compatível com o Python 3.7 (THX para @Elanfer).
- 2019-10-08: Solução alternativa para a filtragem quebrada da API View no IDA 7.3 (THX para @enzok para apontar isso).
- 2019-08-22: Corrigido um bug em que as informações de tipo ausente no IDA levariam a uma falha (agora fornece uma mensagem de erro).
- 2019-08-20: Adicionado auto-filtro para eliminar os ponteiros para possuir uma imagem de memória que poderia ser tratada por engano como referências de API.
- 2019-06-06: Suporte adicionado para a reconstrução de tipo adequado para APIs anotadas no IDA Pro (THX para @flxp0c)
- 2019-05-15: Adicionado suporte Numpy para cálculos de vetores (com base na implementação fornecida pela @garanews-thx!)
- 2019-05-15: Corrigido um bug no mapeador PE onde o buffer seria reduzido devido à interpretação incorreta dos tamanhos da seção.
- 2019-01-23: Melhorias da QV: implantação automatizada de pastas de dados quando usado como módulo, inicialização do logger (THX para @jdval)
- 2018-08-23: Corrigido um bug no mapeador PE, onde o cabeçalho do PE seria substituído pelos dados da seção (vazia).
- 2018-08-21: Funcionalidade adicionada que permite usar as informações da tabela de importação em vez de rastejar para referências.
- 2018-07-31: Funções de conveniência corrigidas para criar/exportar vetores de/para listas e ditos, adicionando cobertura de teste.
- 2018-07-23: AVISO: Mudança no formato do apivorto-introduziu apivetores classificados que são ainda mais eficientes em termos de espaço (20%+).
- 2018-06-25: Corrigida incompatibilidade com o IDA Pro 7.0+ (THX para @nazywam!)
- 2018-05-23: Adicionado outros grupos de contexto semânticos (THX ao quociente.io)
- 2018-03-27: Estimativa heurística das contagens de referência da API do Windows adicionadas
- 2018-03-06: Visualização APIQR dos resultados dos vetores (C-1024)
- 2017-11-28: Adicionado um analisador de tabela de importação para enriquecer informações de resultados
- 2017-08-24: Suporte de vários segmentos no IDA Pro (THX para @nazywam!)
- 2017-05-31: Adicionado Windows 7 SP1 64bit Import DB (compatível com Malpedia)
Créditos
A idéia já passou por múltiplas iterações até chegar a essa versão refatória.
Graças a Thorsten Jenke e Steffen Enders por seus esforços anteriores e avalia uma prova de conceito desse método.
Mais graças a Steffen Enders por seu trabalho na visualização de diagramas de APIQR.
Agradeço também a Ero Carrera por Pefile e Elias Bachaalany pelo modelo de Akusingform da IDA Python. :)
Além disso, muito obrigado a Andrea Garavaglia por seus benchmarks de desempenho que levam a velocidades drásticas na correspondência aplicada!
Pull Pedidos bem -vindos! :)