Ghost in the Shellcode Teaser 2015 (Don't Panic! Shift Keying!)

Решения

http://gnoobz.com/gits-teaser-2015-ctf-dont-panic-shift-keying-writeup.html (mf)
http://www.clevcode.org/ghost-in-the-shellcode-2015-teaser-dont-panic-shift-keying-solution/ (Joel Eriksson)
Назад к списку заданий

Задание (Don't Panic! Shift Keying!)

Extract the key!
Прилагаемый файл имеет довольно большой размер (в архиве 28Мб). Приведу внешнюю ссылку на ctfs/write-ups-2014. Распаковка архива:

$ file dontpanic-8f27ebde0a2a714871c57e4d9a526b06c86b12212249f984cdb9eefe81bf8f7c
dontpanic-8f27ebde0a2a714871c57e4d9a526b06c86b12212249f984cdb9eefe81bf8f7c: bzip2 compressed data, block size = 600k

$ bunzip2 < dontpanic-8f27ebde0a2a714871c57e4d9a526b06c86b12212249f984cdb9eefe81bf8f7c > dontpanic

$ file dontpanic
dontpanic: POSIX tar archive

$ tar xjfv dontpanic
x dontpanicshiftkeying/README
x dontpanicshiftkeying/key.iq (<- файл для анализа)
x dontpanicshiftkeying/
x dontpanicshiftkeying/dontpanicshiftkeying.jpg (<- рисунок на салфетке)

Подробное описание

Дана следующая информация:

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»):

dontpanicshiftkeying.png

И сам файл данных 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.

shema.png

Исток: наш файл 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Кб.

key_endless.jpg

Ответ:
Don'tPanicClaudeShannonPredictedChooseYourPwnAdventureToo

Пока не указано иное, содержимое этой страницы распространяется по лицензии Creative Commons Attribution-ShareAlike 3.0 License