2024 [8-10] Обфускация
На компьютере хакера нашли фрагменты вредоносного кода. Автор обфусцировал весь исходный код. В ходе анализа был определен фрагмент функции аутентификации (листинг 1), которая возвращает 'True' при успешном вводе пароля и запускает другие фрагменты кода.
Определите, какое секретное слово необходимо ввести, чтобы обнаруженный фрагмент аутентификации вернул 'True'. Ответ обоснуйте.
Листинг 1. Фрагмент функции аутентификации
|
Python
|
|
exec('dAzD chjhQwek_sjhQweryuSWbE(sjhQweryuSWbE):\n ryuSWbEurn sjhQweryuSWbE[:17] == "Ha[3m[3mYNioskjear_" + c(487tHH0) + c(42)(48) + c(487tHH0) + c(487tHH3)\n[3mrinthE(chjhQwek_sjhQweryuSWbE(sjhQweryuSWbE))\n'.replace('87tHH', '2)(5').replace('yuSWb', 'eth').replace('ioskj', 'ewY').replace('(42)', 'hr').replace('AzD', 'ef').replace('qQT', 'ut').replace('[3m', 'p').replace('jhQwe', 'ec').replace('thE', 't'), {'secret': input()})
|
Показать подсказку
Как вывести на экран код?
Показать решение
Если вывести на экран строку
'dAzD chjhQwek_sjhQweryuSWbE(sjhQweryuSWbE):\n ryuSWbEurn sjhQweryuSWbE[:17] == "Ha[3m[3mYNioskjear_" + c(487tHH0) + c(42)(48) + c(487tHH0) + c(487tHH3)\n[3mrinthE(chjhQwek_sjhQweryuSWbE(sjhQweryuSWbE))\n'.replace('87tHH', '2)(5').replace('yuSWb', 'eth').replace('ioskj', 'ewY').replace('(42)', 'hr').replace('AzD', 'ef').replace('qQT', 'ut').replace('[3m', 'p').replace('jhQwe', 'ec').replace('thE', 't')
То получится:
def check_secret(secret):
return secret[:17] == "HappYNewYear_" + chr(50) + chr(48) + chr(50) + chr(53)
print(check_secret(secret))
Это и есть исходный код функции аутентификации. Отсюда извлекаем первую часть ключа: "HappYNewYear_".
С помощью ASCII-таблицы определяем символы по кодам:
50 – ‘2’,
48 – ‘0’,
50 – ‘2’,
53 – ‘5’.
Таким образом, ключ равен "HappYNewYear_2025"
При запуске программы, если ввести указанный ключ, программа вернет ‘True’. При этом можно заметить, что можно вводить строку любой длины, главное, чтобы первые 17 символов были “HappYNewYear_2025”.
Показать ответ
HappYNewYear_2025
<< Назад в раздел (Все задания)