После драки, но знаний для...
Задание 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 завершаю.