Получайте из любого источника, безопасно.

Скоро

Отправьте ссылку или вызовите API. Corvidint определяет источник, составляет карту каждого файла и получает то, что выбирает ваша политика, с проверкой и записью.

Источники

  • Прямые ссылкиhttps://archive.example.org/…
  • Веб-листингиIndex of /pub/2026/
  • Onion-сервисы….onion
  • P2P-раздачиmagnet:?xt=urn:btih:…

Опубликовано, сначала новые

  1. attachments/samples.zip1,4 GiBПроверена контрольная сумма источника
  2. attachments/bulletins/bulletin-2026-07.pdf16,9 MiBКонтрольная сумма вычислена при получении
  3. captures/listing-0001.html428 KiBКонтрольная сумма вычислена при получении
  4. attachments/indicators-0417.json2,3 MiBПроверено протоколом передачи
  5. screens/page-0001.png717 KiBКонтрольная сумма вычислена при получении
  6. attachments/bulletins/bulletin-2026-06.pdf14,2 MiBПроверена контрольная сумма источника
  7. shared/case-0417/notes.txt6,2 KiBПроверена контрольная сумма источника

Всё, к чему может привести ссылка.

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

Только источники, сбор из которых вам разрешён. Отсутствие доступа становится запросом на действие, а не поводом искать обход.

  1. Прямые ссылки

    Доступ черезVPN-туннелиПул Tor

    Прямые, общие и временные ссылки, редиректы и промежуточные страницы между ними.

    • https://
    • http://
    • 302 Found
    • ?expires=…
  2. Веб-листинги

    Доступ черезVPN-туннелиПул Tor

    Индексы серверов, каталоги, таблицы, страницы с описанием, галереи, фиды и JSON-листинги с постраничной разбивкой.

    • Index of /
    • ?page=2
    • <enclosure>
    • next_cursor
  3. Файловые серверы

    Доступ черезVPN-туннели

    FTP и FTPS, SFTP с закреплёнными ключами хоста и коллекции WebDAV, папка за папкой.

    • ftp://
    • ftps://
    • sftp://
    • PROPFIND
  4. Облачные хранилища

    Доступ черезVPN-туннели

    Настроенные удалённые хранилища и общие папки, которые перечисляются через их собственные интерфейсы.

    • remote:bucket/
    • /shared/
    • next_page_token
  5. Файлообменники

    Доступ черезVPN-туннели

    Хостинговые сервисы со своими форматами ссылок, которые обрабатывают специальные адаптеры и изолированные движки.

    • /file/…
    • /folder/…
    • #key
  6. Динамические страницы

    Доступ черезVPN-туннелиПул Tor

    Ссылки, которые строит только скрипт, находит браузер в песочнице, в жёстких пределах ресурсов.

    • <script>
    • fetch()
    • subresources
  7. Onion-сервисы

    Доступ черезПул Tor

    Onion-адреса идут только в изолированный пул Tor и никогда не обращаются к обычному DNS.

    • .onion
    • client auth
  8. P2P-раздачи

    Доступ черезP2P-сессии

    Magnet-ссылки и torrent-файлы работают в собственных туннелируемых сессиях, никогда через Tor, и без последующей раздачи.

    • magnet:?xt=
    • .torrent
    • info-hash
  9. Архивы и наборы

    Доступ черезЛюбая сеть

    Архивы перечисляются элемент за элементом, а части многотомного набора выбираются как одно целое.

    • .zip
    • .tar.gz
    • .7z
    • .rar
    • .iso
    • .part1
  10. Авторизованный доступ

    Доступ черезVPN-туннелиПул Tor

    Пароли, токены, ключи и клиентские ключи onion отправляются один раз, хранятся как ссылки и больше не показываются.

    • username_password
    • token
    • ssh_key
    • onion_client_auth

Одна ссылка превращается в полную опись.

Определение сначала собирает доказательства и лишь потом чему-то верит. Размер остаётся неизвестным, пока не доказан, а список считается полным только когда закрыты все ветви.

https://archive.example.org/collections/0417/

VPN-туннель

Охватвыполняетсяполно в заданных границах

  • archive.example.org/collections/0417/коллекция
  • attachments/83 файла1,9 GiB
  • bulletins/79 файлов282 MiB
  • indicators-0417.jsonданные2,3 MiB
  • samples-part2.7zархивразмер неизвестен286 MiB
  • samples.zipархив1,4 GiB
  • readme.txtэлемент архива
  • docs/overview.pdfэлемент архива
  • ещё 10 элементов
  • unknown-0042.binнеизвестный тип3,1 MiB
  • captures/148 файлов46,1 MiB
  • index.htmlпромежуточная страница48,0 KiB
  • README.txtтекст2,1 KiB
  • screens/64 файла41,1 MiB
  • video/2 файла1,5 GiB
  • recording-02.mp4видео1,1 GiB
  • walkthrough.mp4видео412 MiB
  1. ПроверитьСхема, порт и класс хоста проверяются без обращения к источнику.
  2. Выбрать сетьOnion-имя выбирает пул Tor, любое другое имя выбирает VPN-туннель.
  3. Собрать доказательстваЗаголовки, сигнатуры, списки и чтение диапазонов, сначала самое дешёвое.
  4. КлассифицироватьФайл, папка, коллекция или промежуточная страница, у каждого свои доказательства.
  5. ПеречислитьПапки постранично, архивы элемент за элементом, циклы обрываются.
  6. Закрыть списокПолным в заданных границах список считается, только когда не осталось открытых ветвей.
Один узел этого дерева в том виде, в каком его возвращает API
{"location_id": "loc_01JAH8K2","name": "samples.zip","depth": 1,"has_children": false,"listing_complete": true,"resource": {"resource_id": "res_01JAH8K2","kind": "file","kind_status": "confirmed","discovery_state": "resolved","size": {"bytes": "1481763717","status": "validated","basis": "representation"},"media": {"category": "archive","identification_status": "confirmed","detected_media_type": "application/zip"}}}

Новые сайты без нового кода

Стандартным протоколам нужна только конфигурация. Для известных вёрсток есть декларативные рецепты. Для новых протоколов есть версионируемый коннектор, но не правка ядра.

  • СтандартыВеб-листинги, FTP, SFTP, WebDAV и удалённые хранилища поддерживаются из коробки.
  • РецептыПолучить, выбрать, извлечь, выдать. Без скриптов и кода, только операции, которые разрешает платформа.
  • КоннекторыВерсионируемые пакеты, которые работают вне процесса и сначала проходят набор проверки соответствия.

Как рецепт заслуживает своё место

  1. Предложен
  2. Проверен на фикстурах
  3. Канарейка на части задач
  4. Повышен по доказательствам
  5. Отозван при дрейфе

Модель может предложить шаги рецепта. Его проверяют люди, а повышают только доказательства.

Документ рецепта на языке рецептов
{"recipe_key": "archive-listing.paged","version": 3,"language_version": "1.0","scope": {"hosts": ["archive.example.org"],"path_patterns": ["/collections/*"]},"steps": [{"op": "fetch","target": "input_url","accept": "html"},{"op": "select","language": "css","expression": "table.listing a.file","as": "links"},{"op": "extract","from": "links","attribute": "href","as": "hrefs"},{"op": "emit","kind": "unknown","native_id_from": "hrefs","relation": "contains"}],"expected_evidence": {"exhaustiveness": "provider_declared"}}

Вымышленные значения, имена полей ровно такие, как их определяет API

Ничего не скачивается, пока порядок не доказан.

Правила решают, что разрешено, исключено или отправлено в карантин. Строгий выбор ждёт закрытого списка и известных размеров, затем ранжирует каждый файл по размеру.

Правила политики, сначала самый высокий приоритет

  1. 1exclude-videopriority: 100Воспроизводимое видео исключается.
  2. 2inspect-unknownpriority: 50Неизвестные типы проверяются, а неопределённый результат ведёт в карантин.
  3. 3opaque_encrypted_when_acquiredquarantineЗашифрованные архивы остаются закрытыми, пока кто-то не введёт пароль.
  4. 4default_actionallowВсё остальное разрешено.
РангФайлРазмерРешение
1samples.zip1,4 GiBРазрешено
2bulletin-2026-07.pdf16,9 MiBРазрешено
3bulletin-2026-06.pdf14,2 MiBРазрешено
53indicators-0417.json2,3 MiBРазрешено
294README.txt2,1 KiBРазрешено
samples-part2.7z286 MiBЖдёт парольнужен пароль
unknown-0042.bin3,1 MiBКарантинтип не определён
recording-02.mp41,1 GiBИсключеновидео исключено
walkthrough.mp4412 MiBИсключеновидео исключено

Записано вместе с выбором

strict_order_closed_inventory

Каждый файл полной описи упорядочен по размеру до загрузки.

Режимы выбора

  1. 1Все файлы, сначала самые большие
  2. 2Самый большой файл
  3. 3Самый большой файл каждой папки
  4. 4Файлы в диапазоне размеров

Строгий режим ждёт закрытого списка и известных размеров. Прогрессивный режим стартует раньше и сообщает об этом.

Решение в том виде, в каком его возвращает API
{"candidate_id": "rep_0008D","display_name": "walkthrough.mp4","candidate_kind": "representation","selection_revision": 2,"action": "exclude","rule_id": "exclude-video","reason_codes": ["video_excluded"],"evidence": [{"mechanism": "format_header","attribute": "kind","status": "confirmed","summary": "video/mp4"}]}

Каждый запрос уходит через туннель.

Зонды, листинги и передачи одинаково используют разрешённый исходящий канал. Когда туннель падает, запросы останавливаются: прямого маршрута, на который можно откатиться, нет.

Сессии VPN-туннеляИзолированный пул TorP2P-сессии

Каждый запрос проходит через шлюз политик и уходит по каналу, которого требует его источник.

Onion-трафик идёт по многослойным цепочкам Tor в собственном изолированном пуле.

К раздачам подключаются из собственных P2P-сессий. Части приходят, а раздача потом не ведётся.

Туннель упал. Новые запросы останавливаются, передачи сохраняют контрольные точки, и ничего не уходит напрямую.

Туннель восстановлен. Передачи продолжаются с контрольных точек.

  • Приватные адреса, loopback и адреса метаданных отклоняются в момент подключения.
  • Onion-имена никогда не обращаются к обычному DNS.
  • P2P-сессии прекращают раздачу, как только запрошенные файлы получены целиком.
  • Отозванная привязка закрывает действующие соединения, и шлюз это подтверждает.
  • Если остановку нельзя подтвердить, её ресурс остаётся занятым, пока она не подтверждена.
  • Незавершённые части хранятся в объектном хранилище, поэтому другой модуль может их продолжить.

Проверено, записано, никогда не запускается.

Независимый верификатор хэширует каждый подготовленный файл. Байты хранятся по содержимому, публикуются один раз и отдаются только как вложения.

Опубликованные файлы вымышленного задания и их уровень целостностиПроверена контрольная сумма источникаСовпадает с контрольной суммой, которую опубликовал сам источник.Проверено протоколом передачиСверено с собственными хэшами протокола, файл за файлом.Контрольная сумма вычислена при полученииSHA-256 сохранённых байтов, и помечено именно так.
attachments/samples.zip1,4 GiB21d80013…336753Проверена контрольная сумма источника
attachments/bulletins/bulletin-2026-07.pdf16,9 MiB45fc57dc…6589c6Контрольная сумма вычислена при получении
attachments/bulletins/bulletin-2026-06.pdf14,2 MiBd918bbf1…71f434Проверена контрольная сумма источника
attachments/indicators-0417.json2,3 MiB13e8534b…865223Проверено протоколом передачи
captures/listing-0001.html428 KiBa3651f3c…f7b3e8Контрольная сумма вычислена при получении
screens/page-0001.png717 KiB1a53f598…76d1dbКонтрольная сумма вычислена при получении

Несовпадение отправляется в карантин и получается заново, но никогда не публикуется.

Два расположения, один blob

Одинаковые байты хранятся один раз по их SHA-256. Каждое расположение, которое на них указывало, сохраняется.

Хранится как доказательство, никогда не запускается

  • Ничто полученное не открывается, не запускается, не устанавливается и не монтируется.
  • Анализаторы работают без сети, от отдельного пользователя, с ограничениями по времени и памяти.
  • Пути в архивах проверяются до извлечения хотя бы одного элемента.
  • Файлы уходят только как вложения, по недолговечным ссылкам с отдельного origin.
Запись манифеста в том виде, в каком её возвращает API
{"file_id": "file_0008","logical_path": "attachments/samples.zip","stored_name": "21d80013bfc9266b","size_bytes": "1481763717","sha256": "21d80013bfc9266bc453a3db98d1f3d14a2be4483d5020d74ec194a763336753","integrity_level": "origin_checksum_verified","origin_checksum": {"algorithm": "sha256","value": "21d80013bfc9266bc453a3db98d1f3d14a2be4483d5020d74ec194a763336753"},"source_resource_id": "res_01JAH8K2","published_at": "2026-10-05T08:31:00Z"}

Вымышленные значения, имена полей ровно такие, как их определяет API

Создан для вызова, готов к передаче парсеру.

Любой проект отправляет задания через API и следит за ними по событиям. Парсер принимает каждый опубликованный файл вместе с его контрольной суммой и происхождением.

  • Ваш проект
  • Загрузчик
  • Парсер
  1. Ваш проектЗагрузчикОтправляет заданиеЗадание с ключом идемпотентности: повтор никогда не создаёт второе задание.
    Задание, которое отправляет ваш проект
    {"sources": [{"url": "https://archive.example.org/collections/0417/"},{"url": "https://share.example.net/s/K7q2xWm9"}],"policy_profile": "evidence-default","destination_id": "evidence-store","client_reference": "Archive capture, case 0417"}
  2. ЗагрузчикВаш проектПринимает после сохраненияОтвет приходит только после сохранения задания и его политики.
    Что приходит в ответ
    {"job_id": "job_01JAH7Q2M4K8V3","policy_revision": "prv_4","accepted_at": "2026-10-05T08:12:04Z","idempotent_replay": false}
  3. ЗагрузчикПарсерОбъявляет об опубликованном файлеПодписанные вебхуки или события, которые вы опрашиваете или читаете потоком от курсора.
    Событие, которое получает парсер
    {"event_id": "0f6e2a90-41d7-4c0b-9e5a-000000000010","event_type": "file.published","schema_version": "1.0","occurred_at": "2026-10-05T08:31:12Z","job_id": "job_01JAH7Q2M4K8V3","aggregate_type": "file","aggregate_id": "file_0008","aggregate_version": 3,"stream_seq": "10","data": {"file_id": "file_0008","logical_path": "attachments/samples.zip","size_bytes": "1481763717","verification_level": "origin_checksum_verified","selection_revision": 2}}
  4. ПарсерЗагрузчикЧитает запись файлаПарсер проверяет, что файл зафиксирован, и читает его SHA-256.
    Запись файла, которую проверяет парсер
    {"file_id": "file_0008","job_id": "job_01JAH7Q2M4K8V3","logical_path": "attachments/samples.zip","original_name": "samples.zip","size_bytes": "1481763717","sha256": "21d80013bfc9266bc453a3db98d1f3d14a2be4483d5020d74ec194a763336753","integrity_level": "origin_checksum_verified","state": "committed","detected_media_type": "application/zip"}
  5. ПарсерЗагрузчикПолучает по недолговечной ссылкеНедолговечная ссылка; перед разбором парсер снова хэширует байты.

Опись, манифест и решения также экспортируются в NDJSON.

Вымышленные значения, имена полей ровно такие, как их определяет API

Увидьте это на своих источниках.

Расскажите, что вам нужно. Мы покажем живой снимок, от поста до опечатанной записи.

Запросить брифинг

Удобнее почта? Напишите на [email protected].