0x00 Agenda misji

Ostatni stream Gyna, był dość luźny. W ramach wakacyjnej przerwy, OP skupił się na przedstawieniu swojej biblioteczki. Temat ciekawy z wielu powodów. Przede wszystkim regał z książkami stanowi nieodłączną część ekspozycji streamowej, stąd pewnie tak duże zainteresowanie tematem. Polecam obejrzeć odcinek, bo oprócz sporej dawki ciekawej beletrystyki znajdziecie tam sporo informatycznej i hackerskiej klasyki.

Nasze zadanie

MISJA 009            goo.gl/q49Fw7                  DIFFICULTY: ██████░░░░ [6/10]
┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅
Do naszych techników trafiło nagranie, w postaci pliku dźwiękowego, z osobliwymi
piskami. Nagranie otrzymaliśmy od lokalnego radioamatora i możesz je pobrać
poniżej:

  https://goo.gl/NeJHD2

Jeśli możesz, wyręcz naszych techników w zdekodowaniu wiadomości - są obecnie 
zajęci naprawą naszego elektrohydroturbobulbulatora.

Powodzenia!

--

Odzyskaną wiadomość umieść w komentarzu pod tym video :)
Linki do kodu/wpisów na blogu/etc z opisem rozwiązania są również mile widziane!

P.S. Rozwiązanie zadania przedstawię na początku kolejnego livestreama.

0x01 Rozpoznanie

Jak zwykle, cudowny personel potrzebuje naszej pomocy ;) Zaczynamy od początku, czyli od rozpoznania. Plik dostępny jest pod adresem https://goo.gl/NeJHD2. Pobieramy archiwum 7z, po wypakowaniu naszym oczom ukazuje się plik wav e7c48e6e7a0e12dc4a15dac76c5936dfb8314d48_recording.wav Plik wav, wave form audio format zawierający nagranie.

file e7c48e6e7a0e12dc4a15dac76c5936dfb8314d48_recording.wav
e7c48e6e7a0e12dc4a15dac76c5936dfb8314d48_recording.wav: RIFF (little-endian) data, WAVE audio, Microsoft PCM, 16 bit, mono 44100 Hz

Odsłuchując nagranie, nawet niewprawne ucho wyróżni dwa różne tony. Rozwiązując zadanie założyłem, co nie będzie zaskoczeniem dla Czytelnika, że to one niosą wymaganą informację.

audacity freq

audacity wav

0x02 Rozwiązanie

Kolejnym krokiem, było określenie sposobu kodowania danych. Możliwości było kilka. Początkowo założyłem, że jest to lekko zmodyfikowany alfabet Morsea. Na niekorzyść tej formy przedstawienia danych przemawiał brak wyraźnych przerw pomiędzy znakami (długie i krotkie sygnały, można zamienić na tony wyższy i niższy). Dlatego odrzuciłem tą opcję. Podczas streamu Gynvael mówił, że misję można rozwiązać za pomocą kartki i ołówka. Ta delikatna porada ukierunkowała mnie na znacznie prostsze rozwiązanie. Otóż poszczególne tony (a występuje ich dokładnie dwa), to po prostu binarne zera i jedynki. Nie sposób z marszu stwierdzić, która wartość oznacza logiczną prawdę czy fałsz. Prosty skrypt w pythonie, umożliwi przetestowanie obydwu ustawień bitów niemal błyskawicznie.

Plik źródłowy solvera znajduje się tutaj. Korzystając z bibliotek pyaudio i wave, skrypt bada częstotliwości tonów w pliku i zapisuje w liście. Następnie korzystając z listy jako swoistego template, budowane są dwa stringi. Częstotliwości są tłumaczone na zera i jedynki. Stąd droga do rozwiązania jest już prosta. Stringi dzielimy na 8 znaków (bajt) i próbujemy zamienić na ASCII (warto sprawdzić, czy dany znak jest drukowalny).

String, który spełnia główne założenie (printable, czyli jego znaki znajdują się w zakresie ASCII) wygląda następująco:

roirraW ycneuqerF

Co pewnie nie wygląda jak flaga, ale wystarczy przeczytać podane litery na wspak. Otrzymamy:

Frequency Warrior

Czy to dodatkowa trudność zadania? Według mnie nie, otrzymanie odwróconego napisu jest spowodowane naturalnym zapisywaniem/czytaniem binarnych wartości. Można to też tłumaczyć Little endian

Chciałbym zauważyć, że jest to mój pierwszy wpis w języku polskim na tym blogu. Zapraszam do zapoznania się z angielskimi writeupami dotyczącymi poprzedniej misji Gynveala. W przygotowaniu mam kilka artykułów, które powinny pojawić sę niebawem.

Do zobaczenia w następnym wpisie!