Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
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
grap — Define e compara padrões de grafo definidos pelo usuário com grafos de fluxo de controle binários usando um desmontador baseado em Capstone, com suporte a CLI, bindings Python e plugin IDA. | Kitploit
Ferramentas/GitHubGitHub/quosecgmbh/grap
Análise EstáticaEngenharia ReversaDepuradoresAnálise de MalwareAnálise de Binários
GitHubquosecgmbh/grap

grap

Define e compara padrões de grafo definidos pelo usuário com grafos de fluxo de controle binários usando um desmontador baseado em Capstone, com suporte a CLI, bindings Python e plugin IDA.

Ver Repositório
155113há 4 anosRevisado 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

grap: definir e corresponder padrões de grafo em binários

https://github.com/QuoSecGmbH/grap

O grap recebe padrões e arquivos binários, usa um desassemblador baseado em Casptone para obter os grafos de fluxo de controle dos binários e então corresponde os padrões contra eles.

Os padrões são grafos definidos pelo usuário com condições de instrução ("opcode é xor e arg1 é eax") e condições de repetição (3 instruções idênticas, blocos básicos...).

O grap está disponível como uma ferramenta independente com um desassemblador e bindings Python, e como um plugin para IDA que aproveita a desmontagem feita pelo IDA e pelo reverser.

Suporte:

  • Arquivos: desmontagem de PE, ELF e binário bruto; outros arquivos devem funcionar dentro do IDA
  • Arquitetura: x86 e x86_64

Match quick pattern:

Match quick pattern

Match full pattern:

Match full pattern

Match on multiple files:

Match on multiple files

Create patterns interactively from IDA:

Create and match patterns directly from IDA

Instalação

Este documento descreve como compilar e instalar o grap em uma distribuição Linux.

Você também pode ler:

  • WINDOWS.md: instalando o grap no Windows
  • IDA.md: instruções de instalação e uso do plugin para IDA

Requisitos

Além dos compiladores (build-essential), as seguintes dependências devem ser instaladas:

  • cmake
  • bison
  • flex
  • libboost-regex-dev
  • libboost-system-dev
  • libboost-filesystem-dev
  • libseccomp-dev
  • python3-dev
  • python3-pefile
  • python3-pyelftools
  • python3-capstone
  • swig (versão 3 ou mais nova é obrigatória)

Assim, no Ubuntu / Debian, isso deve funcionar:

root@kitploit:~
sudo apt-get install build-essential cmake bison flex libboost-regex-dev libboost-system-dev libboost-filesystem-dev libseccomp-dev python3-dev python3-pefile python3-pyelftools python3-capstone swig

Por favor, note que estes foram testados para a última versão LTS do Ubuntu (18.04.3). Os pacotes podem diferir dependendo da sua distribuição.

Compilar e instalar

Os seguintes comandos irão compilar e instalar o projeto:

  • mkdir build; cd build/ conforme aconselhamos compilar o projeto em um diretório dedicado
  • cmake ../src/; make irá compilar com cmake e make
  • sudo make install instalará o grap em /usr/local/bin/

O SWIG pode falhar ao encontrar o python3 se sua versão padrão for python2; isso pode ser superado alterando para python3 como padrão. Por exemplo, no Ubuntu:

root@kitploit:~
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 10

Uso

A ferramenta pode ser iniciada usando o seguinte comando:

$ grap [options] pattern test_paths

Abaixo estão alguns exemplos de opções suportadas:

  • grap -h: descreve as opções suportadas

Pode-se deixar o grap inferir um padrão a partir de uma string. Apenas algumas opções são suportadas, mas isso é útil para prototipagem:

  • grap "opcode is xor and arg1 contains '['" (test.exe): procura por um xor com uma escrita em memória
  • grap -v "sub->xor->sub" (test.exe): -v exibirá o caminho do padrão inferido

Escolha como os binários são desmontados:

  • grap -od (pattern.grapp) samples/*: desmonta arquivos na pasta samples/ sem tentar corresponder
  • grap -f (pattern.grapp) (test.exe): força a redesmontagem do binário e então corresponde-o contra pattern.grapp
  • grap --raw (pattern.grapp) (test.bin): desmonta arquivo bruto (use --raw-64 para binários de 64 bits)

Controle a verbosidade da saída:

  • grap -q -sa (pattern.grapp) (samples/*.grapcfg): corresponde arquivos desmontados, mostra arquivos correspondentes e não correspondentes, um por linha
  • grap -m (pattern.grapp) (test.grapcfg): mostra todos os nós correspondidos

Escolha onde o(s) arquivo(s) desmontado(s) (.grapcfg) são escritos; corresponda múltiplos arquivos contra múltiplos padrões:

  • grap patterns/basic_block_loop.grapp -o ls.grapcfg /bin/ls: desmonta ls em ls.grapp e procura por loops de blocos básicos
  • grap (pattern1.grapp) -p (pattern2.grapp) (test.exe): corresponde contra múltiplos arquivos de padrão
  • grap -r -q patterns/ /bin/ -o /tmp/ : desmonta todos os arquivos de /bin/ em /tmp/ e corresponde-os contra todos os padrões .grapp de patterns/ (a opção recursiva -r se aplica a /bin/, não a patterns/)

Exemplos de padrões

O padrão a seguir detecta um loop de descriptografia consistindo em um xor seguido por sub encontrado em uma amostra Backspace:

root@kitploit:~
digraph decryption_md5_4ee00c46da143ba70f7e6270960823be {
A [cond=true, repeat=3]
B [cond="opcode is xor and arg2 is 0x11"]
C [cond="opcode is sub and arg2 is 0x25"]
D [cond=true, repeat=3]
E [cond="opcode beginswith j and nchildren == 2"]

A -> B
B -> C
C -> D
D -> E
E -> A [childnumber=2]
}

Note que arquivos de padrão podem conter múltiplos grafos de padrão.

Você pode encontrar exemplos de padrão adicionais em dois diretórios:

  • patterns/ contém alguns padrões que podem ser úteis em qualquer binário, como um padrão para detectar loops curtos ou para detectar um loop em blocos básicos,
  • examples/ contém padrões usados contra o malware Backspace (veja examples/backspace_samples.md para obter as amostras binárias).

Tutoriais e mais exemplos

Sobre amostras de malware:

  • Navegando por amostras de malware com grap (CLI, IDA): https://yaps8.github.io/blog/grap_qakbot_navigation
  • Automatizando a análise e descriptografia de funções (bindings Python): https://yaps8.github.io/blog/grap_qakbot_strings

Uso dos bindings Python:

  • Arquivo Python demonstrando como usar os bindings para analisar amostras Backspace: examples/analyze_backspace.py
  • Exemplos de script IDApython estão integrados ao plugin do IDA, você pode vê-los aqui: https://yaps8.github.io/grap/html/scripting_css.html

Documentação

Você encontrará mais documentação na pasta doc/:

  • doc/COMPILE_OPTIONS.md
  • doc/DEBUG.md
  • doc/TESTS.md
  • doc/syntax_highlighting.md

A sintaxe dos grafos de padrão e teste é detalhada no arquivo grap_graphs.pdf na seção de releases.

Licença

O grap é licenciado sob a licença MIT. O texto completo da licença pode ser encontrado em LICENSE.

Baixar ferramenta