Когда я открываю архив, он выглядит как множество zip-файлов с пустыми файлами:
Есть ли изменение одного из файлов не скучно? Давайте strings файл для чтения имен файлов в разделе заголовка:
:(
Что такое «раздел комментариев» в zip-файлах и как его увидеть?
Похоже на открытый текст в конце заголовка файла центрального каталога.
Чтобы быть уверенным, давайте проверим комментарии zip и текст внутренних файлов для быстрой победы:
Это приводит нас к предположению, что внутренние файлы внутри нашего zip-архива содержат сжатый Boring.txt с комментариями, отличными от открытого текста!
Предложим несколько векторов для поиска комментария:
- Проверьте в заголовках, есть ли один почтовый индекс, который больше, чем другие, и разархивируйте его.
→ Есть несколько размеров… - Извлекайте zip один за другим (и строки для «пометки»?)
Какой формат у внутренних файлов? Я нашел два формата:
Сложно.
Мы знаем, что в формате zip есть текстовые комментарии. Почитаем про комментарии в формате Rar:
Чудесно! Может флаг в юникоде! Давайте проверим все комментарии, которые я могу получить:
Итак, вот все комментарии в первом zip-файле вверх вниз:
......................................................... : zip comment : None : : InfoList comments : None : : extracted zip/rar comments : <char>, <int> : : Info list of each on of them : None : :..............................:........................:
К сожалению, я привел вас к неверному предположению. Флаг слова, вероятно, должен быть каким-то образом построен с помощью комментариев формата ‹char›,‹int›.
Проверять:
- Слово «флаг» можно найти в соединении символов.
- Конкатенация символов - это Base64 флага.
- int - это место символа в последнем флаге
Первый и второй варианты в эксперименте не удались :(
Для проверки третьего мы можем проверить, каков диапазон чисел:
couples = [l.rstrip("\n").split(",") for l in all_comments] couples = [(c[0], int(c[1])) for c in couples] In [161]: couples[0] Out[161]: (u'W', 1408) In [159]: max(dict(couples).values()) Out[159]: 894 In [160]: min(dict(couples).values()) Out[160]: -1303
Я предполагаю, что flagg не 1408 байт, но, возможно, int — это следующий файл, который мы должны прочитать, это комментарий! Он может соответствовать области чисел (:
Для этого мне нужно построить список комментариев файл за файлом в порядке количества файлов, а затем запустить «Локи и лестницы».
Давайте попробуем это:
'WexjShfqeYQkqeYQkqeYQkqeYQkqeYQkqeYQkqeYQkqeYQkqeYQkqeYQkqeYQkqeYQkqeYQkqeYQkqeYQkqeYQkqeYQkqeYQkqeYQ'
Довольно плохо. Что, если каждое смещение в наших «Жёлобах и лестницах» является суммой смещений до этого момента?
In [202]: flag Out[202]: u'Well done buddy! You seem to be able to step carefully through the files. This is your flag: flag{ARChV!3$_Are_ThE_Bes7}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}'
Не самая умная задача…
Спасибо за прочтение, надеюсь поможет (: