Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
DiffCatcher — Инструмент командной строки на Rust, который рекурсивно находит Git-репозитории, фиксирует изменения состояния, создаёт диффы, извлекает элементы кода с полными фрагментами и формирует отчёты, ориентированные на безопасность, для рабочих процессов проверки кода и аудита. | Kitploit
Инструменты/GitHubGitHub/teycir/diffcatcher
Статический анализАнализ уязвимостейАнализ КодаСкриптинг и автоматизацияСбор информацииDevSecOpsУтилиты и фреймворкиОбнаружение СекретовНеправильная КонфигурацияАнализ Журналов
GitHubteycir/diffcatcher

DiffCatcher

44 месяцев назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Инструмент командной строки на Rust, который рекурсивно находит Git-репозитории, фиксирует изменения состояния, создаёт диффы, извлекает элементы кода с полными фрагментами и формирует отчёты, ориентированные на безопасность, для рабочих процессов проверки кода и аудита.

Репозиторий

Поддержка разработки

Если этот проект помогает вашей работе, поддержите дальнейшее обслуживание и новые функции.

ETH-кошелёк для пожертвований
0x11282eE5726B3370c8B480e321b3B2aA13686582

QR-код для пожертвований Ethereum

Отсканируйте QR-код или скопируйте адрес кошелька выше.

DiffCatcher Logo

Rust License Security

CLI-инструмент на Rust для рекурсивного обнаружения Git-репозиториев, захвата изменений состояния, генерации диффов, извлечения элементов кода с полными фрагментами и создания отчётов, ориентированных на безопасность, для процессов проверки кода и аудита.


🎯 Основные возможности

  • Обнаружение репозиториев: рекурсивное сканирование каталогов на наличие Git-репозиториев с настраиваемыми фильтрами
  • Отслеживание состояния: захват состояния до/после pull с хешами коммитов, сообщениями и обнаружением "грязных" репозиториев
  • Генерация диффов: автоматическое создание диффов N vs N-1 и исторических диффов с манифестами файлов
  • Извлечение элементов: разбор диффов для идентификации функций, структур, классов, импортов и других элементов для 10+ языков
  • Фрагменты кода: извлечение полного кода до/после с определением границ и контекстными окнами
  • Маркировка безопасности: 18 встроенных шаблонов безопасности (криптография, аутентификация, секреты, SQL-инъекции, XSS и т.д.)
  • Многоформатные отчёты: выходные данные JSON, Markdown, текст и SARIF с межрепозиторным обзором безопасности
  • Режим сравнения веток: дифф любых двух ссылок (веток, тегов, коммитов) в одном репозитории — идеально для ревью пул-реквестов
  • Производительность: параллельная обработка с индикаторами прогресса, LRU-кэширование и инкрементальный режим

Почему не просто bash?

Однострочник вроде ls | while read line; do git -C "$line" diff HEAD~1 HEAD || true; done показывает только сырые диффы. DiffCatcher добавляет рекурсивное обнаружение, извлечение элементов кода, обнаружение шаблонов безопасности, вывод SARIF для CI/CD, параллельную обработку и межрепозиторную агрегацию безопасности. См. полное сравнение ниже.

📋 Содержание

  • Установка
  • Быстрый старт
  • Использование
    • Базовое сканирование
    • Режимы pull
    • Параметры извлечения
    • Маркировка безопасности
    • Файл конфигурации
    • Система плагинов
    • Режим сравнения веток (ревью PR)
    • Вывод SARIF
    • Расширенные возможности
  • Структура отчёта
  • Конфигурация
  • Архитектура
  • Тестирование
  • Документация
  • Участие

🚀 Установка

Из исходного кода

root@kitploit:~
git clone https://github.com/Teycir/DiffCatcher.git
cd DiffCatcher
cargo build --release
./target/release/diffcatcher --help

Требования

  • Rust 1.70+
  • Git 2.0+

⚡ Быстрый старт

root@kitploit:~
# Сканировать все репозитории в каталоге (только fetch, без изменений)
diffcatcher ~/projects

# Выполнить pull и сгенерировать отчёт по безопасности
diffcatcher ~/projects --pull -o ./report

# Сравнить две ветки в одном репозитории (режим ревью PR)
diffcatcher ./my-repo --diff main..feature/auth -o ./pr-report

# Сгенерировать вывод SARIF для GitHub Code Scanning
diffcatcher ~/projects --summary-format sarif,json -o ./report

# Пробный прогон для просмотра того, что будет сканироваться
diffcatcher ~/projects --dry-run

# Быстрое сканирование с 8 параллельными рабочими
diffcatcher ~/projects -j 8 --quiet

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

Базовое сканирование

root@kitploit:~
# Сканирование с настройками по умолчанию (только fetch)
diffcatcher <ROOT_DIR>

# Пользовательский выходной каталог
diffcatcher ~/projects -o ./my-report

# Включить вложенные репозитории и следовать симлинкам
diffcatcher ~/projects --nested --follow-symlinks

# Пропустить скрытые каталоги
diffcatcher ~/projects --skip-hidden

Режимы pull

root@kitploit:~
# Только fetch (по умолчанию — без изменений рабочего дерева)
diffcatcher ~/projects

# Фактически выполнить pull изменений
diffcatcher ~/projects --pull

# Принудительный pull с stash/pop для "грязных" репозиториев
diffcatcher ~/projects --pull --force-pull

# Использовать стратегию rebase
diffcatcher ~/projects --pull --pull-strategy rebase

# Пропустить fetch/pull полностью (только исторические диффы)
diffcatcher ~/projects --no-pull

Параметры извлечения

root@kitploit:~
# Пропустить извлечение элементов (только сырые диффы)
diffcatcher ~/projects --no-summary-extraction

# Извлекать элементы, но пропустить фрагменты кода
diffcatcher ~/projects --no-snippets

# Настроить контекст фрагментов и лимиты
diffcatcher ~/projects --snippet-context 10 --max-snippet-lines 300

# Ограничить количество элементов на дифф
diffcatcher ~/projects --max-elements 1000

Маркировка безопасности

root@kitploit:~
# Пропустить маркировку безопасности
diffcatcher ~/projects --no-security-tags

# Включить тестовые файлы в анализ безопасности
diffcatcher ~/projects --include-test-security

# Использовать пользовательские шаблоны безопасности
diffcatcher ~/projects --security-tags-file ./custom-patterns.json

Файл конфигурации

DiffCatcher может автоматически загружать локальную конфигурацию проекта из:

  • <ROOT_DIR>/.diffcatcher.toml (по умолчанию)
  • пользовательского файла через --config <FILE>
  • отключена через --no-config

Пример:

root@kitploit:~
output = "reports-local"
no_pull = true
history_depth = 2
summary_formats = ["json", "txt"]
no_security_tags = false

[plugins]
security_pattern_files = ["plugins/security-extra.json"]
extractor_files = ["plugins/extractors.json"]

Флаги командной строки по-прежнему переопределяют значения конфигурации, если явно заданы.

Система плагинов

DiffCatcher поддерживает два типа плагинов:

  • Плагины шаблонов безопасности через --security-plugin-file <FILE> (повторяется)
  • Плагины извлечения через --extractor-plugin-file <FILE> (повторяется)

Формат плагина безопасности соответствует JSON --security-tags-file (version, mode, tags).

Формат плагина извлечения:

root@kitploit:~
{
  "version": 1,
  "extractors": [
    {
      "name": "policy-rule",
      "kind": "Config",
      "regex": "^policy\\s+([A-Za-z_][A-Za-z0-9_]*)"
    }
  ]
}

Режим сравнения веток (ревью PR)

root@kitploit:~
# Сравнить две ветки в одном репозитории
diffcatcher ./my-repo --diff main..feature/auth

# Сравнить конкретные коммиты
diffcatcher ./my-repo --diff abc123..def456

# Сравнить с выводом SARIF для интеграции с CI
diffcatcher ./my-repo --diff origin/main..HEAD --summary-format sarif -o ./pr-report

Флаг --diff BASE..HEAD пропускает обнаружение репозитория и fetch/pull — он напрямую сравнивает две ссылки (ветки, теги или SHA коммитов) и запускает полный конвейер извлечения + маркировки безопасности на результате.

Вывод SARIF

root@kitploit:~
# Генерация SARIF вместе с другими форматами
diffcatcher ~/projects --summary-format sarif,json,md

# Только SARIF для загрузки в CI/CD
diffcatcher ~/projects --summary-format sarif -o ./report

Когда sarif включён в --summary-format, в корне отчёта создаётся файл results.sarif. Этот файл соответствует стандарту SARIF 2.1.0 и интегрируется с GitHub Code Scanning, VS Code SARIF Viewer, Azure DevOps и другими инструментами, совместимыми с SARIF.

Расширенные возможности

root@kitploit:~
# Инкрементальный режим (пропустить неизменённые репозитории)
diffcatcher ~/projects --incremental -o ./report

# Фильтрация по шаблону ветки
diffcatcher ~/projects --branch-filter "main"

# Настройка глубины истории
diffcatcher ~/projects --history-depth 5

# Вывод JSON для CI/CD
diffcatcher ~/projects --quiet --json > result.json

# Подробный вывод с обнаруженными путями
diffcatcher ~/projects --verbose

📁 Структура отчёта

root@kitploit:~
<report_dir>/
├── summary.json                    # Глобальный сводный отчёт
├── summary.md                      # Сводка в формате Markdown
├── results.sarif                   # Вывод SARIF 2.1.0 (при --summary-format sarif)
├── security_overview.json          # Агрегация безопасности по всем репозиториям
├── security_overview.md
├── <repo-name>/
│   ├── status.json                 # Состояние репозитория
│   ├── pull_log.txt
│   └── diffs/
│       ├── diff_N_vs_N-1.patch     # Сырой унифицированный дифф
│       ├── changes_N_vs_N-1.txt    # Манифест файлов
│       ├── summary_N_vs_N-1.json   # Извлечение элементов
│       ├── summary_N_vs_N-1.md
│       └── snippets/
│           ├── 001_validate_token_ADDED.rs
│           ├── 002_check_permissions_BEFORE.rs
│           ├── 002_check_permissions_AFTER.rs
│           └── 002_check_permissions.diff
└── ...

⚙️ Конфигурация

Флаги командной строки

Полный список опций см. в diffcatcher --help.

Пользовательские шаблоны безопасности

Создайте JSON-файл с собственными шаблонами:

root@kitploit:~
{
  "version": 1,
  "mode": "extend",
  "tags": [
    {
      "tag": "pii-handling",
      "description": "PII data processing",
      "severity": "High",
      "patterns": ["ssn", "social_security", "passport"]
    }
  ]
}

Используйте с --security-tags-file ./patterns.json

🏗️ Архитектура

root@kitploit:~
src/
├── cli.rs              # Разбор аргументов
├── scanner.rs          # Обнаружение репозиториев
├── git/                # Операции с Git
│   ├── commands.rs     # Обёртки Git
│   ├── state.rs        # Захват состояния
│   ├── diff.rs         # Генерация диффов
│   └── file_retrieval.rs
├── extraction/         # Извлечение элементов
│   ├── parser.rs       # Парсер унифицированных диффов
│   ├── elements.rs     # Обнаружение элементов
│   ├── snippets.rs     # Извлечение фрагментов кода
│   ├── boundary.rs     # Отслеживание границ (скобки/отступы)
│   └── languages/      # Специфичные для языка шаблоны
├── security/           # Маркировка безопасности
│   ├── tagger.rs       # Сопоставление шаблонов
│   ├── patterns.rs     # Встроенные шаблоны
│   └── overview.rs     # Агрегация по репозиториям
└── report/             # Генерация отчётов
    ├── writer.rs       # Структура каталогов
    ├── json.rs         # Сериализация JSON
    ├── sarif.rs        # Вывод SARIF 2.1.0
    ├── markdown.rs     # Форматирование Markdown
    └── snippet_writer.rs

Сравнение с Bash

Простой однострочник на bash может вывести диффы:

root@kitploit:~
ls | while read line; do git -C "$line" diff HEAD~1 HEAD || true; done

Это подходит для быстрых проверок, но DiffCatcher добавляет значительные возможности:

Однострочник на bash — это ~100 байт. DiffCatcher — это инструмент аудита, ориентированный на безопасность, с полным извлечением элементов кода.

🧪 Тестирование

root@kitploit:~
# Запуск всех тестов
cargo test

# Запуск определённого набора тестов
cargo test security_tagger

# Запуск с выводом
cargo test -- --nocapture

Тестовое покрытие включает:

  • Модульные тесты для извлечения, маркировки безопасности, определения границ
  • Интеграционные тесты для захвата состояния, генерации диффов, отчётов
  • Тесты Golden-файлов для точности извлечения
  • Тесты граничных случаев (отсоединённый HEAD, пустые репозитории, однокоммитные репозитории)

Бенчмарки производительности

root@kitploit:~
# Компиляция бенчмарк-бинарников
cargo bench --no-run

# Запуск тестов производительности
cargo bench --bench core_bench

Исходный код бенчмарков находится в benches/core_bench.rs и отслеживает пропускную способность парсера/извлечения.

CI/CD

Включены рабочие процессы GitHub Actions:

  • .github/workflows/ci.yml: проверка форматирования, clippy, тесты, сборка бенчмарков
  • .github/workflows/release.yml: сборка пакетов по тегам и публикация релизов на GitHub

📚 Документация

Документация проекта

  • Plan.md — Полная спецификация (v1.2)
  • Roadmap.md — Дорожная карта реализации и прогресс
  • Справочник шаблонов безопасности (см. src/security/patterns.rs)

Документация кода

Все модули содержат исчерпывающую встроенную документацию. Ключевые модули:

  • src/extraction/parser.rs — Парсер унифицированных диффов с извлечением ханков
  • src/extraction/elements.rs — Обнаружение элементов кода с учётом языка
  • src/extraction/snippets.rs — Извлечение полных фрагментов кода с определением границ
  • src/security/tagger.rs — Движок сопоставления шаблонов безопасности
  • src/git/commands.rs — Обёртки для операций Git

Генерация полной документации API:

root@kitploit:~
cargo doc --open

🏷️ Теги

#rust #git #security #code-review #diff-analysis #static-analysis #devops #cli-tool #audit #vulnerability-detection #code-quality #snippet-extraction #parallel-processing #security-scanning

🤝 Участие

Вклад приветствуется! Пожалуйста:

  1. Форкните репозиторий
  2. Создайте ветку для функции
  3. Добавьте тесты для новой функциональности
  4. Убедитесь, что cargo test проходит
  5. Отправьте пул-реквест

📄 Лицензия

Лицензия MIT — подробности в файле LICENSE

📧 Контакты

  • Автор: Teycir Ben Soltane
  • Электронная почта: [email protected]
  • Веб-сайт: teycirbensoltane.tn

🔗 Ссылки

  • Репозиторий GitHub
  • Трекер задач
  • Журнал изменений
Скачать инструмент
ФлагПо умолчаниюОписание
-o, --output./reports/<timestamp>Каталог для выходного отчёта
-j, --parallel4Одновременная обработка репозиториев
-t, --timeout120Таймаут операций Git (сек)
-d, --history-depth2Количество исторических коммитов для сравнения
--snippet-context5Строк контекста вокруг изменений
--max-snippet-lines200Максимальное количество строк на фрагмент
--max-elements500Максимальное количество элементов на дифф
--diff—Сравнить две ссылки в одном репозитории (BASE..HEAD)
--summary-formatjson,mdФорматы вывода: json, md, txt, sarif
ВозможностьОднострочник на bashDiffCatcher
Рекурсивное обнаружениеТолько элементы верхнего уровняВложенные репозитории, симлинки, фильтры
Отслеживание состоянияНетХеши коммитов, определение "грязных" репозиториев, журналы pull
Понимание кодаТолько сырой диффИзвлечение функций/структур/классов на 10+ языках
Фрагменты кодаНетПолный код до/после с контекстными окнами
Анализ безопасностиНет18 встроенных шаблонов (аутентификация, криптография, секреты, SQLi, XSS)
Форматы выводаТолько терминалJSON, Markdown, SARIF (GitHub Code Scanning)
Межрепозиторный обзорТолько по отдельным репозиториямАгрегированный отчёт безопасности по всем репозиториям
ПроизводительностьПоследовательнаяПараллельные рабочие, LRU кэширование, инкрементальный режим
Интеграция с CI/CDНетЗагрузка SARIF в GitHub/Azure DevOps
Обработка ошибокПодавление `
Обработка путейСбой при пробелахКорректная обработка всех имён путей
Исторический контекстФиксированный HEAD~1Настраиваемая глубина, отслеживание состояния