



[](https://github.com/c3rb3ru5d3d53c/binlex/stargazers)
[](https://discord.gg/UDBfRpxV3B)
[](https://github.com/c3rb3ru5d3d53c/binlex/blob/master/LICENSE)

|
Binlex - A Binary Genetic Trait Lexer Framework
If maldevs think their binary is FUD, they're about to have an existential crisis.
|
**Binlex** 是一款供恶意软件分析人员和研究人员使用的工具,它从二进制文件中提取**指令**、**基本块**和**函数**,并将它们组织成由**基因组**、**染色体**、**等位基因对**和**基因**组成的结构化层次结构。🦠🔍
- 一个**基因组**代表二进制文件中的一条**指令**、一个**块**或一个**函数**。🧬
- 每个基因组包含一个或多个**染色体**,它们是指令、函数或块内的数据**模式**或**序列**。
- 一个**染色体**由**等位基因对**组成,每对代表**两个基因**,编码为一个**单字节**(拆分为两个**半字节**)。
- 一个**基因**是最小的单位,由一个**半字节**表示。
这种分层分解允许 **binlex** 通过将恶意软件的代码结构视为“DNA指纹”来分析和比较恶意软件二进制文件,从而更容易检测样本之间的模式、相似性和变异。
与依赖**纯 Python** 且速度较慢的工具不同🐢,**binlex** 的设计注重速度、简单性和灵活性。其**命令行界面**帮助分析人员在**成百上千个恶意软件样本**中搜索模式,从而节省**时间** ⏳ 和**资源** 💰。
对于恶意软件分析人员和逆向工程师,**binlex** 包含一个 IDA 插件和一个向量数据库(**binlex** 服务器),旨在识别相似的函数。
虽然 **BinDiff** 和 **Diaphora** 等工具擅长单文件比较,但 **binlex** 服务器的运作方式更像 **Lumina**,但采用了现代方法。**binlex** 服务器不依赖 FLIRT 签名,而是利用 **图神经网络 (GNN)** 的强大功能以及具有架构特定归一化的相似性哈希,以实现更高的精度和灵活性。
通过 **binlex** 服务器,您可以访问用户名、时间戳以及派生函数签名的样本哈希,这些是协作分析的关键洞察。
我们还为恶意软件分析人员和逆向工程师提供了一套命令行工具,以帮助加速威胁搜寻和检测中常见模式的搜寻工作。
对于开发者,**binlex** 提供了 **Rust API** 和 **Python 绑定**,以便在许可限制极少的情况下构建自定义工具。🔓
作为对抗恶意软件斗争的一部分,**binlex** 是免费使用的——只需从发布页面**下载二进制文件**即可。📥
## 🚀 特性
最新版本的 **binlex** 提供以下令人惊叹的特性!
| 特性 | 描述 |
|---------------------------------|-------------------------------------------------------------------------------------------------|
| 🌐 **平台** | - Windows 🪟
- MacOS 🍏
- Linux 🐧 |
| 🌐 **格式** | - PE
- MachO
- ELF |
| 🌐 **架构** | - AMD64
- I386
- CIL |
| 🧵 **多线程** | - 🔒 线程安全的反汇编队列
- 🚄 高效的多线程工具以实现最大效率 |
| ⚙️ **可定制的性能** | 开关特性以优化您的用例 |
| 📉 **JSON 字符串压缩** | 通过 JSON 压缩节省内存 |
| 🧩 **相似性哈希** | - 🔍 Minhash
- 🔒 TLSH
- 🔐 SHA256 |
| 🧩 **函数符号** | - 使用 **blpdb**、**blelfsym** 或 **blmachosym** 或您自己的工具作为标准输入将函数符号传递给 **binlex** |
| 🏷️ **标记** | 轻松组织的标记功能 |
| 🎯 **通配符** | 非常适合生成 YARA 规则,现在分辨率已达半字节级别! |
| **API** | - 🦀 Rust API
-Python API |
| 🤖 **机器学习特性** | - 📊 归一化特征
- 🔍 向量数据库
- 📚 Jupyter Notebook
- 🧠 函数识别 |
| 📂 **虚拟镜像** | - 虚拟镜像的高效映射缓存
- 🗄️ 兼容 ZFS / BTRFS
- 加速重复性任务和过滤
- 闪电般的速度 ⚡ |
通过缓存虚拟镜像,**binlex** 能够以更快的速度执行,使重复运行更快、更高效。
## 构建
要构建 **binlex**,您需要 Rust。
### Linux, MacOS 和 Windows
在 Linux 和 MacOS 上安装非常简单。
```
cargo build --release
```
### Python 绑定
```
cd src/bindings/python/
virtualenv -p python3 venv/
source venv/bin/activate
pip install maturin[patchelf]
maturin develop
python
>> import binlex
```
### 打包
要为各种平台构建包,请使用 `Makefile`。
```
make zst # Make Arch Linux Package
make deb # Make Debian Package
make wheel # Make Python Wheel
```
生成的包将位于 `target/` 目录中。
### IDA 插件
安装 IDA 插件很容易,只需确保在 IDA 的 Python 环境中安装了 Python 绑定。
现在将 **binlex** 插件的目录复制到您的插件目录。
```
mkdir -p ~/.idapro/plugins/
cp -r scripts/plugins/ida/binlex/ ~/.idapro/plugins/
cd ~/.idaapro/plugins/binlex/
pip install -r requirements.txt
```
您还需要确保服务器正在运行,建议使用 GPU 硬件以加快 GNN 推理速度,但这并非必需。
```
cd scripts/blserver/
make -C configs/
docker-compose up -d
```
完成后,以下服务将可用。
| **服务名称** | **描述** | **URL** |
|------------------------------|---------------------------------------------|-----------------------------------------|
| Binlex Server | API 文档 | `https://127.0.0.1/swagger` |
| Attu Milvus 向量数据库 | Attu Milvus 向量数据库 UI | `https://127.0.0.1:8443` |
| MinIO | MinIO 对象存储 | `https://127.0.0.1:7443` |
| JupyterHub | JupyterHub Web GUI | `https://127.0.0.1:6443` |
默认 API 密钥是 `39248239c8ed937d6333a41874f1c8e310c5070703af30c06e67b0d308cb82c5`,您可以将其与您的 IDA 插件一起使用。
打开 IDA 后,您应该会看到 **binlex** 的欢迎消息。
使用 IDA 插件,您拥有多种功能,可帮助您编写 YARA 规则和进行相似性分析。
**主菜单:**
- 导出数据库(导出为 JSON)
- 索引数据库
- 搜索数据库(搜索并应用函数名称)
- 函数(函数表)
- 导出字节颜色映射(将字节颜色映射保存为 SVG)
- JSON 查询(在 IDA 内部进行 jq 查询)
**反汇编上下文菜单:**
- 复制 YARA 模式
- 复制 Hex
- 从选择中复制 MinHash
- 从选择中复制 TLSH
- 扫描 MinHash
- 扫描 TLSH
设置 API 密钥和 URL 后,它会保存在 IDA 注册表中,并在将来自动为您补全。
复制模式和复制 Hex 功能旨在帮助编写 YARA 规则,而复制相似性哈希和扫描则用于搜寻相似数据。
为了确保其他人可以使用同一服务器访问您的数据库,请单击 `Index Database`,这将把函数数据推送到服务器。
要查找函数名称,请单击 `Search Database`,一旦完成,它将填充一个表格,其中包含来自向量数据库的最佳匹配项,您可以将其应用到您的项目中。
### 文档
```
cargo doc
```
您也可以打开文档。
```
cargo doc --open
```
## 二进制基因组、染色体、等位基因对和基因
在 **binlex** 中,使用了一组受遗传学启发的术语来描述和象征二进制代码的结构和特征。该术语反映了不同抽象与其遗传类比之间的关系:
- **基因组**:代表正在分析的每个对象,例如函数或块。它封装了所有信息,包括元数据、染色体和其他属性。
- **染色体**:代表从块或函数中提取的核心模式或序列。染色体是识别二进制关键特征的蓝图,其中不包含内存寻址(由 `?` 等通配符表示,单个通配符代表单个基因)。
- **等位基因对**:染色体内部的一个单位,由**两个基因**组成。等位基因对是染色体的构建块,将基因组合成有意义的对。
- **基因**:遗传信息的最小单位,代表单个半字节数据(半字节)。
这些抽象之间的关系可以如下可视化:
```
Genome (function / block)
└── Chromosome (pattern / sequence)
└── AllelePair (two genes / single byte / two nibbles)
└── Gene (single nibble)
```
### 基因组示例
```
{
"type": "block",
"architecture": "amd64",
"address": 6442934577,
"next": null,
"to": [],
"edges": 0,
"prologue": false,
"conditional": false,
"chromosome": {
"pattern": "4c8b47??498bc0",
"feature": [4,12,8,11,4,7,4,9,8,11,12,0],
"entropy": 2.2516291673878226,
"sha256": "1f227bf409b0d9fbc576e747de70139a48e42edec60a18fe1e6efdacb598f551",
"minhash": "09b8b1ad1142924519f601854444c6c904a3063942cda4da445721dd0703f290208f3e32451bf5d52741e381a13f12f9142b5de21828a00b2cf90cf77948aac4138443c60bf77ec31199247042694ebb2e4e14a41369eddc7d9f84351be34bcf61458425383a03a55f80cbad420bb6e638550c15876fd0c6208da7b50816847e62d72b2c13a896f4849aa6a36188be1d4a5333865eab570e3939fab1359cbd16758f36fa290164d0259f83c07333df535b2e38f148298db255ac05612cae04d60bb0dd810a91b80a7df9615381e9dc242969dd052691d044287ac2992f9092fa0a75d970100d48362f62b58f7f1d9ec594babdf52f58180c30f4cfca142e76bf",
"tlsh": null
},
"size": 7,
"bytes": "4c8b4708498bc0",
"functions": {},
"number_of_instructions": 3,
"entropy": 2.5216406363433186,
"sha256": "84d4485bfd833565fdf41be46c1a499c859f0a5f04c8c99ea9c34404729fd999",
"minhash": "20c995de6a15c8a524fa7e325a6e42b217b636ab03b00812732f877f4739eeee41d7dde92ceac73525e541f9091d8dc928f6425b84a6f44b3f01d17912ec6e8c6f913a760229f685088d2528447e40c768c06d680afe63cb219a1b77a097f679122804dd5a1b9d990aa2579e75f8ef201eeb20d5650da5660efa3a281983a37f28004f9f2a57af8f81728c7d1b02949609c7ad5a30125ff836d8cc3106f2531f306e679a11cabf992556802a3cb2a75a7fe3773e37e3d5ab107a23bf22754aee15a5f41056859b06120f86cb5d39071425855ec90628687741aa0402030d73e04bc60adb0bd2430560442c4309ae258517fc1605438c95485ac4c8621026a1bb",
"tlsh": null,
"contiguous": true,
"attributes": [
{
"type": "tag",
"value": "corpus:malware"
},
{
"type": "tag",
"value": "malware:lummastealer"
},
{
"entropy": 6.55061550644311,
"sha256": "ec1426109420445df8e9799ac21a4c13364dc12229fb16197e428803bece1140",
"size": 725696,
"tlsh": "T17AF48C12AF990595E9BBC23DD1974637FAB2B445232047CF426489BD0E1BBE4B73E381",
"type": "file"
}
]
}
```
鉴于此 JSON 基因组示例。
- **基因组**:描述块的 JSON 对象,包括其元数据、染色体和属性。
- **染色体**:由模式 `"4c8b47??498bc0"` 描述
- **等位基因对**:`"4c"` 或 `"8b"`
- **基因**:`"4"` 或 `"c"`
使用 **binlex** API 可以突变这些染色体、它们的等位基因对和基因,以促进遗传编程。
这种情况下的遗传编程有几个好处,包括但不限于:
- 在给定数据集中搜寻新样本
- YARA 规则生成
## 命令行
最简单的入门方法是使用命令行,并利用像 `jq` 这样的 JSON 过滤工具。
以下命令使用 `16` 个线程反汇编 `sample.dll`,相关特征是 JSON 对象(每行一个),并通过管道传输到 `jq` 进行过滤和美化。
要查看使用 **binlex** 命令行时可用的选项,请使用 `-h` 或 `--help`。
```
A Binary Pattern Lexer
Version: 2.0.0
Usage: binlex [OPTIONS] --input
Options:
-i, --input
-o, --output