Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
grap — 使用基于 Capstone 的反汇编器,定义并匹配用户自定义的图模式与二进制控制流图,支持 CLI、Python 绑定和 IDA 插件。 | Kitploit
工具/GitHubGitHub/quosecgmbh/grap
静态分析逆向工程调试器恶意软件分析二进制分析
GitHubquosecgmbh/grap

grap

使用基于 Capstone 的反汇编器,定义并匹配用户自定义的图模式与二进制控制流图,支持 CLI、Python 绑定和 IDA 插件。

查看仓库
1551134年前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

grap: 在二进制文件中定义和匹配图模式

https://github.com/QuoSecGmbH/grap

grap 接受模式和二进制文件,使用基于 Capstone 的反汇编器从二进制文件中获取控制流图,然后对这些图进行模式匹配。

模式是用户定义的图,包含指令条件(“opcode 是 xor 且 arg1 是 eax”)和重复条件(3条相同的指令、基本块等)。

grap 既可以作为独立工具使用(包含反汇编器和 Python 绑定),也可以作为 IDA 插件使用,利用 IDA 的反汇编结果和逆向分析能力。

支持:

  • 文件:PE、ELF 和原始二进制文件的反汇编,更多文件类型应在 IDA 中正常工作
  • 架构:x86 和 x86_64

快速匹配模式:

快速匹配模式

完整匹配模式:

完整匹配模式

对多个文件进行匹配:

对多个文件进行匹配

从 IDA 交互式创建模式:

直接从 IDA 创建和匹配模式

安装

本文档描述了如何在 Linux 发行版上构建和安装 grap。

您也可以阅读:

  • WINDOWS.md:在 Windows 上安装 grap
  • IDA.md:IDA 插件的安装和使用说明

依赖项

除了编译器(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(需要 3 或更高版本)

因此在 Ubuntu / Debian 上,以下命令应可工作:

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

请注意,这些依赖项是针对最新的 Ubuntu LTS(18.04.3)测试的。根据您的发行版,软件包可能有所不同。

构建和安装

以下命令将构建并安装该项目:

  • mkdir build; cd build/ 建议在专用目录中构建项目
  • cmake ../src/; make 使用 cmake 和 make 进行构建
  • sudo make install 将 grap 安装到 /usr/local/bin/

如果默认 Python 版本为 Python 2,SWIG 可能无法找到 Python 3,可以通过将默认版本切换为 Python 3 来解决。例如在 Ubuntu 上:

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

用法

可以通过以下命令启动该工具:

$ grap [options] pattern test_paths

以下是几个支持的选项示例:

  • grap -h:描述支持的选项

可以让 grap 从字符串推断模式。仅支持少数选项,但对原型设计很有用:

  • grap "opcode is xor and arg1 contains '['" (test.exe):查找带有内存写入的 xor
  • grap -v "sub->xor->sub" (test.exe):-v 会输出推断模式的路径

选择二进制文件的反汇编方式:

  • grap -od (pattern.grapp) samples/*:对文件夹 samples/ 中的文件进行反汇编,但尝试不进行匹配
  • grap -f (pattern.grapp) (test.exe):强制重新反汇编二进制文件,然后将其与 pattern.grapp 进行匹配
  • grap --raw (pattern.grapp) (test.bin):反汇编原始文件(对于 64 位二进制文件使用 --raw-64)

控制输出的详细程度:

  • grap -q -sa (pattern.grapp) (samples/*.grapcfg):匹配已反汇编的文件,显示匹配和不匹配的文件,每行一个
  • grap -m (pattern.grapp) (test.grapcfg):显示所有匹配的节点

选择反汇编文件(.grapcfg)的写入位置;将多个文件与多个模式进行匹配:

  • grap patterns/basic_block_loop.grapp -o ls.grapcfg /bin/ls:将 ls 反汇编为 ls.grapp 并查找基本块循环
  • grap (pattern1.grapp) -p (pattern2.grapp) (test.exe):与多个模式文件进行匹配
  • grap -r -q patterns/ /bin/ -o /tmp/:将 /bin/ 中的所有文件反汇编到 /tmp/ 中,并将它们与 patterns/ 中的所有 .grapp 模式进行匹配(-r 递归选项应用于 /bin/,而不是 patterns/)

模式示例

以下模式检测在 Backspace 样本中找到的由 xor 后接 sub 组成的解密循环:

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]
}

注意,模式文件可以包含多个模式图。

您可以在两个目录中找到其他模式示例:

  • patterns/ 包含一些对任何二进制文件都有用的模式,例如检测短循环或检测基本块上的循环的模式,
  • examples/ 包含用于针对 Backspace 恶意软件的模式(参见 examples/backspace_samples.md 以获取二进制样本)。

教程及更多示例

关于恶意软件样本:

  • 使用 grap(CLI、IDA)浏览恶意软件样本:https://yaps8.github.io/blog/grap_qakbot_navigation
  • 自动解析函数和解密(Python 绑定):https://yaps8.github.io/blog/grap_qakbot_strings

Python 绑定使用:

  • 演示如何使用绑定分析 Backspace 样本的 Python 文件:examples/analyze_backspace.py
  • IDApython 脚本的示例已集成到 IDA 插件中,您可以在此处查看:https://yaps8.github.io/grap/html/scripting_css.html

文档

您可以在 doc/ 文件夹中找到更多文档:

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

模式和测试图的语法详细记录在发布版本中的文件 grap_graphs.pdf 中。

许可证

grap 采用 MIT 许可证。完整许可证文本可在 LICENSE 中找到。

下载工具