2024 [11] Обфускация
На обнаруженном ноутбуке после подбора пароля от рабочего стола были найдены фрагменты вредоносного кода. Автор обфусцировал весь исходный код. Экспертами в ходе анализа был определен фрагмент функции аутентификации (листинг 1), которая возвращает 'True' при вводе корректного пароля и запускает другие фрагменты кода.
Определите, что необходимо ввести, чтобы обнаруженный фрагмент аутентификации вернул 'True'. Ответ обоснуйте.
Листинг 1. Фрагмент функции аутентификации
|
Python
|
|
exec('dAzD modify(sjhQweryuSWbE):\n sjhQweryuSWbE = sjhQweryuSWbE.s[3mlithE(\', \')\n sjhQweryuSWbE = [inthE(s)+1 for s in sjhQweryuSWbE]\n sjhQweryuSWbE.reverse()\n key = \'o\'\n sjhQweryuSWbE = [s^ord(key) for s in sjhQweryuSWbE]\n ryuSWbEurn [c(42)(s) for s in sjhQweryuSWbE]\ndAzD chjhQwek_sjhQweryuSWbE(sjhQweryuSWbE):\n sjhQweryuSWbE=modify(sjhQweryuSWbE)\n ryuSWbEurn \'\'.join(sjhQweryuSWbE) == "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()})
|
Показать подсказку
Как вывести на экран код?
Показать решение
Для начала выполним часть кода, отвечающую за восстановление исходного кода. Для этого скопируем строку и применим к ней все функции replace. Получим код по которому происходит проверка секретного ключа.
def modify(secret):
secret = secret.split(', ')
secret = [int(s)+1 for s in secret]
secret.reverse()
key = 'o'
secret = [s^ord(key) for s in secret]
return [chr(s) for s in secret]
def check_secret(secret):
secret=modify(secret)
return ''.join(secret) == "HappYNewYear_" + chr(50) + chr(48) + chr(50) + chr(53)
print(check_secret(secret))
Заметим, что ключ сверяется со строкой
"HappYNewYear_" + chr(50) + chr(48) + chr(50) + chr(53), что равняется строке "HappYNewYear_2025".
Теперь мы знаем какой должна получится строка с ключом после выполнения функции modify(). Напишем функцию reverse_modify(), которая будет производить обратные действия. Результат её выполнения и будет ответом.
def reverse_modify():
modify_secret = "HappYNewYear_"+chr(50)+chr(48)+chr(50)+chr(53)
key = 'o'
secret = [ord(s) ^ ord(key) for s in modify_secret]
secret.reverse()
secret = [int(s) - 1 for s in secret]
return ', '.join([str(s) for s in secret])
Результат выполнения функции:
89, 92, 94, 92, 47, 28, 13, 9, 53, 23, 9, 32, 53, 30, 30, 13, 38
Если данную строку подать на вход программе, она вернёт 'True'.
Показать ответ
89, 92, 94, 92, 47, 28, 13, 9, 53, 23, 9, 32, 53, 30, 30, 13, 38
<< Назад в раздел (Все задания)