Plug -in aprimorado do gerador de assinatura da IDA Pro.
Copie IDA_SigMaker32.dLL e IDA_SigMaker64.dLL para o seu diretório plugins IDA.
A chave quente do IDA padrão é "Ctrl-alt-S", mas pode ser definida como outra usando a chave do seu IDA "plugins.cfg". Como o "Ctrl-alt-S" agora se conflita com um inadimplência da IDA, para evitar obter mensagens de alerta, edite sua entrada "iDagui.cfg" e faça a entrada "Stacktrace" como: "StackTrace" = 0 // "Ctrl-Alt-S" // open stack trace window (o '0' Desactula a chave).
Requer IDA Pro versão 7.6'ish.
Invoque o plug -in através da tecla de atalho ou pelo menu IDA Edit/Plugin.

Existem três operações de geração de assinatura:
Função : Usado para criar um ponto de entrada de função exclusivo, uma assinatura de função mínima com deslocamento ou uma assinatura de corpo inteiro, dependendo da configuração das opções (veja abaixo).
Primeiro, selecione qualquer endereço dentro da função de destino. Se a função selecionada não for exclusiva (para o ponto de entrada ou a opção mínima), será tentada uma assinatura para uma varredura de referência cruzada de função exclusiva.
Casos de uso típicos: assinaturas para localizar funções no tempo de execução na memória de destino, para localizar funções na IDA após atualizações executáveis ou para ajudar a localizar bibliotecas conhecidas por assinatura, etc.
Exemplo de saída de assinatura: 
Os resultados da assinatura são empurrados para a área de transferência do Windows para facilitar Ctrl+V colando no código -fonte, etc.

Formato de saída: IDA : o formato de pesquisa binária hexadecimal padrão que o IDA e algumas outras ferramentas suportam, usando bytes hexadecimais espaçados e "??" curingas. Exemplo: C1 6C E8 ?? ?? ?? ?? 8B 50 08 Estilo de código : String hexadecida codificada por escape e uma string de máscara separada onde 'x' são bytes de guardião e '?' são bytes curinga. Exemplo: "xC1x6CxE8xCCxCCxCCxCCx8Bx50x08", "xxx????xxx" inline byte : uma matriz de estilo C minimalista de bytes com formato de WildCard por teses. Exemplo: {0xC1,0x6C,0xE8,0xAE,0xAE,0xAE,0xAE,0x8B,0x50,0x08}; Use a caixa de edição "Mask Byte" para alterar o byte de máscara em linha padrão "em linha". O byte de máscara padrão é 0xAE , um dos bytes de código menos usados (consulte "Ideal Mask Byte" abaixo).
Os critérios para a geração de assinatura de "função". Ponto de entrada : tentará gerar uma assinatura mínima de ponto de entrada de byte, quando possível. Tamanho mínimo do byte : tentará gerar um mínimo, com menos curingas contagem de curingas, tamanho de byte (cinco são assinatura alinhada com limites de instrução maior dentro do corpo da função selecionado. Corpo de função completa : tentará gerar uma assinatura do corpo de função completa exclusiva.
Para qualquer uma dessas três opções, se a função não for única, será feita uma tentativa de localizar a menor assinatura exclusiva de referência cruzada. Se você deseja fazer uma assinatura de função completa ou parcial para uma função não única, use a opção "do intervalo de endereços".
Nível de mensagem : defina como "verbose" para a saída da mensagem de geração de assinatura interna na janela de log da IDA.
MAX FUNCTION SCAN Refs : Limite quantas funções de referência cruzada para pesquisar quando uma assinatura de ação direta "função" não puder ser encontrada. Normalmente, isso deve ser '0' para pesquisa ilimitada, mas para casos problemáticos em que existem tantas referências que causam uma desaceleração, isso pode ser definido para algum limite razoável, como 16 ou 100 para aumentar a velocidade de varredura.
Para o caso relativamente raro de funções que têm seus pedaços espalhados por vários intervalos de endereço, a ferramenta tentará usar apenas o primeiro pedaço. Se desejar fazer uma assinatura em um dos pedaços desarticulados, tente usar o método "AT ENDERET". Se tudo mais falhar, tente um SIG "do intervalo de endereços" (que pode levar algumas pesquisas manuais por singularidade).
Bytes de assinatura do ponto de entrada da função máxima : Ao usar a opção "Função", e os critérios "ponto de entrada" são configurados, opcionalmente limitam o tamanho máximo de byte de assinatura do ponto de entrada. O padrão é '0', para ilimitado (que pode estar de acordo com todo o tamanho do byte do corpo da função selecionado). Se esse limite for excedido, será procurada uma assinatura de referência cruzada.
Definido como um limite prático como '16' ou '32', para assinaturas de XREF preferenciais normalmente menores versus assinaturas de ponto de entrada potencialmente muito grandes.
O Sigmakerex ("Ex") general gera assinaturas de função menores e mais rígidas usando melhor análise de instruções. Exemplo: Sigmaker ("SM") Wildcards The OperAnd Bytes of Instruction sub esp, 90h (como "81 EC ?? ?? ?? ?? ), jogando fora os últimos quatro bytes desnecessariamente. Enquanto ex vê como um valor imediato e mantém a sequência de Byte 81 EC 90 00 00 00 .
Ex está melhor focado nos casos de uso da assinatura do corpo da função normativa. Para SM, existe apenas uma opção controlável. Ele tentará fazer uma assinatura exclusiva em onde quer que você selecione na função. Se não conseguir encontrar um lá, procurará apenas uma sig de referência cruzada exclusiva. Para Ex, como o caso de uso típico identificado é localizar pontos de entrada de funções, a menor assinatura do ponto de entrada será gerada quando a opção de critérios "ponto de entrada" estiver configurada. Para quando a opção "tamanho mínimo de byte" for selecionado, ela procurará a menor e menos curinga contagem de assinatura única (de mínimo de cinco bytes) dentro de todo o corpo da função.
O SM possui mais controles de critérios de saída sobre a contagem de curinga de byte vs, etc., na caixa de diálogo Opções. Ex pressupõe que você queira o melhor de ambos (menos curingas e menor tamanho de byte).
A funcionalidade de "conversão" e a funcionalidade de pesquisa individual "" SM tem uma preferência por uma interface do usuário mais simples e menos desordenada.
Para pesquisa, como o ex sempre emite a saída do formato IDA, além das assinaturas de formato de saída selecionadas, use a opção "hexadecimal" de pesquisa binária da IDA com a sequência IDA SIG.
O EX é geralmente mais rápido, ao fazer pesquisas mais extensas, devido a uma técnica de clonar o BID na RAM e usar um scanner de padrões otimizado para AVX2 vs depender da função Slow IDA para digitalização.
Em meus próprios projetos para encontrar padrões dinamicamente, prefiro o formato "Inline Byte" (por falta de um nome melhor). É a mais simples, mais compacta e não requer uma transformação de tempo de execução de uma string hexidal ASCII. Eu usei esse formato para muitos projetos e ainda não encontrei em colisão de assinatura ou problemas redundantes de correspondência.
Para minimizar possíveis problemas de redundância, é prudente usar um dos valores de bytes de código menos usados para o curinga/máscara byte. Para encontrar os candidatos ideais, reuni a frequência de bytes de código de três segmentos de código de 32 bits e 64 bits, depois tabulei e classifiquei os resultados. O script IDA "IDA_GET_BYTE_FREQUENCY.PY" é usado o dicionário de frequência Gather a Byte e salve -o em um DB JSON. O script "BYTE_FREQUENCY_TABULE.PY" os tabula e classifica em ordem crescente um conjunto desses JSON DBS salvos. É evidente que a frequência de bytes para 32 bits não é a mesma que o 64 bits e tabulou independentemente. Consulte "32bit.txt" e "64bit.txt". Em uma correlação visual dos dois, 0XA2 é realmente o denominador menos comum, seguido por 0XAE. O 0XAE foi escolhido sobre 0XA2 como o byte de máscara padrão, pois sua subjetivamente mais fácil de escolher visualmente.
Construído usando o Visual Studio 2019, no Windows 10, com a única dependência sendo o SDK oficial IDA Pro C/C ++. Configuração no arquivo do projeto, ele procura uma variável de ambiente _IDADIR a partir da qual espera encontrar uma pasta "IDASDK/incluir" e uma pasta "idAsdk/lib", onde o IDA SDK está localizado. Não usar IDADIR , pois a IDA procura por si mesma e pode causar um conflito se você tentar usar mais de uma versão IDA instalada.
Python 3.7'ish ou melhor para executar o script "byte_frequency_tabulate.py".
Graças ao Criador da ferramenta Sigmaker original de volta dos dias de GameDEception.net até os autores atuais de iteração C/C ++ e Python: P4tr! CK, Bobbysing, Xero | Hawk, Ajkhoury e Zoomgod et al. Agradecemos a Wojciech Mula por seus recursos de programação SIMD.
Lançado no MIT © 2022 por Kevin Weatherman