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分析, 二进制分析, 云安全监控, 云安全运维, 云资产清单, 数据结构, 日志审计, 模式识别, 逆向工程, 静态分析