Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Wyszukaj w ofercie 200 tys. produktów TME
Europejski lider sprzedaży techniki i elektroniki.
Proszę, dodaj wyjątek elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

CTF 01.2018 sekcji projektowanie i tworzenie - kwadratura koła.

And! 06 Sty 2018 12:00 1461 18
  • #1 06 Sty 2018 12:00
    And!
    Admin grupy Projektowanie

    CTF 01.2018 sekcji projektowanie i tworzenie - kwadratura koła.
    Poprzedni CTF 12.2017 był dość mocno specjalistyczny, wracamy do tematyki bardziej ogólnej i otwartej tak jak w CTF 11.2017. Przed Wami CTF 01.2018 - kwadratura koła, jest on nieco trudniejszy niż poprzedni. Czas zabawy do 06.02.2018 i jeżeli nie pojawi się odpowiedź to umieszczę rozwiązanie. Możliwe, że będą pojawiać się jakieś podpowiedzi gdy będzie to potrzebne. Jeżeli będziecie potrzebowali konkretnych podpowiedzi napiszcie o tym w temacie.

    Tym razem mam do rozdania 1000pkt, ukryta jest jedna flaga i pierwsza osoba, która umieści w temacie post z prawidłową flagą otrzyma 1000pkt, oraz niespodzianka od gulson mikroprocesorowy tester elementów elektronicznych.

    Ponieważ flaga jest jedna i będzie jeden wygrany liczy się szybkość i warto umieścić post w temacie z odkrytą flagą jak najszybciej,
    liczy się data umieszczenia postu, edytowane posty będą traktowane jako umieszczone z datą ostatniej edycji.

    Zależy mi aby osoba która umieści flagę, później na spokojnie w kolejnym poście opisała jak udało się dotrzeć do ukrytej flagi,
    jakie były trudności, co było ciekawe co można ulepszyć. W materiale poza opisem można umieścić zrzuty ekranu lub nawet film/screan cast.

    Flaga jest ciągiem znaków w formacie: CTF_FLAG_{tutajTrescFlagi}_ czyli przykładowa flaga mogłaby wyglądać tak:
    CTF_FLAG_{elektroda.pl}_

    W wielu zabawach CTF można wprowadzić flagę do formularza online i sprawdzić czy jest prawidłowa,
    w naszym CTF gdy znajdziecie flagę należy napisać post w tym temacie z treścią flagi oraz w kolejnym poście na spokojnie opisać jak flaga została zdobyta, odpowiem i potwierdzę czy zgłoszona flaga jest prawidłowa czy też nie.

    Zgłaszając flagę koniecznie zachowajcie wielkość liter.
    Gdy będziecie umieszczać post z flagą warto dodać @And! w treści postu, dostanę wtedy powiadomienie abym nie przegapił zgłoszenia i odpowiem czy flaga jest prawidłowa.

    Zapraszam do zabawy, poniżej treść CTF z ukrytą flagą:
    CTF 01.2018 sekcji projektowanie i tworzenie - kwadratura koła.

  • #2 07 Sty 2018 12:40
    jarek_lnx
    Poziom 43  

    Oczyściłem trochę ten obraz i nawet udało mi się jedną łatwą rzecz znaleźć, ale zastanawiam się co dalej, bo moje próby nie dały odpowiedzi na następujące pytania i potrzebuję podpowiedzi.
    Czy w polach kropek przyjmujących dowolne wartości należy doszukiwać się SIRDS?
    Czy w polach kropek przyjmujących tylko dwie wartości są ukryte dane binarne?

    Znalazłem coś w rodzaju negatywu na innym "kanale" który zapewne wskazuje że znaleziony wzór nie jest przypadkowy i w jakiś sposób znaczący, ale w jaki nie mam na razie pomysłu.

  • #3 07 Sty 2018 12:54
    And!
    Admin grupy Projektowanie

    Złapałeś mnie 5min przed wyjazdem, więc odpowiedź będzie szybka ;)

    SIRDS tutaj niema, staram się jak najmniej powtarzać schematy z poprzednich CTF tak aby zawsze było coś nowego ( co jest trudne :) ).

    W pierwszej "warstwie" czyli obrazie, są kolejno dwa rodzaje danych:
    -zakodowane są w nietypowy sposób dane 0-1 kodujące kolejną warstwę,
    -oraz bardziej typowo zakodowane dane o dłuższej długości słowa w której zakodowana jest pewna podpowiedź.

    W obrazach widocznych w poście, widoczne są "okiem" trzy podpowiedzi co do sposobu kodowania kolejnych warstw.

    Jak najbardziej piszcie o swoim procesie analizy, udanych lub nie udanych próbach, pytaniach i propozycjach podpowiedzi, o to chodzi w tej zabawie!

  • #4 07 Sty 2018 18:46
    akrasuski1
    Poziom 5  

    No, to parę obserwacji:
    Są kreski. kreski mają często zmieniający się najwyższy bit na jednym z kanałów. Kanał zależy od pozycji poziomej piksela - odpowiednio [niebieski, (brak?), czerwony, zielony], potem się zapętla (czyli co cztery piksele nowy "pakiet". Po spreparowaniu obrazka iloczynem bitowym z ww. bitami dostajemy obraz z górną połową złożoną z prostych, pionowych linii, czasem przerwanych na wielokrotność pięciu pikseli. Dolna połowa wygląda jak szum.
    Ogólnie sądząc po podpowiedziach (CD, kwadratura) domyślam się że to rozpłaszczone dołki i górki płyty (dolna połowa to byłby otwór może? :)), ale wstępnie na to patrząc nic nie wychodzi - ani plaintextem, ani próbując rozkodowywać NRZI i/lub CIRCem. Nie wiem, czy jestem na dobrym tropie, a nie chcę tracić czasu błądząc po ślepych zaułkach - myślę że na razie poczekam na podpowiedź.

  • #5 07 Sty 2018 22:34
    And!
    Admin grupy Projektowanie

    Bardzo dobre obserwacje, nie ma co ukrywać że obraz należy traktować jako tablicę dwuwymiarową,
    są różne szybkie narzędzia pozwalające zapisać obraz jako RAW np. IrfanView.

    Do obserwacji sekwencji w dziedzinie czasu a także zaimportowania danych RAW może posłużyć zaskakująco narzędzie wykorzystywane głównie do audio np. Audacity.

    Każdy kto używa jakiegokolwiek narzędzia umożliwiającego programowanie z łatwością wczyta obraz jako tablce dwuwymiarowe i można wtedy dowolnie manipulować danymi.

    Jeżeli nie macie ulubionych narzędzi lub nie lubicie / nie umiecie programować, zachęcam do pobrania Pythona:
    https://www.python.org/downloads/
    Może trochę przesadzę pisząc, że to takie Arduino w świecie programowania, dużo bibliotek, bardzo elastyczne i wygodne, ale może nie najszybsze.
    Polecam.

    Poniżej na zachętę krótki kod w Python, który pozwoli na wczytanie obrazu jako tablicy dwuwymiarowej i dowolne kombinacje z zawartością.
    Wykorzystana została biblioteka pillow, którą w python doinstalujecie np. tak:
    pip install Pillow
    a co jest zainstalowane można sprawdzić tak:
    pip list

    Byłoby super gdyby przy okazji CTF ktoś rozszerzył swoje możliwości.

    Kod sprawdzony na Python 2, ale zachęcam do Python 3 mimo że składnia nieco inna.
    W Python wcięcia sterują wykonaniem programu więc jeżeli rozsypie się formatowanie to coś trzeba będzie poprawić.

    Kod: python
    Zaloguj się, aby zobaczyć kod

  • #6 08 Sty 2018 02:13
    akrasuski1
    Poziom 5  

    Czy zdekodowanie QR kodu to już ostatni etap? Generalnie nie wychodzi z niego nic czytelnego (--snip--), więc wolę się zapytać żeby ewentualnie nie siedzieć niepotrzebnie dłużej.

  • #7 08 Sty 2018 10:21
    And!
    Admin grupy Projektowanie

    Wow, gratuluje, niezly przeskok. Od wspomnianego ciągu do flagi w podanym formacie pozostał jeden krok.
    Podając konkretne dane kolejnego kroku otworzyłeś niezły skrót dla pozostałych uczestników, chyba że taki był cel tej wypowiedzi.

  • #8 08 Sty 2018 11:15
    akrasuski1
    Poziom 5  

    To jak to aż taki hint, to wyedytowałem posta ;) Pomyślę nad końcówką, może coś mi przyjdzie do głowy.

  • #9 08 Sty 2018 12:12
    And!
    Admin grupy Projektowanie

    Dla osób które utknęły na poprzednim etapie podpowiedź w postaci takich ciągów liter:
    RGBRGBRGBRGB
    LLRRLLRRLLRR

    Fajną rzeczą będzie podzielenie się sposobami analizy i wykorzystanymi narzędziami nie tylko przez osobę która odkryje flagę, gdyż dróg do celu może być wiele,
    to może przydać się także poza rozrywkowymi zastosowaniami.

  • #10 08 Sty 2018 13:52
    akrasuski1
    Poziom 5  

    I flaga: CTF_FLAG_{Z_Nowym_Rokiem_nowym_krokiem!}_
    Dodano po 28 [minuty]:
    Krótki writeup:

    Na początku trzeba było poczynić te obserwacje, które napisałem w poscie wyżej (dziwne rzeczy pozapisywane na kanałach RGB, na którym -
    zależne od pozycji piksela modulo 4). Dalej, rozdzieliłem piksele (a w zasadzie sample, czyli np. [R1, G1, B1, R2, G2, B2, R3, G3, B3, R4, G4, B4, ...]) na warstwy co cztery. Czyli miałem cztery tablice, dla każdego możliwego modulo. Po zapisaniu do obrazka (trzeba pamiętać że wymiary i format się zmieniają z RGB 400x400 do greyscale 300x400 ze względu na branie co 4 kanału), mamy 4 obrazy. Dwa z nich wyglądają praktycznie jak oryginał płyty CD, więc się nimi nie zajmuję. Jeden jest mocno zaszumiony. Wreszcie ostatni wygląda ciekawie:
    CTF 01.2018 sekcji projektowanie i tworzenie - kwadratura koła.
    Widać tutaj jakiś pionowy wzór (jasność się zmienia mniej więcej sinusoidalnie). W tle jednak jest ukryty ledwie widoczny QR code. Bezpośrednio raczej się go nie da odczytać (w sumie nawet nie próbowałem), ale na szczęście mamy z prawej strony obrazka fragment "czystego" sinusa - tj. bez QR-a. Zakładając że jest on faktycznie sinusem, odjąłem od pikseli lewej strony obrazka piksele prawej strony obrazka - efektywnie wytłumiając tego sinusa i pozostawiając wyblakły, ale czysty QR code. Po poprawieniu jasności i kontrastu w GIMPie da się go odczytać. Kod, który robi to co do teraz opisałem (przy okazji, ten zaszumiony kanał o którym wspominałem również zawiera ten sam QR code, i po odjęciu pikseli jak wyżej jest on znacznie bardziej czytelny):

    Kod: python
    Zaloguj się, aby zobaczyć kod


    Zawartość QR code to:
    Code:

    875235F8D320C7BFEED5F9DBFBF9DB7E96FD7A72EDBFBB7F7F3B6FEBE5BF5E9CBB50FDBE


    Są to oczywiście cyfry szesnastkowe, jednak dekodując to w standardowy sposób dostajemy binarne śmieci. Po pewnym namyśle postanowiłem przekonwertować to do postaci binarnej - tam również nie widać na pierwszy rzut oka żadnych wzorców. Po pewnym czasie, zauważyłem jednak że co siódmy bit jest zawsze zerem (odkryłem to w dość pokrętny sposób... rysując bity jako piksele w obrazkach o różnych szerokościach). Dalej już z górki - wystarczyło podzielić bity na grupy 7-bitowe, przekonwertować do ASCII, i wypisać flagę:

    Kod: python
    Zaloguj się, aby zobaczyć kod


    Bonus:
    Nie przydało mi się to do rozwiązania, ale po podpowiedzi żeby zobaczyć plik w Audacity, faktycznie go tam załadowałem. Konkretniej, ten sinusowy obrazek powyżej. Pierwsza połowa obrazka brzmiała tak jak sinus brzmi (u mnie 160Hz, bo załadowałem z próbkowaniem 8kHz). Druga część to natomiast spowolniona (albo znowu: złe próbkowanie wybrałem) i zagrana od tyłu mowa ludzka. Po odwróceniu tych operacji, słyszymy: "right channel, first line reference". Może niech autor się wypowie, czy to była jakaś podpowiedź, bo w sumie nie widzę wielkiego związku z resztą zadania ;)

  • #11 08 Sty 2018 19:20
    atom1477
    Poziom 43  

    Ja do kodu "prawie" QR też doszedłem ale w inny sposób.
    Programem do wykrywania obrazu stereoskopowego uzyskałem taki efekt:
    CTF 01.2018 sekcji projektowanie i tworzenie - kwadratura koła.
    Po wyodrębnieniu tylko niektórych linii za pomocą dzielenia indexu linii modulo 4, oraz edycji jasności, kontrastu, gammy uzyskałem takie coś:
    CTF 01.2018 sekcji projektowanie i tworzenie - kwadratura koła.
    Co musiałem trochę ręcznie podtuningować bo było kilka nadmiarowych pustych linii. I wyszło takie coś:
    CTF 01.2018 sekcji projektowanie i tworzenie - kwadratura koła.
    Niestety jak widać obrazek jest prostokątny, a do tego nie zawiera poprawnej linii synchronizującej w górnej części (powinny być pixele czarne i białe na przemian).
    No i niestety nie wiedziałem co z tym dalej zrobić więc sobie dałem spokój :D

  • #12 08 Sty 2018 21:43
    And!
    Admin grupy Projektowanie

    @akrasuski1 brawo! flaga prawidłowa, 1000pkt dla Ciebie, prośba o kontakt z gulson celem wysyłki testera.

    Wasze sposoby na odszukanie flagi trochę mnie zaskoczyły, ale liczy się znalezienie poprawnej flagi a nie wykorzystany sposób.

    Wspomniany IrfanView pozwala na łatwy eksport do pliku RAW, wykorzystujemy sekwencję RGB widoczną w lewym dolnym rogu obrazka dużego.

    CTF 01.2018 sekcji projektowanie i tworzenie - kwadratura koła.

    Import RAW do Audacity z parametrami płyty CD pozwala zauważyć podejrzane dane i sygnał audio w prawym kanale, lewy kanał ignorujemy.

    CTF 01.2018 sekcji projektowanie i tworzenie - kwadratura koła.

    CTF 01.2018 sekcji projektowanie i tworzenie - kwadratura koła.

    Łatwo zauważyć że miniatura w poście posiada też odpowiedni obrazek "duży", natomiast prowadzi do innego obrazka "dużego".

    Kod: text
    Zaloguj się, aby zobaczyć kod


    Na obrazku:
    https://obrazki.elektroda.pl/1028810700_1514487108.png
    widać ciąg RGB,
    natomiast na dużej wersji miniatury:
    https://obrazki.elektroda.pl/4004918600_1514487612.png
    widać ciąg LLRR

    Z podpowiedzi audio: "right channel, first line reference"
    wiemy że dane są w prawym kanale i tak należy pobierać dane z poszczególnych pikseli obrazka w powtarzającym się cyklu:
    CTF 01.2018 sekcji projektowanie i tworzenie - kwadratura koła.





    Na cztery pixele przypadają trzy próbki audio.

    A o co chodzi z częścią: "first line reference"?
    Okazuje się że pierwsza linia obrazka zawiera dane referencyjne, jest to sinus,
    są to dane na pozycji powiedzmy y=0 i pełnym zakresie X 0-299.

    Kolejna linia y=1 posiada próbki na każdej pozycji X mniejsze niż wartości z linii referencyjnej -> powiedzmy że są to same 0.

    Następna linia y=2 posiada próbki na każdej pozycji X większe niż wartości z linii referencyjnej -> powiedzmy że są to same 1.

    CTF 01.2018 sekcji projektowanie i tworzenie - kwadratura koła.

    Kolejne linie obrazka (aż do sygnału audio) na każdej pozycji X kodują 0 lub 1 w zależności od tego czy wartość jest mniejsza czy większa od odpowiedniej pozycji X w linii referencyjnej.

    W efekcie 0 i 1 kodują piksele czarne lub białe kodu QR.

    CTF 01.2018 sekcji projektowanie i tworzenie - kwadratura koła.

    W kodzie QR jest ciąg HEX kodujący ciąg 36 bajtów:
    875235F8D320C7BFEED5F9DBFBF9DB7E96FD7A72EDBFBB7F7F3B6FEBE5BF5E9CBB50FDBE
    są tam zakodowane znaki ASCI tak jak koduje się SMS.
    Znaki ASCI bez znaków specjalnych można zakodować na 7b,
    i "pakując" taki ciąg bitów w 8b bajty możemy zaoszczędzić na zużytych przez tekst bajtach:
    https://www.tidemobile.pl/pomoc/kodowanie-sms-i-nadpisow

    Po rozpakowaniu 7b->8b uzyskujemy ciąg bajtów o długości 41B w którym znajdują się kolejne znaki ASCI flagi.

    Dzięki za zabawę i gratuluję dobrego kombinowania!

    @atom1477 na użycie programu do stereoskopii bym nie wpadł, nawet nie przypuszczałem że to mogłoby zadziałać.

  • #13 08 Sty 2018 22:27
    akrasuski1
    Poziom 5  

    And! napisał:

    Łatwo zauważyć że miniatura w poście posiada też odpowiedni obrazek "duży", natomiast prowadzi do innego obrazka "dużego".


    Ano, zdziwiłem się że na miniaturze nie ma kresek - pomyślałem że albo się akurat tak zaliasowało (tym bardziej że to jpg, więc może kompresja jeszcze wchodzić w grę), albo wrzuciłeś miniaturkę "ładną". Zmianę liter na dole przeoczyłem.

    To załadowanie jako 16-bitowe stereo to już po fakcie, i po napisaniu poprzedniego posta się domyśliłem. Wcześniej na to nie wpadłem jednak. Niemniej, najbardziej znaczący bajt odpowiedniego kanału też zdał egzamin :)

    And! napisał:

    A o co chodzi z częścią: "first line reference"?
    Okazuje się że pierwsza linia obrazka zawiera dane referencyjne, jest to sinus,
    są to dane na pozycji powiedzmy y=0 i pełnym zakresie X 0-299.
    Kolejna linia y=1 posiada próbki na każdej pozycji X mniejsze niż wartości z linii referencyjnej -> powiedzmy że są to same 0.
    Następna linia y=2 posiada próbki na każdej pozycji X większe niż wartości z linii referencyjnej -> powiedzmy że są to same 1.


    A tego to bym się nie domyślił, szczególnie ostatnich dwóch zdań. To jakiś standardowy zabieg, protokół albo coś podobnego? Jeśli nie, to trochę zgadywanka. Ale grunt że dało się bez tego obejść.

    Nie wiedziałem też że smsy lecą 7-bitowo. Każdego dnia człowiek mądrzejszy ;) Znowu, kodowanie na szczęście na tyle intuicyjne że dało się wywnioskować "ręcznie".

    Co do stereoskopii - myślę że sporo filtrów może podobnie działać, tu przykładowe wycięcie trzech czwartych kolumn (bez względu na kanały itp.). Coś tam, jakis zarys QR nawet widać, chociaż strasznie nieczytelne:
    CTF 01.2018 sekcji projektowanie i tworzenie - kwadratura koła.

    Z ciekawości: jak było zamierzone porównywanie wartości próbek z sinusem referencyjnym? U mnie było łatwo, wystarczyło odpowiedni piksel wczytać, ale jak są 16-bitowe wartości, to się chyba trzeba trochę pobabrać w odpakowywanie wordów z bajtów - np. w Pythonie:
    Kod: python
    Zaloguj się, aby zobaczyć kod

    Chyba że jest jakaś magia w Audacity która to robi sama.

  • #14 09 Sty 2018 00:07
    And!
    Admin grupy Projektowanie

    Sposób ukrycia inspirowany steganografią, preambułą w RF oraz funkcją pass/faill sprzętu pomiarowego :) i na zasadzie podrzucenia do analizy dziwnego sinusa silnie skorelowanego z wymiarami obrazka. Audacity pozwala zobaczyć te zależności ale do analizy tak jak piszesz potrzeba coś więcej. Próbki mogłyby różnić się nawet o 1 ale dałem 1000 aby łatwiej coś zauważyć. Próbki były większe od 0 nazwijmy to unsigned, więc do poskładania wystarczyło mnożenie przez 256 i dodawanie.
    Bardzo fajna analiza tego CTF.

  • #15 09 Sty 2018 01:11
    akrasuski1
    Poziom 5  

    Ha!

    akrasuski1 napisał:

    Chyba że jest jakaś magia w Audacity która to robi sama.


    No może nie magia, ale udało mi się rozwiązać to korzystając tylko z Audacity (i załadowania pliku jako raw obrazek do edytora graficznego, tego nie liczę). Kolejne kroki:
    - załadować plik z próbkami RGB do Audacity jako 16-bit PCM, stereo, tak jak w poście And!
    - rozdzielić ścieżkę stereo na dwie mono, i usunąć tą niepotrzebną
    - skopiować dokładnie 300 próbek (przy 8kHz daje to dokładnie 0.0375s)
    - wrzucić na nową ścieżkę
    - powielić (opcja Repeat...) nową ścieżkę 400 razy
    - odwrócić (opcja Invert) nową ścieżkę
    - zmiksować obie ścieżki (opcja Mix and Render)
    - wzmocnić ścieżkę (opcja Amplify... - dałem jakieś 20dB)
    - wyeksportować ścieżkę jako jakiś nieskompresowany format (dałem 8-bitowy wav bez nagłówka, co chyba jest równoważne samym samplom)

    Efekt:
    CTF 01.2018 sekcji projektowanie i tworzenie - kwadratura koła.

  • #16 09 Sty 2018 09:25
    atom1477
    Poziom 43  

    And! napisał:
    @atom1477 na użycie programu do stereoskopii bym nie wpadł, nawet nie przypuszczałem że to mogłoby zadziałać.

    No ale przecież nie zadziałało.
    Tylko pierwsze kilkanaście pixeli kodu QR po lewej stronie i kilkanaście po prawej jest poprawnych. W środku są błędne.

  • #17 09 Sty 2018 19:21
    And!
    Admin grupy Projektowanie

    @atom1477 nie zadziałało ale to że cokolwiek związanego z QR się pojawiło było dla mnie sporym zaskoczeniem.

    @akrasuski1 takiego zastosowania Audacity nie przewidziałem, mimo że jest to jak najbardziej logiczne,
    czyli dało się zrobić bez dodatkowych narzędzi programistycznych bardzo pomysłowe.

    Jeżeli kiedykolwiek odbierzemy sygnał od pozaziemskiej cywilizacji, to koniecznie zgłoście się do zespołu rozpracowującego taką transmisję, wtedy będzie szansa na powodzenie ;)

  • #19 09 Sty 2018 19:47
    And!
    Admin grupy Projektowanie

    Zobaczymy co da się zrobić ;) zabawa faktycznie fajna i jest spory odzew, ale potrzebne są też spore zasoby,
    info o ew. dalszych działaniach będzie na bieżąco.

TME logo Szukaj w ofercie
Zamknij 
Wyszukaj w ofercie 200 tys. produktów TME
TME Logo