● capture_0x4F — трафик перехвачен, слои обфускации не сняты

Один фрагмент. Три слоя. Ни одного явного ключа.

Дамп прогнан через однобайтовый XOR, затем через блочную перестановку, затем упакован в base64 поверх потокового XOR с составным ключом. Ключ каждого следующего слоя собирается из результата предыдущего.

scroll ↓
capture metadata

Что во входном дампе

Три независимых блока. Между ними нет общего ключа — есть только зависимость: результат снятия слоя N становится частью материала для слоя N+1. Порядок фиксирован.

Никаких словарных подсказок. Только данные и то, что можно из них вычислить.

block 01

hex dump / single-byte XOR

21 байт, зашифрован одним байтом-ключом. Пространство перебора — 256 значений.

locked
block 02

columnar transposition

Символы переставлены по колонкам. Порядок чтения колонок задаётся числовым ключом.

locked
block 03

base64 / keyed XOR stream

Составной ключ = байт из блока 01 + слово из блока 02. Собирается вручную.

locked
block 01 / 03

Однобайтовый XOR

Каждый байт исходного текста прошёл XOR с одним и тем же байтом-ключом. Двигайте байт от 0 до 255 — вывод пересчитывается вживую. Читаемый ASCII появится ровно на одном значении.

capture_0x4F :: block_01 21 bytes
64656e6f071d0a7f7a666364610a797e6b68666f
0 / 0x00
 
block 02 / 03

Блочная перестановка

Текст записан построчно в сетку из 5 колонок, затем колонки выведены не по порядку. Ниже — та же сетка: назначьте каждой колонке порядковый номер чтения (1–5), кликая по заголовкам, и текст соберётся построчно.

capture_0x4F :: block_02 5 columns / 7 rows
C TET EERDERRDCGEVHPEASNL ECSA LEOX
 
block 03 / 03 — final

Составной ключ

Финальный блок — base64, под которым потоковый XOR. Ключ строится вручную: слово, восстановленное из блока 02, вплотную к байт-ключу из блока 01 в десятичной форме — без пробела, число сразу за словом.

capture_0x4F :: block_03 base64 / XOR stream
Bw0DEAB6cRFoBAQJfXZuaAIXCnd3EQxyEQoUehUGFgoDcg==
word?
+
byte?
= составной ключ потока
// recovered plaintext