
На прошлогоднем CTF-турнире формата Jeopardy задача из Misc давала 50 очков — минимум. Файл содержал строку NjYlMjA2YyUyMDYxJTIwNjclMjA3YiUyMDY4JTIwNjUlMjA3OCUyMDVmJTIwNzUlMjA3MiUyMDZjJTIwNWYlMjA2MiUyMDMzJTIwMzQlMjA3ZA==. Ни подсказок, ни описания — только слово «layers». Три операции в CyberChef, 47 секунд, флаг в Output. Но до того как такая скорость стала нормой, аналогичные задачи съедали по 20 минут. Не было системы: какую кодировку пробовать первой, как отличить base64 от hex с ходу, зачем строка заканчивается на == и что делать, если после первого декодирования результат снова выглядит как каша.
Эта шпаргалка — концентрат того, что я бы хотел получить перед первым CTF. Паттерны распознавания кодировок, пошаговые рецепты CyberChef и разбор цепочек преобразований — от входной строки до flag{...}.
Декодирование данных в CTF начинается не с инструмента, а с глаз. У каждой кодировки свои маркеры — характерные признаки, по которым формат определяется до запуска чего-либо. Типичная ошибка — сразу тянуть блоки в Recipe наугад. Правильный порядок: посмотрел, определил, декодировал.
Base64 использует алфавит из 64 символов: A-Z, a-z, 0-9, плюс + и /. Строка дополняется символами = до длины, кратной четырём. Видишь набор латинских букв и цифр, который заканчивается на = или == — с высокой вероятностью это base64.
Характерные примеры:
- SGVsbG8gV29ybGQ= — одиночный =, классика
- dGVzdA== — двойной ==
- Y3RmX2ZsYWd7ZGVjb2RlX21lfQ== — длинная строка с паддингом
Нюанс: не каждая base64-строка содержит =. Если исходные данные кратны трём байтам, паддинг не нужен. Отсутствие = не исключает base64. Ориентируйся на алфавит: только A-Za-z0-9+/ и длина кратна 4 — пробуй base64 первым.
Отдельная история — Base64url. Тут + заменён на -, а / на _. Встречается в JWT-токенах и URL-параметрах в веб-задачах. CyberChef обрабатывает оба варианта через одну операцию From Base64 с параметром Alphabet.
Шестнадцатеричная кодировка — только 0-9 и a-f (или A-F). Каждые два символа — один байт. Главные маркеры: чётная длина строки и отсутствие букв за пределами a-f.
48656c6c6f — "Hello" без разделителей66 6c 61 67 7b — начало flag{ через пробелы0x48656c6c6f — с явным префиксом 0xЕсли строка начинается с 0x — hex однозначно. Без префикса ориентируйся на алфавит и чётную длину.
URL-кодирование заменяет спецсимволы на %XX, где XX — hex-код символа. Маркер элементарный: увидел % перед двумя шестнадцатеричными символами — это URL-encoding.
flag%7Bdecoded%7D — закодированы фигурные скобки%48%65%6c%6c%6f — полностью закодированная строкаhello%20world — пробел как %20В CTF-задачах Web URL-encoding встречается в GET-параметрах, cookie и заголовках HTTP. Авторы задач любят двойное URL-кодирование: %2548%2565%256c%256c%256f — тут сам символ % закодирован как %25.
| Визуальный признак | Кодировка | Операция в CyberChef |
|---|---|---|
A-Za-z0-9+/, паддинг =/== |
Base64 | From Base64 |
A-Za-z0-9-_, без +/, в URL-контексте |
Base64url | From Base64 (Alphabet: URL safe) |
Только 0-9a-fA-F, чётная длина |
Hex | From Hex |
Содержит %XX |
URL-encoding | URL Decode |
Только A-Z, сдвиг по алфавиту |
ROT13 | ROT13 |
Строка \x41\x42\x43 |
Hex escape | Unescape String |
| Строки с адресами и ASCII-колонкой | Hexdump | From Hexdump |
CyberChef — веб-приложение от GCHQ (Центр правительственной связи Великобритании), целиком работает в браузере. По данным официальной страницы проекта, никакие данные не уходят на сервер — всё крутится на клиенте в JavaScript. Проект живой: лицензия Apache 2.0, сотни контрибьюторов, регулярные обновления на GitHub.
Требования к окружению:
- Любой современный браузер (Chrome, Firefox, Edge)
- Интернет для онлайн-версии: https://gchq.github.io/CyberChef/
- Для изолированной работы: Docker-образ (docker run -it -p 8080:80 ghcr.io/gchq/cyberchef:latest) или ZIP-архив с GitHub
- Специальных системных требований нет — работает даже на планшете
Интерфейс разделён на четыре зоны:
Operations (левая панель) — каталог из сотен операций, сгруппированных по категориям: Data Format, Encryption/Encoding, Extractors, Compression, Hashing и другие. Есть строка поиска — набираешь base64 и сразу видишь нужный блок.
Recipe (центральная панель) — сюда перетаскиваешь операции. CyberChef применяет их сверху вниз, последовательно. Порядок блоков определяет результат: From Base64 → From Hex и From Hex → From Base64 дадут совершенно разный Output. Перепутал порядок — получил мусор.
Input (верхнее правое поле) — вставляешь текст или перетаскиваешь файл.
Output (нижнее правое поле) — результат. Если включён Auto Bake (по умолчанию активен), результат обновляется мгновенно при любом изменении.
Полезная деталь: при наведении курсора на любой элемент и нажатии F1 появляется контекстная справка — как в Ghidra. Быстрый способ понять, что делает конкретная операция, без гугления.
Ограничение на размер файлов зависит от памяти браузерной вкладки, но на практике файлы тяжелее 50-100 МБ заметно тормозят браузер. Для CTF-задач хватает с запасом — текстовые строки с кодировками редко превышают несколько килобайт.
CyberChef закрывает 80% задач на декодирование, но у него есть границы:
| Сценарий | CyberChef | Python/bash |
|---|---|---|
| Одиночная строка, 1-5 слоёв | Идеально — визуально и быстро | Избыточно |
| Массовое декодирование (тысячи строк) | Fork работает, но тормозит | Быстрее через скрипт |
| Кастомный шифр с нестандартной логикой | Нет готовой операции | Нужен скрипт |
| Бинарные файлы >100 МБ | Браузер может зависнуть | Без ограничений |
| Автоматизация с условиями (if-then) | Ограниченно через Flow Control | Полная гибкость |
Base64 — самая частая кодировка в задачах категорий Crypto и Misc. По моему опыту с CTFtime-турниров, base64 встречается в каждом втором задании на декодирование beginner-уровня.
Пошаговое декодирование в CyberChef:
https://gchq.github.io/CyberChef/base64Y3RmX2ZsYWd7YmFzZTY0X2lzX25vdF9lbmNyeXB0aW9ufQ== в Inputctf_flag{base64_is_not_encryption}Запомни: операция называется From Base64 (декодирование), не To Base64 (кодирование). «From» — «из этого формата». Путаница между ними — ошибка номер один у новичков.
Многократное кодирование. Авторы задач кодируют строку в base64 два, три, даже пять раз подряд — матрёшка. Признак: после первого декодирования результат снова содержит только A-Za-z0-9+/=. Решение: перетаскиваешь несколько блоков From Base64 друг под другом. Каждый снимает один слой.
Base64 без паддинга. Некоторые генераторы обрезают = в конце. Строка Y3Rm — валидный base64, декодирующийся в ctf. CyberChef обрабатывает такие строки корректно без дополнительных настроек.
Base64 внутри другого формата. В Web-задачах base64 часто прячется внутри JSON ({"token": "SGVsbG8="}), в cookie или в HTTP-заголовке Authorization. Перед декодированием нужно вытащить строку — операция Regular Expression с паттерном для base64 поможет автоматизировать это.
Контекст реальной безопасности. Base64 — кодирование, не шифрование. Это важно. Злоумышленники используют base64 для обфускации вредоносных PowerShell-команд. По классификации MITRE ATT&CK исполнение через PowerShell — подтехника T1059.001 PowerShell (тактика Execution), а base64-обфускация команды — подтехника T1027.010 Command Obfuscation (тактика Defense Evasion). Классический паттерн из реальных инцидентов: powershell.exe -Enc JABXAEMAPQBOAGUAdw... — после флага -Enc идёт base64-команда. Аналитики SOC используют CyberChef именно для разбора таких payload'ов. Навык base64 декодирования из CTF переносится в работу blue team один к одному.
Hex-кодирование представляет каждый байт двумя шестнадцатеричными символами. В CTF hex появляется в задачах на реверс, стеганографию и криптографию.
В CyberChef операция From Hex имеет параметр Delimiter — разделитель между байтами:
| Формат в задаче | Пример | Delimiter |
|---|---|---|
| Слитный | 666c61677b68657844656d6f7d |
None |
| Через пробел | 66 6c 61 67 7b |
Space |
| С префиксом 0x | 0x66 0x6c 0x61 0x67 |
0x |
| Через двоеточие | 66:6c:61:67:7b |
Colon |
Если данные выглядят как полноценный hexdump с адресами и ASCII-колонкой (вывод xxd или hexdump), используй отдельную операцию From Hexdump — она парсит структуру дампа и вытаскивает только байты данных.
Трюк: в vim hex-редактирование доступно через :%!xxd (показать hex) и :%!xxd -r (вернуть обратно). Быстрый способ глянуть на бинарный файл без CyberChef — иногда достаточно, чтобы заметить строку флага глазами.
URL-encoding (percent-encoding) кодирует спецсимволы для безопасной передачи в URL. В CTF это категория Web: SQL-инъекции, XSS, обход фильтров.
В CyberChef операция URL Decode обрабатывает и %XX конструкции, и + как пробел. Типичные CTF-ловушки:
Двойное URL-кодирование. Строка %2548%2565%256c%256c%256f: первый проход URL Decode даёт %48%65%6c%6c%6f, второй — Hello. В CyberChef два блока URL Decode в Recipe — и готово. Этот приём используется в реальных атаках для обхода WAF-фильтров: если фильтр блокирует <script>, атакующий отправляет %253Cscript%253E. WAF декодирует один слой, видит %3Cscript%3E — пропускает. Сервер декодирует второй слой — получает рабочий payload.
Смешанное кодирование. Строка flag%7B%75%72%6C_decoded%7D содержит и закодированные, и обычные символы. URL Decode корректно обрабатывает оба типа, оставляя незакодированные символы как есть.
Цепочки преобразований — основа сложных CTF-задач на декодирование. Данные кодируются в несколько слоёв: сначала hex, затем base64, поверх URL-encoding. Чтобы вытащить флаг, цепочку нужно раскрутить в обратном порядке.
Исходная строка из задачи:
NjYlMjA2YyUyMDYxJTIwNjclMjA3YiUyMDY4JTIwNjUlMjA3OCUyMDVmJTIwNzUlMjA3MiUyMDZjJTIwNWYlMjA2MiUyMDMzJTIwMzQlMjA3ZA==
Шаг 1. Смотрим: символы A-Za-z0-9, паддинг == в конце. Похоже на base64. Перетаскиваем From Base64 в Recipe.
Результат: 66%206c%2061%2067%207b%2068%2065%2078%205f%2075%2072%206c%205f%2062%2033%2034%207d
Шаг 2. В результате видим %20 — URL-encoded пробелы. Добавляем URL Decode под From Base64.
Результат: 66 6c 61 67 7b 68 65 78 5f 75 72 6c 5f 62 33 34 7d
Шаг 3. Пары шестнадцатеричных символов через пробел — hex. Добавляем From Hex (Delimiter: Space).
Результат: flag{hex_url_b34} — полный флаг. Три блока в Recipe сверху вниз: From Base64 → URL Decode → From Hex. Порядок критичен.
Правило обратного порядка: если данные кодировались A → B → C, декодировать нужно C → B → A. Последняя применённая кодировка снимается первой. Работает для любого количества слоёв — хоть десять.
Когда формат неочевиден, операция Magic запускает автоматическое определение. Она анализирует паттерны во входных данных и предлагает наиболее вероятные преобразования с confidence score.
Порядок использования:
Согласно документации CyberChef на GitHub, Magic использует pattern matching по предсказуемым структурам распространённых кодировок (Base64, Hexadecimal, Gzip). Для каждого варианта указывается, какие операции нужно применить.
Ограничение: Magic хорошо справляется с одинарными и двойными кодировками, но на глубоких цепочках (4+ слоёв) может давать ложные срабатывания. На практике я использую Magic как стартовую точку: определил верхний слой — снял его вручную, запустил Magic снова для следующего. Послойный подход надёжнее, чем попытка раскрутить всю матрёшку автоматом.
Рецепт в CyberChef — сохранённая последовательность операций, которую можно экспортировать и переиспользовать. Ниже — готовые цепочки для задач, которые встречаются на каждом соревновании.
Классика Crypto beginner-уровня. Строка шифруется ROT13, затем кодируется в Base64.
Рецепт: From Base64 → ROT13
ROT13 — простейший шифр подстановки со сдвигом на 13 позиций. Узнаётся легко: если после base64-декодирования результат выглядит как читаемый текст, но буквы «не те» — пробуй ROT13. В CyberChef есть также ROT47 для полного набора печатных ASCII-символов.
Данные, XOR'нутые с одним байтом — регулярная задача в Crypto. В CyberChef операция XOR Brute Force перебирает все 256 возможных ключей и показывает результат для каждого. Глазами находишь в выводе строку с флагом — и готово.
Рецепт: XOR Brute Force (Key Length: 1)
Перебор 256 вариантов — дело тривиальное, решается за секунды без скрипта. Для ключей длиной 2+ байта уже понадобится Python — CyberChef эффективно перебирает только однобайтовые ключи.
Обфусцированные payload'ы часто сжимают перед кодированием. Если после From Base64 Output выглядит как бинарный мусор, но начинается с байтов 1f 8b (сигнатура gzip) — добавляй Gunzip.
Рецепт: From Base64 → Gunzip
Этот паттерн встречается и в реальных инцидентах — аналитики регулярно применяют цепочку From Base64 → Decompress для анализа вредоносных PowerShell-payload'ов. В терминологии MITRE ATT&CK это связка техник Obfuscated Files or Information (T1027) и Deobfuscate/Decode Files or Information (T1140, тактика Defense Evasion). Атакующий кодирует и сжимает, защитник распаковывает и декодирует. Зеркальные действия.
Операция Fork разбивает Input по разделителю (по умолчанию — перевод строки) и применяет все последующие операции к каждой строке отдельно. Незаменимо, когда в задаче дано 10-20 закодированных строк.
Рецепт: Fork (Split delimiter: \n) → From Base64
Каждая строка декодируется независимо, результаты отображаются последовательно. Меняя разделитель на запятую или точку с запятой, адаптируешь Fork под формат конкретной задачи.
CyberChef — основной инструмент для быстрого анализа, но иногда задача требует скрипта. Минимальный набор команд.
В терминале Linux утилита base64 декодирует одной строкой: echo 'Y3RmX2ZsYWd7ZGVjb2RlZH0=' | base64 -d — результат появится сразу. На macOS — base64 -D с заглавной D. Утилита base64 по классификации GTFOBins может использоваться и для чтения произвольных файлов при определённых привилегиях — полезно помнить при решении задач на privesc.
Для hex и URL в Python всё укладывается в пару строк:
import binascii
from urllib.parse import unquote
# Hex decode
print(binascii.unhexlify('666c61677b6865787d').decode())
# URL decode
print(unquote('flag%7Bdecoded%7D'))
# Цепочка: URL -> hex -> результат
raw = unquote('66%206c%2061%2067')
print(bytes.fromhex(raw.replace(' ','')).decode())
Python выигрывает у CyberChef в двух сценариях: массовая обработка (тысячи строк через цикл) и кастомная логика (нестандартный шифр, условия ветвления). Для всего остального CyberChef быстрее — не нужно открывать редактор, писать код и запускать интерпретатор.
Декодирование данных CTF — не изолированное упражнение. В реальных инцидентах аналитики ежедневно работают с обфусцированными данными. По классификации MITRE ATT&CK кодирование данных используется атакующими в нескольких тактиках:
Defense Evasion: техника Obfuscated Files or Information (T1027) и подтехника Encrypted/Encoded File (T1027.013) — атакующие кодируют файлы и команды в base64 или hex, чтобы обойти статические сигнатуры антивирусов и EDR.
Command and Control: техника Data Encoding (T1132) и подтехника Standard Encoding (T1132.001) — C2-трафик кодируется в base64 для обхода сетевых фильтров. Если DLP видит base64-строку в HTTP-запросе — не обязательно атака, но повод проверить.
Collection: техника Archive Collected Data (T1560) — перед эксфильтрацией украденные данные часто сжимаются и кодируются.
Когда в SOC-алерте видишь base64-строку в PowerShell-логе, навык из CTF позволяет за секунды определить содержимое. Тот же CyberChef, тот же From Base64 — контекст другой, а руки делают то же самое.
Семь из десяти CTF-задач на декодирование решаются одной схемой: посмотрел на строку, определил кодировку по визуальным маркерам, перетащил нужные блоки в CyberChef, получил флаг. Три оставшихся требуют нестандартного подхода — кастомного XOR-ключа, нетипичной комбинации сжатия и шифрования, эзотерического языка. Но даже тут первый шаг одинаковый: снять верхний слой и посмотреть, что внутри.
CyberChef — тот инструмент, который стоит освоить до первого CTF-турнира. Не Burp, не Ghidra, не Wireshark — именно CyberChef. На PicoCTF, HackTheBox и подобных платформах beginner-уровня 30-40% тасков категорий Crypto и Misc решаются чистым декодированием без единой строчки кода. Минимум времени на освоение, максимум решённых задач.
Ошибка, которую я вижу у тех, кто только заходит в CTF: они пытаются написать Python-скрипт для каждой строки. Скрипт хорош для автоматизации и кастомной логики. Но для стандартных цепочек base64-hex-URL CyberChef быстрее на порядок. Открывай CyberChef раньше терминала — это не привычка, а оптимизация. А если хочется выстроить понимание кибербезопасности от фундамента, а не собирать по кусочкам — на IB Basics берут с любого старта без «вы должны знать Linux на уровне X».
🚀 Хочешь закрепить на практике? Реши задачи по теме на HackerLab — категория «pentest-machines».
0 комментариев
Пожалуйста, войдите, чтобы оставить комментарий.
Загрузка комментариев...