Дана следующая информация:
In a far away land, shaped like the head of a pwnie,
dem natives found a way to communicate in secret (sorta)
bearly advanced esoteric RF technol0gies…
I once befriended a bear in a bar on pwnie island.
He kept rambling on about Richard Stallman, and some treasure…
He handed me this napkin, and said we could speak through the ether
I captured this message data to a GNU Radio complex data file…
Maybe its a secret to the treasure!?!?
Примерный перевод:
За тридевять земель, в стране pwnie,
Туземцы племени Dem нашли секретный способ связи (типа того)
Основывающийся на продвинутых, известных лишь посвященным, радиочастотных технологиях…
Я как-то подружился с одним таким носителем знания в баре на острове pwnie.
Он что-то нёс про Ричарда Столлмана, и про какие-то сокровища …
Он вручил мне эту салфетку, и сказал, что мы можем общаться по радио
Я записал эти данные в комплексном формате данных GNU Radio …
Может быть, там и скрыта тайна сокровищ!?!?
А вот и та самая схема кодирования (обратите внимания, что на рисунке при кодировании написано не 28 и 26, а «>= 8» и «>= 6»):
И сам файл данных key.iq (берём из скаченного архива)
Подсказка говорит нам, что мы просто должны запустить GNU Radio и выполнить обратные операции к тем, что нарисованы на салфетке.
Теперь немного о самой программе GNU Radio. Честно, я раньше с ней не работал. Т.к. я работаю под Windows, то сразу задался целью найти уже скомпилированные образы программ и python-расширений. В результате получился следующий алгоритм установки GNU Radio (под Windows, тестировал на Win7 SP1):
- Установить 32-хразрядную версию Python. Например, версию 2.7
- Установить python-расширения (уже скомпилированные образы на http://www.lfd.uci.edu/~gohlke/pythonlibs/): PyGTK (pygtk-all-in-one-2.24.2.win32-py2.7.msi), lxml-3.4.1.win32-py2.7.exe, numpy-MKL-1.9.1.win32-py2.7.exe, wxPython-2.8.12.1.win32-py2.7.exe, wxPython-common-2.8.12.1.win32-py2.7.exe, Cheetah-2.4.4.win32-py2.7.exe
- Установить готовую сборку GNU Radio. Я взял версию 3.7.2.2 http://files.ettus.com/binaries/gnuradio/gnuradio_v3.7.2.2/gnuradio_3.7.2.2_Win32.exe
- Установка переменных окружения: PATH и PYTHONPATH. При установке gnuradio_3.7.2.2_Win32.exe переменная PATH обновится, а PYTHONPATH скорее всего придётся создать вручную: PYTHONPATH = C:\Program Files (x86)\gnuradio\lib\site-packages
- Всё готово. Теперь можно запускать графическую среду «GNU Radio Companion» (GRC) из меню «Пуск». Сама среда выглядит как конструктор: перетаскиваем блоки на рабочий стол среды и делаем между ними связи. Смотрите ниже краткое руководство по GNU Radio.
Краткий ликбез по GNU Radio (некоторые описательные вещи взяты отсюда http://crafting.be/2014/01/sdr-gnuradio-intro/)
Прежде чем, привести итоговую схему решения задачи, рассмотрим базовые концепции GNU Radio. А именно потоковые графы и блоки.
Потоковые графы это графы (из теории графов), по которым идут потоки данных. Множество приложений GNU Radio содержат,
только потоковый граф и ничего более. Узлы этого графа называются блоками, а потоки данных текут по его рёбрам.
Блоки соединяются через порты («стрелочки»: из выхода «out» блока на вход «in» другого блока). Блок размещается
в среде GNU Radio методом перетаскивания из пула блоков, а связь блоков – последовательный клик мышью сначала
на «out», затем на «in».
Любая фактическая обработка сигнала производится блоками. В идеале каждый блок должен делать только одну работу,
этот путь позволяет оставаться GNU Radio модульным и гибким. Блоки обычно пишутся на C++ (также можно писать их
на Python). У первого блока нет входного порта, он создаёт образцы (sample). Самый первый блок называется
Исток (source), а последний блок называется Сток (sink).
То, что блок выводит – называют элементом. Элемент в среде GRC обозначается цветом портов «out» / «in». Например,
комплексные данные (complex samples) – синий цвет, цифровые данные типа «байт» - розовый цвет, целые int – зелёный,
целые short – жёлтый.
Вот так (см. на рисунке) выглядит обратный алгоритм кодирования (в графической среде «GNU Radio Companion») к тому, что показан на салфетке.
Или GRC-файл алгоритма key.grc.
Исток: наш файл key.iq (большой файл порядка 38Мб)
Опорный сигнал: 32000 образцов в секунду
Сток: файл key_endless.bin (как выяснилось это jpeg-файл)
Операции:
- Endian swap
- Divide – делим поток кодированных данных на опорный сигнал
- Deinterleave (деперемежитель) – разделяем поток данных на два потока: один (out1), состоящий из чётных бит потока на входе; другой (out0) состоящий из нечётных бит.
- GFSK Demod – GFSK-демодулятор осуществляет частотную демодуляцию Гаусса (FSK), используется 6 образцов на символ
- DPSK Demod – дифференциальная фазовая демодуляция, используется 8 образцов на символ
- На выходе демодуляторов получаем биты, которые с помощью Packet Decoder собираем в байты
- Interleave (перемежитель) – из двух байт (in0 и in1) собираем один поток байт
Результат jpeg-файл с флагом. Получается, что кодированный поток сжимается в несколько раз. Из 38Мб в 72Кб.
Ответ:
Don'tPanicClaudeShannonPredictedChooseYourPwnAdventureToo
|