unjam

Reconnaissance

CLI-утилита для извлечения структурированных данных из HTML-страниц Blogger. В режиме --cve парсит CVE-записи из постов Chrome Release Blog: извлекает идентификатор уязвимости, серьёзность (Critical/High/Medium/Low), CVE ID, описание и репортёра. Также умеет распаковывать JavaScript-объекты _WidgetManager в JSON. Написан на Deno/TypeScript, поставляется в виде статических бинарников для Linux/macOS/Windows.

Добавлен 16.07.2026 · Обновлён 16.07.2026 · Reconnaissance
Установка
# Скачать готовый бинарник (Linux x86_64)
curl -Lo unjam https://git.sr.ht/~hrbrmstr/unjam/blob/main/unjam-linux-x86_64
chmod +x unjam && sudo mv unjam /usr/local/bin/

# macOS (Apple Silicon)
curl -Lo unjam https://git.sr.ht/~hrbrmstr/unjam/blob/main/unjam-mac-arm64
chmod +x unjam && sudo mv unjam /usr/local/bin/

# Из исходников (требует Deno >= 2.0)
git clone https://git.sr.ht/~hrbrmstr/unjam
cd unjam
deno install --global --allow-net -n unjam unjam.ts

# Пример: извлечь CVE из последнего Chrome Release
unjam --cve https://chromereleases.googleblog.com/... | jq '.[] | select(.severity == "Critical")'
переведено ИИ

unjam

Извлекает структурированные данные со страниц Blogger.

Два режима: - По умолчанию — преобразует литералы объектов JavaScript из _WidgetManager._SetDataContext в правильный JSON (метаданные виджетов). - --cve — парсит записи CVE из постов блога Chrome Release.

Преобразование JS в JSON обрабатывает строки в одинарных кавычках, шестнадцатеричные escape-последовательности \xNN и ключевые слова True/False/None.

Установка

Загрузите готовую сборку или скомпилируйте из исходников.

Готовые сборки

Платформа Бинарный файл
macOS arm64 (Apple Silicon) unjam-mac-arm64
macOS x86_64 (Intel) unjam-mac-x86_64
Linux x86_64 unjam-linux-x86_64
Windows x86_64 unjam-win-x86_64.exe

Из исходников

Требуется Deno ≥ 2.0.

deno install --global --allow-net -n unjam unjam.ts
# or
deno task compile

Использование

Метаданные виджетов (по умолчанию)

# From URL
unjam https://chromereleases.googleblog.com/2026/06/stable-channel-update-for-desktop_0175352312.html

# Minified
unjam --raw https://example.blogspot.com/page.html | jq .

# From a cached file
cat page.html | unjam

Извлечение CVE (посты Chrome Release)

unjam --cve https://chromereleases.googleblog.com/... | jq '.[] | select(.severity == "Critical")'

unjam --cve --raw https://chromereleases.googleblog.com/... | jq 'length'

# Output fields per CVE entry:
#   issueId, issueUrl, severity, cveId, description, reporter, reportedOn

Выходные данные

Режим по умолчанию

Форматированный JSON-массив контекстов данных виджетов. Каждый элемент содержит поля name и data:

name Содержание
blog Метаданные блога, ссылки на ленты, язык, информация о записях/страницах
features Включённые возможности Blogger
messages Переводы строк интерфейса
template Имя шаблона и флаги адаптивности
view Состояние просмотра — тип страницы, ID записи, URL, заголовок

Режим --cve

[
  {
    "issueId": "506558270",
    "issueUrl": "https://issues.chromium.org/issues/506558270",
    "severity": "Critical",
    "cveId": "CVE-2026-13774",
    "description": "Use after free in Extensions.",
    "reporter": "Google",
    "reportedOn": "2026-04-26"
  }
]

Как это работает

Извлечение данных виджетов

Страницы Blogger содержат встроенный скрипт вида:

_WidgetManager._SetDataContext([{'name': 'blog', 'data': {…}}]);

Аргумент — литерал массива JavaScript со строками в одинарных кавычках, шестнадцатеричными escape-последовательностями \xNN и ключевыми словами True/False/None — ничего из этого не является валидным JSON. unjam преобразует его за три прохода:

  1. Одинарные кавычки → двойные кавычки — посимвольный обход с учётом экранированных кавычек внутри строк
  2. \xNN\u00NN — преобразование шестнадцатеричных escape-последовательностей JS в escape-последовательности Unicode JSON
  3. Преобразование ключевых словTruetrue, Falsefalse, Nonenull

Извлечение CVE

Удаляет HTML-теги, находит раздел "Security Fixes and Rewards", затем извлекает каждую запись вида [N/A][ ISSUE ] Severity CVE-YYYY-NNNN: Description. Reported by... с помощью регулярного выражения. Удаляет дубликаты идентичных записей (Blogger отрисовывает тело поста дважды).

Сборка для всех платформ

deno task compile:all
Комментарии
Войдите, чтобы оставить комментарий