HexLasso/FF-16
GitHub: HexLasso/FF-16
FF-16 是一个静态分析工具,通过扫描二进制文件中频繁出现的 16 位 pattern 来帮助用户定位数据结构并理解文件布局。
Stars: 0 | Forks: 0
# FF-16 (查找频繁出现的 16 位)
## FF-16 的功能是什么?
FF-16 是一个静态分析工具,用于在整个文件中查找频繁出现的本地 16 位 pattern。它可以帮助从频繁出现的 pattern 中定位结构,并理解文件布局。
## 命令行用法
```
ff-16 [filename] [-d ] [<-bpc <1..256>|-cpf <1..65536>>] [-g <0..127>] [-t <1..255>]
Target file
-d Dictionary file (Default: dict.csv)
-bpc <1..256> Blocks per chunk (Default: 1)
-cpf <1..65536> Chunks per file (Default: not specified)
-g <0..127> Max gaps (Default: 31)
-t <1..255> Freq threshold (Default: 5)
```
## 理解结果
`Offset` 和 `Size` 列指示了文件中的数据区域。
`Pattern` 列显示了频繁出现的 pattern。
`Ascii` 列显示了 pattern 的文本表示形式,如果不可打印则显示为 `.`。
`Bpc` 列指示结果是按 block 显示(`Bpc = 1`)还是汇总为 chunk 显示(`Bpc > 1`)。
`Dict` 列显示了字典中该 pattern 对应的文本。
### 块 (`Bpc = 1`)
`Freq` 列指示了数据区域中 pattern 的命中次数。最小值由 Freq 阈值(`-t`)定义,最大值为 255。示例输出:
```
Offset Size Pattern Ascii Bpc Freq Dict
00000000 00000100 00 00 |..| 1 77 -
00000100 00000100 00 00 |..| 1 127 -
00000200 00000100 00 00 |..| 1 165 -
00000300 00000100 00 00 |..| 1 255 -
00000400 00000100 00 00 |..| 1 13 -
00000500 00000100 01 64 |.d| 1 10 -
00000600 00000100 CC CC |..| 1 33 -
00000700 00000100 00 00 |..| 1 22 -
00000800 00000100 00 00 |..| 1 34 -
```
### Chunk (`Bpc > 1`)
`Freq` 列指示了一个 chunk 中有多少个 block 包含该 pattern。最大值为 `Bpc`。示例输出:
```
Offset Size Pattern Ascii Bpc Freq Dict
00000000 00002D00 00 00 |..| 45 13 -
00002D00 00002D00 CC CC |..| 45 33 -
00005A00 00002D00 00 00 |..| 45 19 -
00008700 00002D00 00 +(23) 00 |..| 45 20 -
0000B400 00002D00 00 +(3) 00 |..| 45 24 -
0000E100 00002D00 00 +(3) 00 |..| 45 35 -
00010E00 00002D00 00 +(3) 00 |..| 45 34 -
00013B00 00002D00 00 +(3) 00 |..| 45 23 -
00016800 00002D00 FF +(27) FF |..| 45 17 -
00019500 00002D00 00 +(3) 00 |..| 45 23 -
```
## 示例
### 简单用法
运行分析的最简单方法。
```
go run ff-16.go .\sample.bin
```
### 使用 `-bpc`
使用 `-bpc` 参数将每个 chunk 的 block 数量设置为 `4`,并控制输出粒度。
```
go run ff-16.go .\sample.bin -bpc 4
```
### 使用 `-cpf`
使用 `-cpf` 参数将 block 结果合并为 `40` 个 chunk,并控制总输出长度。
```
go run ff-16.go .\sample.bin -cpf 40
```
### 字典用法
在字典文件(例如 `mydict.csv`)中,每一行包含一个 pattern 和该 pattern 要显示的文本,两者之间用 `;` 分隔。
```
00 +(7) 00; QWORD
00 +(3) 00; DWORD
CC CC; INT 3
```
字典文件通过 `-d` 参数指定。
```
go run ff-16.go .\sample.bin -d .\mydict.csv
```
## 术语
| 术语 | 描述 |
| --- | --- |
| Block | 一个 block 由一系列字节组成。block 的大小始终为 256 字节,但如果文件大小不是 256 的倍数,则最后一个 block 除外。 |
| Chunk | 一个 chunk 由一个 block 或一系列 block 组成。 |
| Pattern | Pattern 是指一个 block 中频繁出现的双字节数据序列,这两个字节之间可能有也可能没有 gap。 |
| Gap | Pattern 中两个字节之间要跳过的字节数。 |
| Blocks Per Chunk (BPC) | 一个 chunk 中的 block 数量。 |
| Chunks Per File (CPF) | 文件中的 chunk 数量。 |
| Pattern frequency | 给定 pattern 在一个 block 中出现的次数。 |
| Frequency threshold | 该阈值定义了具有统计意义的最小 pattern frequency。 |
| Dictionary | 一个用户可编辑的 CSV 文件中的 pattern-描述配对列表,用于 pattern 查找。 |
## 使用场景
* 快速了解文件的布局
* 在高熵数据中寻找冗余
标签:EVTX分析, 二进制分析, 云安全监控, 云安全运维, 云资产清单, 数据结构, 日志审计, 模式识别, 逆向工程, 静态分析