Подстановочная схема, применённая к бинарнику obf_payload в этой задаче.
Для каждого байта b на позиции i во входных данных:
- вычислите t = i mod 8;
- вычислите transformed = gf_mult(b, lookup[t]), где lookup — таблица
ниже, а gf_mult — умножение в поле GF(2^8) с неприводимым полиномом AES
0x11B.
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 байтам. Удалите нулевые
байты после восстановления исходного содержимого.
Бұл тапсырмадағы obf_payload бинарлық файлында қолданылған ауыстыру схемасы.
Кіріс мәліметтеріндегі i орнындағы әрбір b байт үшін:
- t = i mod 8 есептеңіз;
- transformed = gf_mult(b, lookup[t]) есептеңіз. Мұнда lookup — төмендегі
кесте, ал gf_mult — AES қайтарылмайтын 0x11B полиномымен GF(2^8)
өрісіндегі көбейту.
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{...}Платные подсказки. Открывайте, если действительно нужно. / Ақылы кеңестер. Шынымен қажет болса ашыңыз.
RU: Задача о распознавании паттерна обфускации в коде, отличного от стандартных packer'ов.
KK: Стандартты packer-лерден өзгеше код обфускация үлгісін тану туралы тапсырма.
RU: Не UPX, не Themida, не commercial packers. Класс — custom транформация, в которой исходные операции/строки преобразованы по предсказуемому правилу.
KK: UPX емес, Themida емес, commercial packer-лер емес. Класс — бастапқы операциялар/жолдар болжамды ережемен түрлендірілген custom трансформация.