Hackowanie książki – ZP Cover UnZipMe

Na filmach, gdy widoczny jest monitor z kodem, to raczej spodziewamy się tam losowych danych lub wyciętych fragmentów kodu. Podobnie zresztą w różnych materiałach i ilustracjach niebędących ściśle meteoryczną częścią zawartości publikacji, a bardziej jakimś dodatkowym ozdobnikiem lub częścią designu. Czy Gynvael na okładki swoich książek też tak po prostu wrzucił jakieś losowo wygenerowane i ładnie wyglądające dane? Nie sądzę!

Kiedyś natrafiłem na info, że znajdujący się tam kod to coś więcej niż spójna z treścią książki stylizacja okładki, to jakieś ukryte małe zadanie do rozwiązania. Przypomniałem sobie niedawno o tych plotkach i postanowiłem się bliżej przyjrzeć tym “randomowym cyferkom”. Biorąc pod uwagę jego zainteresowania RE i CTF-ami, na pewno coś jest na rzeczy ;)

Dzisiaj, na pierwszy ogień idzie pierwsza jego książka - “Zrozumieć programowanie”. Obiło mi się o uszy, że oprócz różnych poukrywanych w treści książki “flag” i “easter eggs”, na okładce znajduje się jakiś “zip”.

Po zdobyciu okładki w jakieś lepszej jakości1, bo sam książki niestety nie posiadam, od razu w oczy rzuca się ciąg wyglądających losowo cyfr przeplatanych technicznymi słówkami-hasłami.

Kod z okładki

Kod z okładki, po ręcznym zdigitalizowaniu do pliku (data.txt), zawiera 533 znaków i wydaje się być zapisem szesnastkowym jakichś bliżej nieokreślonych danych z designerskim dodatkiem kilku słów kluczowych.

504b03C++0414000200080036a01a45dc3f8ced65
000000630000000mutexc00000049486float1766
5546865466c61674b4a4dcfcc5330333353packet
b049492c49b4e3f2Python35710b8db052f508b65
573dstream53554f1f4307631b4b236098d32740b
d4b5723base643f436360bd5b272f53int3437727
3dAPI537553109350e31d4d5uint64_t097535317
60bdsocket4e352370threadc310931737508d037
5050e052e04acd4be10200504b0fiber102140014
00ZIP020008hex003file6a01a45dc3f8JSONced6
5000000630000000c000000000000000100200000
000000000049zval48617665546865466c6167504
b050600000000010001003a0000008f0000008000

Po wrzuceniu kilku pierwszych “bajtów” heksadecymalnego randoma do wyszukiwarki plotki okazują się prawdą. Wartość 0x04034b50 (PK\x03\x04) to nic innego jak magic number nagłówka pliku najpopularniejszego archiwizatora, czyli ZIP-a.

Zrzut zapisanego kodu z wyciętymi “słówkami” do pliku binarnego (data.zip) prezentuje się tak:

00000000  50 4B 03 04 14 00 02 00 08 00 36 A0 1A 45 DC 3F  PK........6 .EÜ?
00000010  8C ED 65 00 00 00 63 00 00 00 0C 00 00 00 49 48  Śíe...c.......IH
00000020  61 76 65 54 68 65 46 6C 61 67 4B 4A 4D CF CC 53  aveTheFlagKJMĎĚS
00000030  30 33 33 53 B0 49 49 2C 49 B4 E3 F2 35 71 0B 8D  033S°II,I´ăň5q.Ť
00000040  B0 52 F5 08 B6 55 73 D5 35 54 F1 F4 30 76 31 B4  °Rő.¶UsŐ5Tńô0v1´
00000050  B2 36 09 8D 32 74 0B D4 B5 72 33 F4 36 36 0B D5  ˛6.Ť2t.Ôµr3ô66.Ő
00000060  B2 72 F5 34 37 72 73 D5 37 55 31 09 35 0E 31 D4  ˛rő47rsŐ7U1.5.1Ô
00000070  D5 09 75 35 31 76 0B D4 E3 52 37 0C 31 09 31 73  Ő.u51v.ÔăR7.1.1s
00000080  75 08 D0 37 50 50 E0 52 E0 4A CD 4B E1 02 00 50  u.Đ7PPŕRŕJÍKá..P
00000090  4B 01 02 14 00 14 00 02 00 08 00 36 A0 1A 45 DC  K..........6 .EÜ
000000A0  3F 8C ED 65 00 00 00 63 00 00 00 0C 00 00 00 00  ?Śíe...c........
000000B0  00 00 00 01 00 20 00 00 00 00 00 00 00 49 48 61  ..... .......IHa
000000C0  76 65 54 68 65 46 6C 61 67 50 4B 05 06 00 00 00  veTheFlagPK.....
000000D0  00 01 00 01 00 3A 00 00 00 8F 00 00 00 80 00     .....:...Ź...€.

Rzeczywiście wygląda to na prawdziwe archiwum ZIP, nawet widoczna jest nazwa pliku IHaveTheFlag.

Dekodowanie

Zrzucone z okładki archiwum bezproblemowo otwiera się w programie 7-Zip i można “wypakować” pliki.

Dziwna zawartość pliku IHaveTheFlag skłania mnie do myśli, że to może jakieś uszkodzone dane i zadaniem jest “naprawienie” tego zip-a, aby po wypakowaniu otrzymać plik z poprawną i dającą się odczytać przez człowieka zawartością.

begin 666 <data>
M4FUX:%HS=&E-1$IH3D1:;4UZ1FQ-:F1K36U*:EI72FE/5$4U3T1-,UE43FQ.
'1T4T6E@P/0  
 
end

A może to jakiś strumień danych lub fragment kolejnego pliku - sądząc po begin/end?

Google pod frazą zapytania “begin 666 <data>” wskazuje Wikipedię, gdzie w artykule opisującym kodowanie transportowe uuencode w przykładach można znaleźć dokładnie ten sam ciąg znaków. Żeby się szybko przekonać czy to jest to, wrzuciłem to do jakiegoś dekodera on-line. W wyniku dostałem kolejny ciekawie wyglądający ciąg danych:

RmxhZ3tiMDJhNDZmMzFlMjdkMmJjZWJiOTE5ODM3YTNlNGE4ZX0=

Od razu skojarzyło mi się to z base64, więc bez zastanowienia wrzuciłem w kolejny dekoder w sieci… i znalazłem flagę!

Flag{b02a46f31e27d2bcebb919837a3e4a8e}

Do upewnienia się, że to poprawna odpowiedź, zakładam konto na stronie ksiązki i rejestruję swoje odkrycie.

Wszystko wskazuje na to że okładka została zhackowana!
Jestem 21 osobą zgłaszająca rozwiązanie, pierwotnie flaga została odkryta 13 grudnia 2015 roku.

Podsumowanie

No i kto by się spodziewał zadania na okładce książki!

Zadanie było fajne, choć nawet po otrzymaniu flagi, ciągle zastanawiałem się nad kolejnym poziomem. W końcu ciąg zawarty między klamrami {} nadal przypomina jakieś dane do rozszyfrowania. A, że nie jestem CTF-owcem to nie spodziewałem się, że to może być już koniec ;) Teraz pora na kolejną książkę!

Wszystkie pliki i kody z hackowania książek dostępne są w moim “śmietnikowym” repo w katalogu hack-the-book.


Przypisy

  1. Źródłowy plik graficzny z okładką pochodził z fragmentu książki dostępnej w sklepie Helion. ↩︎

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *