В ноябре 2016-го мы задумались о том, как стать необычным партнером отраслевой конференции — чтобы запомниться участникам, но при этом не ограничиваться стендом и раздачей фирменных стикеров и другой сувенирки, ради которых участники обходят выставочную зону на любом мероприятии. Для Highload 2016 мы тогда придумали небольшой интеллектуальный квест — поставили прямо на стенде компьютер, на котором нужно было починить сломанный сервер. Всем понравилось, а мы стали думать дальше. На афтепати Codefest в Новосибирске в апреле мы придумали и провели гикнайт Deadliner — это была альтернативная тусовка, где у участников была важная миссия: команды спасали падающий самолет. Сегодня мы предлагаем спасти его хабрасообществу.

image

Итак, условия задачи:
Самолет терпит бедствие — небольшие неполадки в правом двигателе. Времени мало (горючее кончается), вокруг бегают и шумят пассажиры, обстановка напряженная.
Самолет находится где-то в районе Новосибирска (есть координаты), но cломалась авионика, и не очень понятно, что, где и как. Антенна сломалась, связь в радиусе 10 км GPS не работает. Куда лететь — непонятно, карта карту не показывает. Координаты аэропортов есть только на главной дискете, дискету извлекли, сняли дамп, но там ничего не понятно. Пока есть горючее, нужно срочно расшифровать, куда лететь!

Собрались три крутые команды — из Яндекса, Badoo и СКБ «Контур». Badoo объединились с Костей Осиповым:

image

После нескольких подсказок самолёт спасли ребята из «Контура» (бубен от наших друзей из First VDS был главным призом):

image

Хотите размять мозги — качайте бинарник, попробуйте спасти мир. В комментариях через некоторое время выложим подсказки. Пишите, сколько времени ушло на задачу! А мы пока занимаемся разработкой подобной игры в онлайне — с разными уровнями сложности, рейтингом и так далее.

Комментарии (12)


  1. vedenin1980
    04.08.2017 18:31

    В дампе кроме бинарных данных видны строчки


    cafe babe fa00 0000
    dead beef 0000

    Можно предположить что это строки с завершающимся нулем, либо отдельные файлы с разделителем 0000


    Если там есть строки, логично попробовать сменить кодировки на UTF8 и попытаться найти кирилический текст


    1. vedenin1980
      04.08.2017 18:55

      Если попытаться просто перевести дамп в UTF-8, то кроме шума там появляются такие слова как codefestoep, firstvds8?m2, itsumma, anychartA, selectelLM, bsah??c?N54/ZVC. Можно предположить что это дамп класса или структуры данных (или просто кода), далее считая что это названия полей ну скажем класса С++ или Java можно попытаться восстановить структуру данных.


      1. AlexeyGorovoy
        07.08.2017 09:01

        Скомпилированный java-класс как раз и содержит magic number 0xСAFEBABE в первых четырёх байтах :)


    1. Veliant
      04.08.2017 23:29

      Там что-то вроде заголовка такого формата:
      +0 [4] CAFEBABE
      +4 [4] Размер хидера
      +8 [2] Размер данных (похоже на поксоренный текст)
      +10 [..] данные (в данном случае размером 0xF0)
      +10+N DEADBEEF

      Указанные Вами строки имеют структуру вида
      +0 [2] Размер строки
      +2 [N] строка без null символа в конце

      И вообще, кажется, массив данных после DEADBEEF представляет собой пожатый алгоритмом вроде LZ текст. (пробовал lz77, lzw, aplib — это все не оно)

      Может конечно это и сериализация, но на ProtoBuf, BSON это не похоже. Пробовал стандартную сериализацию из Java (намекает первая магическая константа CAFEBABE) — тоже не оно.


    1. dnch_chernov
      05.08.2017 01:29

      cafe babe fa00 0000
      dead beef 0000

      Это же куски IPv6 адресов


  1. eapotapov Автор
    05.08.2017 01:30
    +1

    Подсказка #1:
    Прыгаи? по смещениям, смещения обычно uint32 где-то в начале


    1. michael_vostrikov
      05.08.2017 15:39
      +2

      Скрытый текст

      Размер файла 0x0000071C.
      В начале только подходит только одно смещение uint32 — FA 00 00 00. Есть еще 00 00 00 F0, если в другую сторону считать, но вроде что-то не то.
      По смещению 0x000000FA расположено значение DE AD BE EF.
      Дальше 00 00 03 02.
      По этому смещению 07 00 itsumma.
      Дальше 00 00 05 0F.
      По этому смещению 07 00 ksamasi.
      Дальше 00 00 00 08.
      Там F0 00.
      Похоже длина данных.
      После них тот DE AD BE EF.
      Данные похоже зашифрованы. Пробовал поксорить наугад, не получилось.
      В остальной части возможно байт-код.
      А что дальше?


      1. iv_s
        07.08.2017 08:36
        +1

        Скрытый текст
        Так а вы победитель:) itsumma ksamasi -> itsumma is a mask, а дальше — все правильно, xor.


        1. michael_vostrikov
          07.08.2017 09:55
          +2

          А, вот оно как) Надо было подольше подумать. А я ведь даже брутфорсер написал, который перебором берет подстроку для ключа. И он даже сработал сейчас, видимо я что-то сначала со смещениями намудрил, или ответ в куче мусорного вывода не разлядел.


          ответ, если кому интересно
          VKT Vorkuta 67.488611 63.993056
          NUX Novy Urengoy 66.069444 76.520278
          SCW Syktyvkar 61.64705 50.84505
          LED St Petersburg 59.800292 30.262503
          IKT Irkutsk 52.268028 104.388975
          OVB Novosibirsk 55.012622 82.650656
          RCT RockCity 55.034048 82.918779
          


      1. nick758
        07.08.2017 08:57

        ksamasi — isamask, если наоборот. Возможно дальше хранится маска для расшифровки.


      1. eapotapov Автор
        07.08.2017 09:57
        +2

        michael_vostrikov, ты крутой! Никто еще не решал эту задачу без трех подсказок. Напиши на info@itsumma.ru свой размер одежды, пришлем тебе футболку победителя!


  1. eapotapov Автор
    05.08.2017 10:57
    +1

    Подсказка #2:
    Смещение где-то рядом, и кроме little endian бывает еще другои?