Сканер скрытых угроз в коде и данных — находит невидимые символы Юникода, скрытую стеганографию, утёкшие секреты и подозрительный код. Hidden-threat scanner for source code and data files.
Раньше инквизиторы искали ведьм по скрытым приметам. Инквизитор ищет ту же нечисть — спрятанную в исходном коде.
ShashevPro · https://www.shashevpro.ru/
В марте 2026 года прокатилась волна атаки Glassworm: за одну неделю было заражено более 150 репозиториев на GitHub, а также пакеты npm и расширения VS Code. Вредоносный код прятали в невидимых символах Юникода — он выглядит как пустая строка в любом редакторе и терминале, а «прикрытие» вокруг полезной нагрузки генерировал ИИ. Обычный просмотр кода и классические анализаторы против такого почти бесполезны: нужно смотреть на байты, а не на то, что рисует редактор.
Инквизитор закрывает именно эту дыру.
| Категория | Что именно |
|---|---|
| Невидимые символы | zero-width (U+200B/C/D, U+2060…), селекторы начертания, tag-символы (ASCII-контрабанда), Private Use Area, bidi-override (Trojan Source), управляющие символы |
| Стеганография | расшифровывает скрытые сообщения несколькими схемами (бинарная, V2/октал, кватернарная, hex16) и распознаёт метку автора формата ShashevPro |
| Гомоглифы | слова со смешанными алфавитами (латиница + кириллица) — частый приём маскировки |
| Секреты | ключи AWS, токены Telegram/GitHub/Slack/Stripe, приватные ключи, JWT, парольные присваивания — в кавычках и без кавычек (.env, YAML, ini), с оценкой энтропии |
| Закодированные строки | Base64 / Hex в коде — пытается раскрыть содержимое |
| Водяные знаки | __author__, copyright, метки в комментариях |
| Подозрительный Python | exec/eval/compile (особенно с base64.b64decode), динамические импорты, сетевые вызовы, запуск команд оболочки |
| Java | запуск процессов, рефлексия, небезопасная десериализация, ScriptEngine, динамическая загрузка классов |
| Скрипты (.ps1/.bat/.cmd/.vbs/.js/.sh) | обфускация, загрузчики, обход AV, персистентность |
| Web (.html/.htm/.svg) | вредоносный JS, фишинговые формы, скрытые iframe, meta-redirect, script в SVG |
| Документы (.docx/.xlsx/.pptx/.pdf) | VBA-макросы, инъекции в формулы, JavaScript и Launch в PDF, встроенные файлы, внешние ссылки |
| Конфиги / данные (.env/.yaml/.json/.ini/.toml/.xml…) | сканируются на секреты, невидимые символы и стего |
Секреты в отчёте маскируются (sk_live…p7dc), чтобы не светить их целиком.
pip install -r requirements.txtМинимально для графического интерфейса нужен только PyQt6. Движок и
консольный режим работают на чистой стандартной библиотеке Python 3.10+ —
без обязательных зависимостей.
Готовая сборка .exe не имеет платной цифровой подписи — покупать её за
сотни долларов в год для бесплатного проекта несправедливо. Поэтому при
первом запуске Windows может показать синее окно «Защита компьютера
(SmartScreen)».
Это нормально и безопасно. Нажмите «Подробнее» → «Выполнить в любом случае».
Если антивирус ругается — это ложное срабатывание, типичное для программ, собранных через PyInstaller. Исходный код полностью открыт: вы можете проверить его сами или собрать программу из исходников (см. раздел «Сборка»).
Графический интерфейс (просто перетащите файл или папку):
python main.pyНа Windows можно запустить двойным кликом по run.bat.
Консольный режим (цветной вывод, удобно для CI):
python main.py path/to/project # проверить папку
python main.py file.py --lang en # на английском
python main.py src --html report.html # HTML-отчёт
python main.py src --save report.txt # текстовый отчёт
python main.py src --json report.json # JSON-отчёт (для CI/интеграций)
python main.py src --exclude "tests/*" # пропустить пути (можно несколько раз)
python main.py src --fail-on medium # код возврата 1 при medium и выше
python main.py file.py --sanitize # удалить невидимые символы → *.cleaned.*
python main.py file.py --sanitize --in-place # …перезаписать оригинал
python main.py src --quiet --json out.json # без вывода, только отчётКод возврата (порог задаётся --fail-on, по умолчанию high):
0 — чисто, 1 — найдены находки выбранного уровня и выше, 2 — путь
не найден, 3 — не удалось запустить графический интерфейс.
- name: Инквизитор — проверка на скрытые угрозы
run: |
python main.py . --quiet --fail-on high \
--exclude "tests/*" --json inkvizitor.jsonМетка кодируется невидимыми символами (схема V2) и имеет вид:
SHASH|shashevpro.ru|2026-06-16|1A3C7883
└─┬─┘ └─────┬─────┘ └────┬───┘ └───┬──┘
магия домен дата CRC32
Инквизитор распознаёт метку, проверяет контрольную сумму и показывает: «Обнаружена метка автора: shashevpro.ru, дата 2026-06-16».
Инквизитор только обнаруживает метку. Её создание выполняется отдельным инструментом ShashevPro.
pytest -qРегрессионный набор (tests/test_engine.py) покрывает round-trip меток, все
схемы стеганографии, детекторы секретов (в т.ч. непрокавыченные .env),
AST-анализ, гомоглифы, исключения путей и устойчивость к битому вводу.
pip install pyinstaller
pyinstaller --noconfirm Inkvizitor.specГотовый файл появится в dist/Inkvizitor.exe.
Для удобства есть три готовых сборочных скрипта — запускаются двойным кликом:
| Скрипт | Что собирает | Когда использовать |
|---|---|---|
build.bat |
GUI, один файл Inkvizitor.exe |
обычная сборка для конечных пользователей |
build_onedir.bat |
GUI, папка dist\Inkvizitor\ |
нужен более быстрый старт (onedir) |
build_console.bat |
лёгкий Inkvizitor-cli.exe без PyQt6 |
CI, серверы, автоматизация (только консоль) |
Скрипты сами находят Python (py -3 или python), ставят зависимости,
используют Inkvizitor.spec, если он есть, и проверяют, что EXE действительно
создан.
Иконка
assets/icon.png/assets/icon.ico— заглушка. Замените её своим файлом, сохранив имена.
Проект задуман модульным, чтобы добавлять новое было просто:
- Новый секрет → добавьте строку в
SecretDetector._PATTERNS(engine.py). - Новый невидимый символ → дополните множества в
classify_char(engine.py). - Новая схема стеганографии → добавьте алфавит в
_SCHEMES; если он использует символы вне zero-width, добавьте их в_STEGO_CAPABLE. - Новое правило AST → добавьте проверку в
AstAnalyzer(engine.py). - Новый тип файла → расширьте
_*_EXTвScanner. - Перевод / новый язык → словарь
STRINGSвi18n.py.
Структура:
main.py точка входа (GUI + консоль, все CLI-флаги)
engine.py движок: все детекторы, без сторонних зависимостей
i18n.py переводы RU / EN
reporting.py отчёты (текст + HTML + JSON)
gui.py интерфейс PyQt6
tests/ регрессионные тесты (pytest)
assets/ иконка
Inquisitor scans source code and data files for hidden author marks, invisible Unicode characters, steganographic payloads, leaked secrets and suspicious code — the kind used by the 2026 Glassworm supply-chain attacks that hide malware in characters you cannot see.
- GUI:
python main.py— drag a file or folder, get a traffic-light report. - CLI:
python main.py <path> --lang en --json report.json --fail-on high. - Scans Python, Java, scripts, web files, Office/PDF documents, and config
files (
.env, YAML, JSON, ini…) — including unquoted secrets. - Zero third-party dependencies in the engine; only the GUI needs
PyQt6. - Machine-readable JSON output and CI-friendly exit codes.
--sanitizestrips invisible characters from files.- Fully bilingual (Russian / English), switchable on the fly.
- Tested:
pytest -q.
A note on the Windows warning: the prebuilt .exe is not signed with a
paid code-signing certificate — paying hundreds of dollars a year for a free
project isn't fair. On first launch Windows may show a blue "Windows protected
your PC (SmartScreen)" window. This is normal and safe — click "More info" →
"Run anyway". If your antivirus flags it, that's a false positive common to
PyInstaller builds. The full source is open — review it yourself or build from
source.
MIT (см. файл LICENSE). Используйте, изучайте, улучшайте.
Сделано с уважением к коллегам · ShashevPro · https://www.shashevpro.ru/