Track 3 — Learn & Apply · Reverse Engineering · 325 pts
KPF — вымышленный бинарный контейнерный формат для упаковки одной «полезной нагрузки» (payload). Спецификация умышленно простая; цель — реализовать парсер строго по описанию.
| Смещение | Длина (байт) | Поле | Содержимое |
|---|---|---|---|
| 0 | 4 | magic | ASCII: KPF1 |
| 4 | 1 | version | 0x01 |
| 5 | 1 | xor_key | Однобайтовый ключ XOR-кодирования payload |
| 6 | 2 | padding | Игнорировать (обычно 0x00 0x00) |
| 8 | 4 | payload_len | Длина payload в байтах, little-endian uint32 |
| 12 | payload_len | payload | Каждый байт XOR-нут с xor_key |
KPF1 (4B 50 46 31).version, xor_key, пропустить padding.payload_len (little-endian).payload_len байт payload.xor_key → получить открытый payload.Скопируйте hex ниже и сохраните как бинарный файл (например, через xxd -r -p) — либо просто работайте напрямую с hex-строкой.
4B 50 46 31 01 42 00 00 14 00 00 00 09 12 04 1D 12 03 1B 0E 0D 03 06 1D 10 07 14 07 03 0E 07 06
Извлечённый payload — ASCII-строка. Введите её в форму заглавными буквами, без пробелов, с подчёркиваниями там, где они есть.
data = bytes.fromhex("4b50463101420000140000000912041d12031b0e0d03061d10071407030e0706")
assert data[:4] == b"KPF1"
key = data[5]
payload_len = int.from_bytes(data[8:12], "little")
payload = bytes(b ^ key for b in data[12:12+payload_len])
print(payload.decode())
KPF — бір «payload»-ты буып-түю үшін ойдан шығарылған бинарлық контейнер форматы. Спецификация әдейі қарапайым; мақсат — сипаттамаға қатаң сәйкес парсер жазу.
| Орын | Ұзындық (байт) | Өріс | Мазмұн |
|---|---|---|---|
| 0 | 4 | magic | ASCII: KPF1 |
| 4 | 1 | version | 0x01 |
| 5 | 1 | xor_key | Payload-ты XOR-кодтау үшін бір байт |
| 6 | 2 | padding | Елемеу (әдетте 0x00 0x00) |
| 8 | 4 | payload_len | Payload ұзындығы байтпен, little-endian uint32 |
| 12 | payload_len | payload | Әр байт xor_key-пен XOR жасалған |
KPF1-ді тексеру (4B 50 46 31).version, xor_key оқу, padding-ты өткізіп жіберу.payload_len оқу (little-endian).payload_len байт payload-ты оқу.xor_key-пен XOR жасау → ашық payload-ты алу.4B 50 46 31 01 42 00 00 14 00 00 00 09 12 04 1D 12 03 1B 0E 0D 03 06 1D 10 07 14 07 03 0E 07 06
Шығарылған payload — ASCII-жол. Оны формаға бас әріптермен, бос орынсыз, керек жерде асты сызықпен енгізіңіз.
RU: Введите ответ ниже. Сервер вернёт ваш персональный флаг.
KK: Жауапты төменде енгізіңіз. Сервер сізге жеке жалаушаны қайтарады.
RU: Каждая подсказка снимает баллы.
KK: Әр кеңес ұпайды кемітеді.