← Все задачи / Барлық тапсырмалар

The Cipher Onion

Track 3 Reverse Engineering 250 pts
Файлы / Файлдар: см. раздел Files прямо в задаче irange.

The Onion Obfuscation Scheme — Спецификация

Подстановочная схема, применённая к бинарнику obf_payload в этой задаче.

Алгоритм

Для каждого байта b на позиции i во входных данных:
- вычислите t = i mod 8;
- вычислите transformed = gf_mult(b, lookup[t]), где lookup — таблица
ниже, а gf_mult — умножение в поле GF(2^8) с неприводимым полиномом AES
0x11B.

Таблица lookup

lookup = [0x01, 0x03, 0x07, 0x0f, 0x1f, 0x3f, 0x7f, 0xff]

Обратное преобразование

Для каждого выходного байта c на позиции i:
- вычислите t = i mod 8;
- вычислите original = gf_div(c, lookup[t]) (умножение на мультипликативный
обратный элемент lookup[t]);
- таблица мультипликативных обратных в GF(2^8) стандартна, либо вычисляется
расширенным алгоритмом Евклида.

Прилагаемый артефакт

obf_payload — маленький бинарник (индивидуальный для каждого пользователя),
содержащий одну обфусцированную строку. Примените обратное преобразование,
чтобы извлечь флаг.

Замечание о паддинге

Исходный вход дополнен нулями до длины, кратной 8 байтам. Удалите нулевые
байты после восстановления исходного содержимого.


The Onion Obfuscation Scheme — Сипаттама (KK)

Бұл тапсырмадағы obf_payload бинарлық файлында қолданылған ауыстыру схемасы.

Алгоритм

Кіріс мәліметтеріндегі i орнындағы әрбір b байт үшін:
- t = i mod 8 есептеңіз;
- transformed = gf_mult(b, lookup[t]) есептеңіз. Мұнда lookup — төмендегі
кесте, ал gf_mult — AES қайтарылмайтын 0x11B полиномымен GF(2^8)
өрісіндегі көбейту.

lookup кестесі

lookup = [0x01, 0x03, 0x07, 0x0f, 0x1f, 0x3f, 0x7f, 0xff]

Кері түрлендіру

i орнындағы әрбір шығыс c байт үшін:
- t = i mod 8 есептеңіз;
- original = gf_div(c, lookup[t]) есептеңіз (lookup[t]-ке кері
мультипликативті элементке көбейту);
- GF(2^8)-дегі мультипликативті кері кестесі стандартты, немесе кеңейтілген
Евклид алгоритмімен есептеледі.

Қоса берілген артефакт

obf_payload — кіші бинарлық файл (әр пайдаланушыға дербес), бір
обфускацияланған жолды қамтиды. Жалаушаны алу үшін кері түрлендіруді
қолданыңыз.

Паддинг туралы ескерту

Бастапқы кіріс 8 байт еселігіне дейін нөлдермен толтырылған. Қалпына
келтіргеннен кейін нөлдік байттарды алып тастаңыз.

Формат флага / Жалауша форматы: flag{...}

Подсказки / Кеңестер

Платные подсказки. Открывайте, если действительно нужно. / Ақылы кеңестер. Шынымен қажет болса ашыңыз.

Подсказка 1 / Кеңес 1 (−15)

RU: Задача о распознавании паттерна обфускации в коде, отличного от стандартных packer'ов.

KK: Стандартты packer-лерден өзгеше код обфускация үлгісін тану туралы тапсырма.

Подсказка 2 / Кеңес 2 (−40)

RU: Не UPX, не Themida, не commercial packers. Класс — custom транформация, в которой исходные операции/строки преобразованы по предсказуемому правилу.

KK: UPX емес, Themida емес, commercial packer-лер емес. Класс — бастапқы операциялар/жолдар болжамды ережемен түрлендірілген custom трансформация.

← Все задачи / Барлық тапсырмалар