все заметки

Learning Bear: Best Language

2025.03.14

После драки, но знаний для...

Задание Best Language (chal.html):

This one is kinda difficult to read. I wonder if there is a way to get the flag...

Открываем файл, сразу видна обфускация. Реформатируем код, чтоб не в одну строку.

И второе, что бросилось, это iv + name, а значит здесь какое-то шифрование.

А все это обернуто в btoa (base64encode) и сравнивается со строкой _0x3afc01(0x16b).

_0x3afc01 - это функция возврящает строку из массива _0x16fe8e, где все нужные данные (константы и названия функций). Вникать не нужно.

Я рефакторил вручную. Остановил дебагер в функции check и пошагово поменял всю обфускацию:

flag = document['getElementById']('flag')['value'];\nbtoa(String['fromCharCode']['apply'](null, new Uint8Array(\n\tawait crypto.subtle.encrypt({\n\t\t\t'name': 'AES-CBC',\n\t\t\t'iv': Uint8Array['from'](atob('DW9Ae+Ce4hzWoN5Zmm9aYg=='), _0x2ccfa2 => _0x2ccfa2['charCodeAt'](0x0))['buffer']\n\t\t},\n\t\tawait crypto.subtle.importKey('raw', Uint8Array['from'](atob('z7nXSLg8MqemJh/fLVK5iQ=='), _0x3b827e => _0x3b827e['charCodeAt'](0x0))['buffer'], 'AES-CBC', !![], ['encrypt', 'decrypt']),\n\t\tUint8Array['from'](atob(flag), _0xe8e4d5 => _0xe8e4d5['charCodeAt'](0x0))['buffer'])\n))) === 'KHqMYnltd1jkkzem60J+pe/Fv0XGJR1ShftFOCwKcL0='

Все шифрование на виду. Поэтому, мы меняем encrypt на decrypt, а flag на 'KHqMYnltd1jkkzem60J+pe/Fv0XGJR1ShftFOCwKcL0='

Вот так:

alert(String['fromCharCode']['apply'](null, new Uint8Array(\n\tawait crypto.subtle.decrypt({\n\t\t\t'name': 'AES-CBC',\n\t\t\t'iv': Uint8Array['from'](atob('DW9Ae+Ce4hzWoN5Zmm9aYg=='), _0x2ccfa2 => _0x2ccfa2['charCodeAt'](0x0))['buffer']\n\t\t},\n\t\tawait crypto.subtle.importKey('raw', Uint8Array['from'](atob('z7nXSLg8MqemJh/fLVK5iQ=='), _0x3b827e => _0x3b827e['charCodeAt'](0x0))['buffer'], 'AES-CBC', !![], ['encrypt', 'decrypt']),\n\t\tUint8Array['from'](atob('KHqMYnltd1jkkzem60J+pe/Fv0XGJR1ShftFOCwKcL0='), _0xe8e4d5 => _0xe8e4d5['charCodeAt'](0x0))['buffer'])\n)))

Флаг: LB{d4mn_y0u_08fu5c4702_10}

На этом знакомство с Learning Bear завершаю.