
Plugin IDA Python para correspondência rápida e orientada por localização de símbolos de bibliotecas de código aberto em binários, permitindo engenharia reversa e análise de vulnerabilidades eficientes de grandes firmwares e malwares.
/$$ /$$ /$$
| $$ /$$/ | $$
| $$ /$$/ /$$$$$$ /$$$$$$ /$$$$$$ /$$$$$$
| $$$$$/ |____ $$ /$$__ $$|_ $$_/ |____ $$
| $$ $$ /$$$$$$$| $$ \__/ | $$ /$$$$$$$
| $$\ $$ /$$__ $$| $$ | $$ /$$ /$$__ $$
| $$ \ $$| $$$$$$$| $$ | $$$$/| $$$$$$$
|__/ \__/ \_______/|__/ \___/ \_______/
"Karta" (russo para "Mapa") é um plugin IDA Python que identifica e combina bibliotecas de código aberto em um binário específico. O plugin usa uma técnica única que permite suportar binários enormes (>200.000 funções), com quase nenhum impacto no desempenho geral.
O algoritmo de correspondência é orientado por localização. Isso significa que seu foco principal é localizar os diferentes arquivos compilados e combinar cada uma das funções do arquivo com base em sua ordem original dentro do arquivo. Dessa forma, a correspondência depende de K (número de funções no código aberto) em vez de N (tamanho do binário), ganhando um aumento significativo de desempenho já que normalmente N >> K.
Acreditamos que existem 3 casos de uso principais para este plugin IDA:
Para as versões mais recentes, usando Python 3, simplesmente faça git clone do repositório e execute o script setup.py install. O Python 3 é suportado desde as versões v2.0.0 e superiores.
Desde o lançamento do IDA 7.4, o Karta é ativamente desenvolvido apenas para IDA 7.4 ou mais novo, e Python 3. Python 2 e versões antigas do IDA ainda são suportados usando a versão de lançamento v1.2.0, que muito provavelmente será a última versão suportada devido ao fim da vida útil do Python 2.X.
O identificador do Karta é um plugin menor que identifica a existência e cria impressões digitais das versões das bibliotecas de código aberto (suportadas) existentes no binário. Não é mais necessário fazer engenharia reversa da mesma biblioteca de código aberto repetidamente, basta executar o plugin identificador e obter uma lista detalhada das fontes abertas usadas. O Karta atualmente suporta mais de 10 bibliotecas de código aberto, incluindo:
Após identificar as fontes abertas usadas, pode-se compilar um arquivo de configuração .JSON para uma biblioteca específica (libpng versão 1.2.29, por exemplo). Uma vez compilado, o Karta tentará automaticamente combinar as funções (símbolos) da fonte aberta no binário carregado. Além disso, caso sua fonte aberta use funções externas (memcpy, fread ou zlib_inflate), o Karta também tentará combinar essas funções externas.
Este projeto foi desenvolvido por mim (veja detalhes de contato abaixo) com ajuda e suporte do meu grupo de pesquisa na Check Point (Check Point Research).
Este repositório foi desenvolvido e mantido por mim, Eyal Itkin, durante meus anos na Check Point Research. Infelizmente, com minha saída do grupo de pesquisa, não poderei mais manter este repositório. Isso se deve principalmente à longa lista de requisitos para executar todos os testes de regressão e às versões do IDA Pro envolvidas no processo.
Por favor, aceitem minhas sinceras desculpas.