Skip to content
KitploitKITPLOIT
FerramentasExploitsBlog
Log in
Enviar
FerramentasExploitsBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
FindFunc — Plugin para IDA Pro para filtrar funções por padrões de assembly, sequências de bytes, referências de strings/nomes e restrições de tamanho, com pesquisa baseada em regras e cópia binária avançada. | Kitploit
Ferramentas/GitHubGitHub/felixber/findfunc
Análise EstáticaAnálise de CódigoEngenharia ReversaDepuradoresAnálise de Binários
GitHubfelixber/findfunc

FindFunc

Plugin para IDA Pro para filtrar funções por padrões de assembly, sequências de bytes, referências de strings/nomes e restrições de tamanho, com pesquisa baseada em regras e cópia binária avançada.

Ver Repositório
3623617há 10 mesesRevisado pelo Kitploit

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

FindFunc: Filtragem/Encontro Avançado de Funções no IDA Pro

FindFunc é um plugin do IDA Pro para encontrar funções de código que contenham um determinado padrão de assembly ou byte, referenciem um certo nome ou string, ou estejam em conformidade com várias outras restrições.

FindFunc ganhou o terceiro lugar no Concurso de Plugins do IDA Pro da HexRays 2022!

ffmain

Filtragem com Regras

A funcionalidade principal do FindFunc é permitir que o usuário especifique um conjunto de "Regras" ou restrições que uma função de código no IDA Pro deve satisfazer. O FF então encontrará e listará todas as funções que satisfazem TODAS as regras (portanto, atualmente todas as Regras estão em uma conjunção AND). Exceção: As regras podem ser "invertidas" para serem correspondências negativas. Tais regras, portanto, se conformam a "AND NOT".

O FF irá agendar as regras em uma ordem inteligente para minimizar o tempo de processamento. Visão geral dos recursos:

  • Atualmente 6 Regras disponíveis, veja abaixo
  • Ciente de chunks de funções
  • Agendamento inteligente de regras para desempenho
  • Salvar/Carregar regras de/para arquivo em formato ascii simples
  • Várias abas independentes para experimentação
  • Copiar regras entre abas via área de transferência (mesmo formato do arquivo)
  • Salvar sessão inteira (todas as abas) em arquivo
  • Cópia avançada de bytes de instrução (todos, apenas opcodes, todos exceto imediatos, ...)
  • Clonar abas para experimentos rápidos com refinamento de resultados
  • A correspondência de código respeita Prefixo de Tamanho de Endereçamento e Prefixo de Tamanho de Operando

O botão "Find Functions" limpa os resultados existentes e inicia uma nova pesquisa, "Refine Results" considera apenas os resultados da pesquisa anterior.

Cópia Binária Avançada

Um recurso secundário do FF é a opção de copiar a representação binária de instruções com as seguintes opções:

  • copiar tudo -> copiar todos os bytes para a área de transferência
  • copiar sem imediatos -> preencher com espaços (AA ?? BB) quaisquer valores imediatos nos bytes da instrução
  • apenas opcode -> preencherá tudo exceto o(s) opcode(s) real(is) da instrução (e prefixos)
  • ...

Veja a seção "cópia avançada" abaixo para detalhes. Este recurso complementa bem a regra de Padrão de Byte!

Construção e Instalação

FindFunc é um plugin Python do IDA Pro sem dependências de pacotes externos. Pode ser instalado baixando o repositório e copiando o arquivo 'findfuncmain.py' e a pasta 'findfunc' para o diretório de plugins do seu IDA Pro. Para IDA 9.0+, o repositório também pode ser clonado diretamente no diretório de plugins. De qualquer forma, nenhuma construção é necessária.

Requisitos: IDA Pro 8.x (8.3+) com ambiente python3. FindFunc é projetado apenas para a arquitetura x86/x64. Foi testado com IDA 8.3 - 9.2, python 3.11 no Windows 10 + 11

Regras Disponíveis

Atualmente, as seis regras a seguir estão disponíveis. Elas estão ordenadas aqui de pesada a leve em relação ao impacto no desempenho. Com bancos de dados grandes, é uma boa ideia primeiro reduzir as funções candidatas com uma regra barata, antes de fazer correspondência pesada via, por exemplo, Regras de Código. O FF agendará automaticamente as regras de maneira inteligente.

Padrão de Código

Regra para filtrar funções com base em elas conterem um trecho de código assembly fornecido. Isso NÃO é uma pesquisa de texto pela representação textual de desmontagem do IDA, mas sim realiza correspondência avançada da instrução subjacente. O trecho pode conter muitas instruções consecutivas, uma por linha. Chunks de funções são suportados. Suporta correspondência especial com curingas, além de assembly literal:

  • "pass" -> corresponde a qualquer instrução com quaisquer operandos
  • "mov* any,any" -> corresponde a instruções com mnemônico "mov*" (ex.: mov, movzx, ...) e quaisquer dois argumentos.
  • "mov eax, r32" -> corresponde a qualquer instrução com mnemônico "mov", primeiro operando registrador eax e segundo operando qualquer registrador de 32 bits.
    • Análogo: r para qualquer registrador, r8/r16/r32/r64 para registrador de largura específica, "imm" para qualquer imediato
  • "mov r64, imm" -> corresponde a qualquer movimentação de uma constante para um registrador de 64 bits
  • "any r64,r64" -> corresponde a qualquer operação entre dois registradores de 64 bits
  • mov -> corresponde a qualquer instrução do mnemônico mov

mais exemplos:

mov r64, [r32 * 8 + 0x100]
mov r, [r * 8 - 0x100]
mov r64, [r32 * 8 + imm]
pass
mov r, word [eax + r32 * 8 - 0x100]
any r64, r64
push imm
push any

Armadilhas: Tenha cuidado ao copiar assembly do IDA. O IDA mistura nomes de variáveis locais e outras informações na instrução, o que leva a falhas na correspondência. Além disso, rótulos não são suportados ("call sub_123456").

Note que Padrões de Código é a Regra mais cara, e se apenas Regras de Código estiverem presentes, o FF não tem opção a não ser desmontar todo o banco de dados. Isso pode levar vários minutos para binários muito grandes. Veja notas sobre desempenho abaixo.

Valor Imediato (Constante)

A função deve conter o imediato fornecido pelo menos uma vez em qualquer posição. Um valor imediato é um valor fixo na representação binária da instrução. Exemplos de instruções que correspondem ao valor imediato 0x100:

mov eax, 0x100
mov eax, [0x100]
and al, [eax + ebx*8 + 0x100]
push 0x100

Imediatos podem ser colados diretamente da área de transferência na lista de regras. Nota: O IDA realiza correspondência extensiva de qualquer tamanho e qualquer posição do imediato. Se você souber que ele tem uma largura específica de 4 ou 8 bytes, um padrão de byte pode ser mais rápido (mas pode produzir falsos positivos).

Padrão de Byte

A função deve conter o padrão de byte fornecido pelo menos uma vez. O padrão tem o mesmo formato da pesquisa binária do IDA e, portanto, suporta curingas - a combinação perfeita para o recurso de cópia avançada!

Exemplos:

11 22 33 44 aa bb cc
11 22 33 ?? ?? bb cc -> ?? pode ser qualquer byte

Padrões de byte podem ser colados diretamente da área de transferência na lista de regras. Nota: A correspondência de padrões é bastante rápida e uma boa candidata para reduzir correspondências rapidamente!

Referência a String

A função deve referenciar a string fornecida pelo menos uma vez. A string é correspondida de acordo com o módulo 'fnmatch' do Python e, portanto, suporta correspondência do tipo curinga. A correspondência é realizada sem diferenciação de maiúsculas/minúsculas. Strings dos seguintes formatos são consideradas: [idaapi.STRTYPE_C, idaapi.STRTYPE_C_16] (isso pode ser alterado na classe Config).

Exemplos:

  • "TestString" -> função deve referenciar a string exata (ignorando maiúsculas/minúsculas) pelo menos uma vez
  • "TestStr*" -> função deve referenciar uma string começando com 'TestStr' (ex.: TestString, TestStrong) pelo menos uma vez (ignorando maiúsculas/minúsculas)

Nota: A correspondência de strings é rápida e uma boa escolha para reduzir candidatos rapidamente!

Referência a Nome

A função deve referenciar o nome/rótulo fornecido pelo menos uma vez. O nome/rótulo é correspondido de acordo com o módulo 'fnmatch' do Python e, portanto, suporta correspondência do tipo curinga. A correspondência é realizada sem diferenciação de maiúsculas/minúsculas.

Exemplos:

  • "memset" -> função deve referenciar um nome "memset" pelo menos uma vez
  • "mem*" -> função deve referenciar um nome começando com "mem" (memset, memcpy, memcmp) pelo menos uma vez

Nota: A correspondência de nomes é muito rápida e ideal para reduzir candidatos rapidamente!

Tamanho da Função

Baixar ferramenta