company_banner

Спасите самолет (задача со звездочкой)

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

    image

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

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

    image

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

    image

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

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

      0

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


      cafe babe fa00 0000
      dead beef 0000

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


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

        0

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

          0
          Скомпилированный java-класс как раз и содержит magic number 0xСAFEBABE в первых четырёх байтах :)
          0
          Там что-то вроде заголовка такого формата:
          +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) — тоже не оно.
            0
            cafe babe fa00 0000
            dead beef 0000

            Это же куски IPv6 адресов
            +1
            Подсказка #1:
            Прыгай по смещениям, смещения обычно uint32 где-то в начале
              +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
                Скрытый текст
                Так а вы победитель:) itsumma ksamasi -> itsumma is a mask, а дальше — все правильно, xor.
                  +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
                  
                  0

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

                    +2
                    michael_vostrikov, ты крутой! Никто еще не решал эту задачу без трех подсказок. Напиши на info@itsumma.ru свой размер одежды, пришлем тебе футболку победителя!
                  +1
                  Подсказка #2:
                  Смещение где-то рядом, и кроме little endian бывает еще другой

                  Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                  Самое читаемое