ff-16-tui
Interactive TUI that finds frequent 16-bit patterns in a file
TLDR
SYNOPSIS
ff-16-tui file [-d dictionary]
DESCRIPTION
ff-16-tui (Find Frequent 16-bit Text User Interface) is an interactive static-analysis viewer. For the current 256-byte window it counts two-byte patterns, including pairs separated by a configurable gap, and lists the ten most frequent matches that meet the threshold.Each listed pattern shows hex (adjacent bytes, or `AA +(N) BB` when a gap is used), a printable ASCII pair, Ones (popcount of both bytes), Freq (hits in the window), and Dict (a label from the dictionary when the hex form matches). Selecting 0–9 highlights those occurrences in the hexdump.The optional dictionary is a semicolon-separated CSV (`pattern; label`) with `#` comments. The upstream `dict.csv` tags common text bigrams, alignment padding, x86 opcodes, MSIL opcodes, and similar signatures. Dictionary lookup is case-insensitive on the hex field.
PARAMETERS
file
Binary or other file to inspect. Size must be between 256 bytes and 16 MiB-d dictionary
CSV dictionary of known patterns (default: dict.csv in the working directory). Missing file prints a warning and continues without labels
KEYBOARD SHORTCUTS
← / →
Move the 256-byte view one byte left or right↑ / ↓
Move the view one 16-byte linePgUp / PgDn
Move the view one 256-byte pageHome / End
Jump to the start or end of the file0–9
Highlight the ranked pattern with that index (0 is most frequent among those above the threshold)q / a
Raise or lower the minimum gap between the two pattern bytes (0–127)w / s
Raise or lower the maximum gap (0–127; default range is 0–31)e / d
Raise or lower the minimum number of set bits across both bytes (0–16)r / f
Raise or lower the maximum number of set bitst / g
Raise or lower the frequency threshold (1–255; default 5). Patterns below it are hiddenx
Exit and restore the terminal
CAVEATS
Requires a terminal that supports ANSI colors and raw keyboard input (`golang.org/x/term`). Files smaller than 256 bytes or larger than 16 MiB are rejected. Pattern search is per 256-byte block, not the whole file at once, so frequencies are local to the current view. Default dictionary path is relative to the working directory, not the binary. There is no mouse support; x is the only documented way to quit.
HISTORY
Written in Go by HexLasso. The public repository and sample dictionary were published in 2026.
