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

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

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

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

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

Категории

Все категории
Loading categories
HiddenSteps — HiddenSteps — локальная персональная платформа интеллектуальной аналитики рабочих процессов | Kitploit
Инструменты/GitHubGitHub/jgalego/hiddensteps
OSINT (Разведка открытых источников)РазведкаЭксфильтрация данныхСбор информацииCTFКонфиденциальностьСтатьи и ИсследованияОбучение и ОбразованиеПодобранные РесурсыУчебные Маршруты и КурсыЛаборатории и Практика
413 дней назадЕщё не проверено

Популярное

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

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

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

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

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

HiddenSteps

HiddenSteps — локальная персональная платформа интеллектуальной аналитики рабочих процессов

Репозиторий

Core crates — статус реализации

Это честное, отражающее текущее состояние дополнение к целевой карте модулей из docs/design/02-system-architecture.md. Здесь сказано, что реально построено, что проверено против настоящего бэкенда, а не мока, и чего всё ещё по-настоящему не хватает, — а не что запланировано (об этом — docs/roadmap/01-implementation-roadmap.md).

Выполните cargo build --workspace && cargo test --workspace && cargo clippy --workspace --all-targets -- -D warnings из корня репозитория. На момент написания: 12 крейтов, 193 проходящих теста, ноль предупреждений clippy, cargo fmt --check чистый — 183 теста в 11 крейтах, которым не нужны ни дисплей, ни внешний сервис, плюс 10 в hiddensteps-observation, которым нужен живой X11-дисплей (проверено там, где он есть; см. соответствующую строку). Четыре теста по замыслу помечены #[ignore] (см. ниже) и не считаются ошибками и не входят в число 193.

Что существует

Плюс, вне crates/ (не входит в корневой workspace — см. объяснение ниже):

Что является открыто заявленным упрощением, а не пробелом

  • Эмбеддинги паттернов хранятся как обычные BLOB в hiddensteps-event-store с вычислением косинусного сходства в Rust, заменяя виртуальную таблицу sqlite-vec из ADR-0007 (см. комментарий в начале event-store/src/schema.sql) — загрузка нативного расширения SQLite не была проверяема в этом окружении, а сам ADR-0007 отмечает, что при реалистичных объёмах использования одним пользователем поведение sqlite-vec и есть полный перебор с точным поиском. Та же семантика, без риска нативного расширения.
  • Модули macOS и Windows в hiddensteps-observation (src/macos/, src/windows/) — это реальный, полный исходный код, написанный под давно стабильные API платформ (CGWindowListCopyWindowInfo; GetForegroundWindow/GetWindowTextW/QueryFullProcessImageNameW) при отсутствии доступного тулчейна macOS/Windows, — и оба теперь чисто компилируются, что подтверждается матрицей задания в . Модуль macOS сначала потребовал одного реального исправления (нетипизированные параметры дженериков по умолчанию у не удовлетворяли границе трейта для ключа — исправлено явной типизацией как ); Windows скомпилировался чисто с первой попытки.

Почему оболочка Tauri и UI находятся вне crates/

crates/* — это корневой workspace из Cargo.toml, полностью собираемый и тестируемый в этом Linux-окружении для разработки без каких-либо системных зависимостей, кроме того, что загружает cargo. Чтобы вообще скомпилироваться, apps/desktop/src-tauri требует webkit2gtk-4.1 (Linux), который это окружение установить не может (нет sudo без пароля, нет рабочего пути через nix/пакетный менеджер — подтверждено прямой попыткой). Вынесение его из workspace означает, что cargo build --workspace остаётся здесь на 100% зелёным, а не вечно красным из-за одного крейта, который никто не может исправить в этой песочнице. По той же причине ему нужна и собственная пустая таблица [workspace] в его Cargo.toml — иначе Cargo всё равно попытается прикрепить его к этому вышестоящему workspace и завершится ошибкой «current package believes it's in a workspace when it's not». У apps/desktop/ui такого ограничения нет, и этот компонент проверяется тем же способом, что и ядро на Rust. Обе части по-прежнему проверяются end-to-end — просто CI вместо этой песочницы.

Примечание о четырёх тестах, помеченных #[ignore]

  • hiddensteps-security::keyring_store::tests::set_get_delete_round_trip_against_the_real_vault — требует реального хранилища учётных данных ОС/сеанса рабочего стола.
  • hiddensteps-observation::linux::shortcuts::tests::grabs_and_ungrabs_a_real_shortcut — выполняет реальный XGrabKey на всю сессию, что было бы разрушительно при автоматическом запуске в общем окружении.
  • tests/ollama_live.rs из hiddensteps-llm-provider (2 теста) — требует реально запущенного экземпляра Ollama. Оба теста фактически запускались во время разработки против реального локального экземпляра qwen3:0.6b (гибридная модель рассуждения с 0,6 млрд параметров) и прошли суммарно примерно за 2 секунды; для другой конфигурации переопределите модель/URL через переменные окружения HIDDENSTEPS_TEST_OLLAMA_MODEL/HIDDENSTEPS_TEST_OLLAMA_URL.

Все четыре — реальные тесты, а не рудименты: §2 в docs/roadmap/03-testing-strategy.md проводит ровно то различие между логикой, которой место за моком в CI, и интеграцией с ОС/сессией/внешним сервисом, которой место в осознанной ручной проверке. Запустите любой из них командой cargo test -p <crate> -- --ignored (добавьте <test name>, чтобы запустить только один) на машине, где это уместно.

Скачать инструмент
КрейтРеализуетКак проверено
hiddensteps-domainБазовые типы: PrivacyLevel/PrivacyState, EventSummary/SignalType, Pattern, Recommendation, AuditEntry и CapturedSignal — тип, который структурно невозможно сохранить (нет Serialize), что обеспечивает соблюдение правила сырых данных из ADR-0006 на уровне типовМодульные тесты: round-trip уровней/упорядочивание, ограничение по TTL в Deep-режиме
hiddensteps-securitySecretStore (ADR-0008): реальная реализация на основе OS-vault (KeyringSecretStore) и реализация в памяти (для тестов); генерация мастер-ключа через CSPRNG (возвращается в обёртке zeroize::Zeroizing, так что ключ затирается при drop, а не остаётся в освобождённой памяти); вывод ключа из парольной фразы через Argon2id для Portable Mode (PassphraseKey затирает свой производный ключ при drop, сохраняя несекретную соль). hiddensteps-event-store аналогично хранит содержащий ключ SQL-текст PRAGMA key/rekey в ZeroizingМодульные тесты против хранилища в памяти и KDF; полный цикл с реальным хранилищем помечен #[ignore] (см. ниже)
hiddensteps-event-storeSqlCipherEventStore (ADR-0003): полная схема из docs/design/07-database-schema.md, CRUD для состояния приватности, событий, журнала аудита, паттернов, связей паттерн↔событие, эмбеддингов паттернов (см. примечание ниже), рекомендаций, конфигурации LLM-провайдера и общих настроек, плюс delete_all_data (транзакционный; также выполняет rekey для «удаления всего», переживающего перезапуск)/export_data/count_rows (диагностика)/delete_expired_events (очистка TTL в Deep-режиме, вызывается из периодического цикла рекомендаций в apps/desktop/src-tauri — ttl_expires_at сохранялся начиная с v0.1.0, но до этого момента ничто не удаляло строки с истёкшим сроком); принудительное соблюдение внешних ключей (PRAGMA foreign_keys = ON), чтобы ON DELETE CASCADE из schema.sql для связей паттерн↔событие действительно выполнялся33 теста против реального файла SQLCipher: неверный ключ не открывает файл, тот же ключ корректно открывает его повторно, delete-all очищает все таблицы, включая новейшие, rekey проходит полный цикл, очистка TTL не затрагивает неистёкшие события, каскадное удаление не оставляет осиротевших связей паттерн↔событие
hiddensteps-redactionДвижок редактирования (docs/design/05-privacy-model.md §4): детекторы на основе regex+Luhn для API-ключей/токенов/PEM-ключей/email/SSN/кредитных карт, энтропийный детектор неоднозначных секретов и политика удаления при неуверенности30 тестов, включая намеренно состязательные входные данные (секреты, встроенные в прозу, почти-секреты, которые секретами не являются, например git-хеши, SSN без дефисов/с пробелами, номера карт с дописанными цифрами, высокоэнтропийные токены в одном регистре)
hiddensteps-pipelineКонвейер событий (ADR-0006): Classify → Redact → Summarize, ограничение по уровню приватности для каждого типа сигнала, назначение TTL в Deep-режиме8 тестов, покрывающих удаления, вызванные редактированием, удаления из-за ограничений уровня и успешную суммаризацию
hiddensteps-observationObservationSource (ADR-0005) + Linux: ActiveWindowSource (X11 GetInputFocus), FileOperationSource (inotify через notify), ClipboardMetadataSource (выделение X11, только метаданные), GlobalShortcutSource (X11 XGrabKey). Плюс файлы источников для macOS/Windows (см. ниже)10 из 11 тестов в этом окружении выполняются против реальных бэкендов — живого X11-дисплея (DISPLAY=:0 у WSLg) и настоящего inotify, а не моков. 1 тест (реальный захват GlobalShortcutSource) по замыслу помечен #[ignore]
hiddensteps-llm-providerLlmProvider (ADR-0004): клиент Ollama (с полем запроса think: Option<bool> для гибридных моделей рассуждения), клиент, совместимый с протоколом OpenAI (покрывает OpenAI/Azure/OpenRouter/Together/Groq/DeepSeek/LocalAI), клиент Anthropic Messages и автоопределение локального рантайма. Каждый клиент устанавливает таймаут запроса (build_http_client), чтобы зависший удалённый сервис не мог заблокировать вызов навсегда; Ollama передаёт max_tokens как вложенный options.num_predict19 тестов против mock-серверов wiremock (включая реальную проверку срабатывания таймаута и того, что Ollama действительно отправляет num_predict), плюс 2 интеграционных теста с реальной Ollama (tests/ollama_live.rs, помечены #[ignore] — см. ниже), которые нашли и исправили реальную проблему: один и тот же промпт занимал более двух минут у реальной локальной гибридной модели рассуждения с think, оставленным по умолчанию, и несколько секунд с think: Some(false)
hiddensteps-patternsОбнаружение паттернов (сопоставление n-граммных последовательностей скользящим окном) + граф рабочих процессов (граф переходов с весами рёбер) — Слой 1 из ADR-001016 тестов, включая прямой аналог примера «observed 31 times» из PROMPT.md и регрессионный тест того, что перекрывающиеся окна по непрерывному повторению не учитываются дважды
hiddensteps-recommendationsСлой 2 движка рекомендаций (ADR-0010): LLM-синтез с контрактом промпта в виде структурированного JSON, валидатор нарративных противоречий и цикл повторов — важно, что числовые поля (estimated_time_saved_minutes) вообще никогда не извлекаются из вывода LLM, а только вычисляются на основе Слоя 123 теста, включая повтор при некорректном JSON, повтор при нарративном противоречии (покрывает числа прописью и каждое поле, управляемое LLM, а не только why) и извлечение JSON с учётом строк, — против скриптованного тестового провайдера
hiddensteps-privacy-engineШлюз отправки в облако (docs/design/03-data-flow-diagrams.md §5) и версионирование согласий (docs/design/05-privacy-model.md §5); PrivacyGatedProvider оборачивает любой LlmProvider, так что шлюз нельзя обойти обычным путём вызова13 тестов, включая то, что контент Уровня 4 блокируется, даже когда предоставлены все согласия
hiddensteps-plugin-hostWASM-хост плагинов (ADR-0009): замкнутое перечисление возможностей, валидация манифеста, песочница на базе wasmtime, которая связывает только host-функции предоставленных возможностей, плюс учёт топлива (fuel metering) и ResourceLimiter памяти, ограничивающие CPU/память экземпляра плагина независимо от того, какими возможностями он обладает, — те две оси, которые раздел об отказе в обслуживании (Denial-of-Service) в docs/research/06-threat-model.md называет неустранимыми одним лишь принудительным ограничением возможностей (модуль без возможностей всё равно может зацикливаться или бесконечно наращивать память). instantiate_from_manifest — безопасная точка входа: он принудительно выполняет валидацию манифеста (правило обязательности Уровня 4 для скриншотов) и отклоняет предоставление всего, что манифест не объявил, до того, как какая-либо возможность попадёт в линковщик, — обычный же срез возможностей instantiate вообще никак не связан с манифестом20 тестов, включая реальные попытки выхода за пределы возможностей: написанные вручную WAT-модули, компилируемые во время тестирования, доказывающие, что импорт непредоставленной возможности действительно неразрешим (инстанциация завершается ошибкой), а не просто не используется; плюс реальный модуль с бесконечным циклом и модуль с неограниченным memory.grow, которые вызывают trap вместо зависания/исчерпания памяти
hiddensteps-enterprise-policyСхема политики (docs/design/05-privacy-model.md §6) ровно с двумя регуляторами (минимальный уровень приватности, список разрешённых провайдеров) — не существует поля ни для чего иного, что политика могла бы захотеть ограничить. Загружается из файла enterprise-policy.json в каталоге данных приложения, если он присутствует (реальный, хотя и временный механизм — полный плагинный коннектор PolicyLoader, описанный в docs/design/08-plugin-architecture.md, не построен), сохраняется через таблицу enterprise_policy в hiddensteps-event-store и реально применяется в командах set_privacy_level/set_ai_provider в apps/desktop/src-tauri — двух точках изменения, из которых вообще когда-либо записывается выбор уровня/провайдера6 тестов, включая разбор максимально состязательного файла политики с пятью дополнительными ключами, исключёнными по замыслу, и подтверждение того, что ни один из них не переживает разбор
РасположениеРеализуетКак проверено
../apps/desktop/uiReact/TypeScript UI: OnboardingWizard (все 8 экранов, docs/ux/02), PrivacyDashboard (docs/ux/03), RecommendationCard (docs/ux/04), SettingsPage, DiagnosticsPage, связанные вместе в App.tsx, — общение с ядром только через типизированный tauriBridge.ts50 тестов через vitest + @testing-library/react против реального рендеринга в jsdom, включая пошаговое ограничение мастера онбординга (нельзя пройти дальше валидации без успешной проверки, нельзя начать наблюдение, не отметив согласие), отображение ошибок в каждой точке вызова мутаций, баннер повторного согласия, цепочку доказательств рекомендаций и шлюз доступности axe-core; tsc -b чисто проходит проверку типов
../apps/desktop/src-tauriОболочка Tauri: ~21 IPC-команда (docs/design/09-api-specification.md), связывающая все перечисленные выше крейты, плюс реальный фоновый цикл захват→конвейер→хранилище→событие UI для LinuxЧисто компилируется на Linux, macOS и Windows в CI — не именно в этой dev-песочнице (почему — см. ../apps/desktop/README.md), но бывшая здесь оговорка «не проверено» исчезла: первый реальный прогон CI нашёл и исправил 3 реальные ошибки (отсутствующий derive Serialize, отсутствующий Cargo feature flag, отсутствующий сгенерированный файл иконки), которые не выявил бы никакой объём локального ревью
core
.github/workflows/ci.yml
CFDictionary
find
&CFString
CFDictionary<CFString, CFType>
  • Наблюдение за браузерной областью и автозапуск глобальных горячих клавиш названы пробелами в doc-комментарии hiddensteps-observation/src/lib.rs — первому нужен отдельный артефакт браузерного расширения, которого нет в этом репозитории; второе (GlobalShortcutSource) реализовано, но никогда не запускается автоматически, потому что перехват комбинации клавиш на всю сессию в общей dev-песочнице был бы крайне разрушительным.
  • Слой 2 движка рекомендаций синтезирует качественное суждение через тот LlmProvider, который сконфигурирован; он протестирован против скриптованного провайдера-заменителя (реальные проверки логики повторов/валидации). Сам hiddensteps-llm-provider теперь имеет покрытие реальной Ollama (см. ниже); прогон контракта промпта самого синтезатора против реальной модели end-to-end (а не нижележащего HTTP-клиента) — это следующий естественный шаг, ещё не сделанный.
  • get_diagnostics (оболочка Tauri) сообщает реальные счётчики событий/паттернов/рекомендаций/журнала аудита и реальный размер файла на диске, но не использование GPU/CPU/памяти, статус OS-разрешений на наблюдение или статус обновления — то есть не полный список Self-Diagnostics из PROMPT.md. Каждый компонент UI, который это отображает, явно говорит об этом, а не показывает выдуманное «OK».