Pull to refresh

Comments 7

Сейчас проверил и оказалось, что эти задания легко пройти при помощи LLM. Кроме куба, конечно.

Закинул HEX из hidden_payload в чат с GPT и она мне выдала сразу все 2 флага за 13 минут и рассказала как их получить.

Ответ ChatGPT

Нашёл два флага:

  1. OFFZONE{Th1s_1s_0nly_Th3_B3g1nn1ng_A7E6FE25}

  2. OFFZONE{Y0u_D1d_1t_B578E7F3}

1. HEX → Base64

Из таблицы нужно оставить только шестнадцатеричные строки, объединить их и декодировать:

grep -Eo '[0-9A-Fa-f]{64}' input.txt |
    tr -d '\n' |
    xxd -r -p > layer1.b64

Начало результата:

UEsDBBQAAAAAAAAAIQ...

UEsDB — характерное начало ZIP, закодированного в Base64:

base64 -d layer1.b64 > outer.zip
file outer.zip

Получаем:

Zip archive data

2. Повреждённый ZIP

При проверке архива возникает ошибка:

unzip -t outer.zip
bad CRC f8da00e2 (should be 71578a5d)

Архив содержит один файл:

badge.jpg

В Base64 намеренно изменён регистр одного символа. На смещении 582 находится O, хотя должно быть o:

...AEJYWVOg...
         ^
...AEJYWVog...

Исправляем:

python3 - <<'PY'
from pathlib import Path

data = bytearray(Path("layer1.b64").read_bytes())

assert data[582] == ord("O")
data[582] = ord("o")

Path("layer1.fixed.b64").write_bytes(data)
PY

base64 -d layer1.fixed.b64 > outer.fixed.zip
unzip -t outer.fixed.zip
unzip outer.fixed.zip

Теперь CRC совпадает:

badge.jpg OK
No errors detected

Повреждение затрагивало ICC-профиль JPEG: сигнатура XYS\xa0 после исправления превращается в нормальную XYZ . Совпадение CRC 71578a5d подтверждает, что замена правильная.

3. Первый флаг — EXIF

Смотрим метаданные изображения:

exiftool -Copyright badge.jpg

Результат:

Copyright : OFFZONE{Th1s_1s_0nly_Th3_B3g1nn1ng_A7E6FE25}

Или через ImageMagick:

identify -format '%[EXIF:Copyright]\n' badge.jpg

Первый флаг:

OFFZONE{Th1s_1s_0nly_Th3_B3g1nn1ng_A7E6FE25}

4. Данные после конца JPEG

Проверяем сигнатуры внутри файла:

grep -aob $'\xff\xd9' badge.jpg
grep -aob $'PK\x03\x04' badge.jpg

Получаем:

1072: JPEG EOI
1074: PK...

Маркер FF D9 завершает JPEG на смещении 1074, а сразу после него начинается ещё один ZIP. Вырезаем его:

dd if=badge.jpg of=inner.zip bs=1 skip=1074 status=none
unzip -l inner.zip

Внутри один файл:

text.txt

Извлекаем содержимое:

unzip -p inner.zip text.txt
pHsL5tvBiZEsLNpeUcfUXyKZhSbxRn3eUJ4p1z

5. Base58 → второй флаг

Строка использует алфавит Base58: в ней нет неоднозначных символов 0OI и l.

Декодировать можно в CyberChef операцией From Base58 либо Python:

s = "pHsL5tvBiZEsLNpeUcfUXyKZhSbxRn3eUJ4p1z"
alphabet = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"

number = 0
for char in s:
    number = number * 58 + alphabet.index(char)

result = number.to_bytes((number.bit_length() + 7) // 8, "big")
print(result.decode())

Результат:

OFFZONE{Y0u_D1d_1t_B578E7F3}

Дополнительная проверка ZIP-полей, ICC, пиксельных LSB и Steghide-структур других флагов не выявила. Итог — два флага.

В musicbox было два флага. Первый - по команде "musicbox answer Never Gonna Give You Up". Второй там более геморройно доставать, можешь потыкаться сам.

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

Отлично! У меня было подозрение, что рикроллом всё не заканчивается, но не догадался как.
Зато такое точно при помощи LLM не вытащишь.
Теперь придётся еще второй флаг получать)

Можно по подробнее про память? Как это стало понятно? Удалось снять прошивку?

Да, я снимал прошивку во время конфы, но я сделал фатальную оплошность: сначала выпаял чип, припаял на донора, совершил все манипуляции чтобы снять Flash, припаял всё на место, а потом понял что мне не хватает еще нескольких участков памяти (DWT в частности). На второй круг всю процедуру проходить очень не хотелось, тем более что за восьмой флаг давали всего 600 OFC. За все "доступные" флаги давали 900 OFC.

Ну а в самом Flash в саааамом кнце лежит чанк со всеми закукоженными флажками. И их там 8 штук, а к заданиям привязано лишь 7. Отсюда и гипотеза.

Очень круто. Я ковырял прошивку 2024 года, было бы интересно посмотреть эту. Есть возможность скинуть?

В 2024 FW лежали статические паттерны всех флагов. Один флаг можно было взять только после дампа прошивки. Там и ключ однозначно об этом говорил j00_C4nt_kn0W_Th4t_wiTH0ut_DumPing_tH3_Firmw4r3)

за восьмой флаг давали всего 600 OFC. За все "доступные" флаги давали 900 OFC.

У меня немного не сходится арифметика. Не помню точно, но за analyst + hidden_payload давали 260 OFC, за первую часть cub_3 давали еще 50 OFC

Где-то публично писали, что всего за бейдж 900 OFC?

Публично не писали, мы с кентами все 7 флагов сдали и получили ровно 900.

Если напишешь свою телегу - скину дамп 2026

Написал в личку

Sign up to leave a comment.

Articles