2024

Невидимые метки в аудио: как найти, кто слил запись из закрытого сообщества

В начале 2024 года я делал защиту контента для одного блогера. Он выкладывал в закрытое сообщество аудиоролики и аудиосообщения, и они утекали наружу. Задача: чтобы каждый подписчик получал свою, чуть-чуть другую копию, и по слитому файлу можно было понять, чья она. Тогда этого человека можно забанить, и информация из закрытого сообщества перестаёт утекать.

Я написал для этого сервис на TypeScript поверх ffmpeg. Каждый способ спрятать номер подписчика — отдельный плагин, и их можно комбинировать.

  • Метаданные. Код в тегах файла. Самое простое и самое хрупкое: снимается одним пересохранением.
  • Тихие звуки. В определённые моменты в запись подмешиваются еле слышные звуки — шумы и «волны». Каждый бит номера — это выбор одного из двух звуков на своём месте; метки повторяются в начале и в конце.
  • Темп. Файл режется на куски, и каждый кусок чуть-чуть ускоряется или замедляется — на слух незаметно, а по длительности отрезков номер читается.
  • Паузы. Программа находит в записи паузы между словами и удлиняет их на разную величину.
  • Эквалайзер. На отдельных отрезках — узкий подъём и спад одной частоты.
  • Сегменты — самое хитрое. Автор записывал несколько дублей одного и того же текста. Программа склеивала фразы из разных дублей, и у каждого подписчика получалась своя комбинация. Длительность каждой фразы подгонялась темпом, чтобы швы не было слышно. Такую метку не снять ни пересжатием, ни фильтрами: это не наложенный эффект, а сам текст в разном исполнении.

А если сливают вместе? Несколько человек могут сравнить свои копии и смешать их. Тогда в общем файле остаются только те метки, которые у них совпадают. Под этот случай я писал отдельный скрипт: по таким остаткам он перебирает тройки подписчиков, которые могли дать именно такую смесь.

Что было дальше. Видимо, у ребят было несколько аккаунтов. Они сравнили аудиосообщения, поняли, что копии разные, начали разбираться — и в итоге вообще перестали сливать аудио. Вычислить, кто это делал, нам тогда не удалось, но слив аудио прекратился.

Вместо этого они стали всё транскрибировать и выкладывать текстом. Мы думали и над этим: как с помощью ChatGPT в каждую копию чуть-чуть что-то добавлять — слова-паразиты, другие формулировки. Но когда у сливающего два аккаунта, он сравнивает две версии и вычищает различия, и справиться с этим практически нереально.

Видео. Весной добавилось видео. Ролики показывались через плеер VdoCipher, и номер зритель носил прямо на экране: из его битов считались положение водяного знака и интервалы, с которыми он перемещается, цветами кодировалась информация, показывались всплывашки. Сливщики привыкли всё это блурить — и расслабились. А мы добавили в видео ещё и аудиометки. По ним их в итоге вычислили и забанили.

Что я из этого вынес: ни один способ сам по себе не переживает всего — метаданные слетают при пересохранении, звуки можно вырезать, видимый знак заблурить. Поэтому меток должно быть несколько и разной природы. И самое опасное для сливщика — метка, о которой он не знает: пока они боролись с тем, что видели, их выдал звук.