
Бинарный визуализатор и инструмент триажа — энтропия, байт-классы и поверхности Гильберта, точечные диаграммы и графы потока управления на основе единой модели адресного пространства.
Инструмент визуализации и триажа бинарных файлов: связанные интерактивные представления (энтропия, гистограммы, поверхности изображений/точечных графиков, графы потока управления) поверх единой модели адресного пространства.
pipx install binviz && binviz serve
Откройте файл — и каждое представление смотрит на одно и то же адресное пространство. Выделите диапазон в одном — остальные последуют за ним; цель — ответить на вопрос «что это за область», рассматривая её сразу несколькими способами.
binviz model разбирает ELF/PE/Mach-O через LIEF в области, символы и отображение смещение↔виртуальный адрес, материализуя пропуски и наложения. Некорректный ввод откатывается к сырой модели, а не завершается ошибкой.binviz triage сообщает, на что похож файл и почему; в интерфейсе каждая находка кликабельна и ведёт к байтам, из которых она получена.Интерфейс — пять рабочих областей: Обзор, Байты, Паттерны, Код и Всё — поверх одного выделения. Только статический анализ: образцы разбираются, но никогда не исполняются.




Отрисовываются тем же кодом, которым рисует интерфейс, прямо из CLI — перегенерируйте с помощью python docs/make_plates.py.
| Статический бинарник | Та же программа, упакованная UPX |
|---|---|
![]() | ![]() |
| Код, строки и заполнение разделяются на видимые территории. | Структура схлопывается в однородный шум — признак упаковки. |
![]() | ![]() |
| Оконная энтропия остаётся полосатой и низкой. | Плоская и высокая, вплоть до заглушки распаковки. |
| Правильный шаг строки | Неправильный шаг строки |
|---|---|
![]() | ![]() |
Те же байты, одно число другое. Именно поэтому существует подсказчик шага строки: неправильный шаг строки превращает фотографию в диагональный шум, и вы делаете вывод, что фотографии нет.
ARCHITECTURE.md описывает, как всё устроено: что поставляется, брендинг, который наследует каждая поверхность, соглашения, которым должна следовать новая панель, и ограничения, которые являются намеренными. SECURITY.md — это модель угроз.
python -m venv .venv
# -c фиксирует точные версии, на которых набор тестов зелёный; pyproject.toml
# публикует диапазоны, поэтому без него вы получите то, что резолвится сегодня
.venv/Scripts/pip install -e ".[dev]" -c constraints-dev.txt # POSIX: .venv/bin/pip
# соберите корпус эталонных данных (использует zig cc из pip-пакета ziglang;
# требует UPX в PATH, в $UPX или распакованный в corpus/tools/upx-*/)
make -C corpus # или: python corpus/build.py
# пороги измеряются, а не захардкожены (см. ARCHITECTURE.md §2.1)
python corpus/calibrate.py # записывает corpus/calibration.json
pytest # функциональный набор тестов
pytest -m perf -s # целевые показатели производительности 100 МБ
binviz probe corpus/out/hello_O2
binviz model corpus/out/hello_upx
binviz signal corpus/out/hello_upx --name entropy_4096 --png out.png
binviz hist corpus/out/ramp16.bin --n 2 --dtype u16le --png bigram.png
# поверхности: -p передаёт параметры поверхности
binviz surface corpus/out/hello_static --name hilbert -p mode=byteclass --png h.png
binviz surface corpus/out/rgb_raw.bin --name image -p mode=rgb8 -p width=320 --png i.png
binviz surface corpus/out/repeats.bin --name dotplot -p mode=exact --png d.png
binviz stride corpus/out/bayer_raw.bin --mode bayer_RGGB_RGB_12
# код
binviz disasm corpus/out/hello_O2 --limit 20
binviz functions corpus/out/hello_static --sort size
binviz cfg corpus/out/hello_O2 --func main --dot main.dot
# вердикт и почему
binviz triage corpus/out/hello_upx
binviz serve # 127.0.0.1:8000
Он выводит URL с токеном сессии — откройте его. Каждый маршрут /api требует токен, потому что «он слушает только на localhost» — не защита от веб-страницы в другой вкладке, которая обращается к 127.0.0.1 так же, как к любому другому источнику. Обоснование — в SECURITY.md.
Доступ к файлам ограничен --root (по умолчанию: рабочая директория), поэтому пути за его пределами отклоняются.
У всех четырёх есть флаг и переменная окружения, и все четыре существуют, чтобы локальный вызывающий не потреблял больше, чем вы задумали. Значения по умолчанию выбраны для ноутбука; поднимите их, если ваша машина мощнее.