1. Программа на виртуалке под отладчиком x64dbg самозакрывается и ничего не делает. Начинаем исследовать с помощью IDA Pro. Находим проверку языка и даты: v3 = GetConsoleWindow(); ShowWindow(v3, 0); v4 = GetUserDefaultUILanguage(); if ( (_BYTE)v4 == 25 || HIBYTE(v4) == 25 || (SystemTime.wYear = 0, *(_DWORD *)&SystemTime.wMonth = 0, *(_DWORD *)&SystemTime.wDay = 0, *(_DWORD *)&SystemTime.wMinute = 0, SystemTime.wMilliseconds = 0, GetLocalTime(&SystemTime), SystemTime.wMonth > 6u) && SystemTime.wDay > 1u && SystemTime.wYear > 2021u ) { ExitProcess(0); } Заполняем байтами 0x90 вызов функции ExitProcess: .text:004040AD 53 push ebx ; uExitCode .text:004040AE FF 15 7C 20 41 00 call ds:ExitProcess Также находится функция по адресу .text:00402FCC, которая проверяет различные отладчики. В начало функции пишем 2 инструкции: xor eax, eax; ret. После данных манипуляций программа начинает работать. Я зашифровал свой пробный файл, положив его в директорию zn2021_folder около ComputerSpeedup.exe. 2. Основная логика работы находится в функции .text:00403592. От перевернутого имени файла считается crc32-хеш, дальше с помощью специального алгоритма с константой 0x15A4E35 из crc32-хеша рассчитываются 2 строки по 8 байт каждая (одна используется как ключ (key) aes в cfb режиме, вторая - как вектор инициализации (iv)). В действительности, в заложенной реализации aes, для iv требуется 16 байт, для key - 32 байта. Поэтому используются различные служебные метаданные из кучи Windows. В случае с iv - берется 8 найденных байт из crc32-хеша и 8 байт 0xAB (они всегда лежат в куче после выделенного участка памяти на 8 байт). В случае с key - берется 8 найденных байт из crc32-хеша, 8 байт 0xAB, 8 байт 0x00, 6 байт случайных (они меняются при каждом перезапуске программы) и 2 байта 0x00 0x18. Для расшифровки тестового файла использовался скрипт "decrypt_test.php" (6 случайных байт подсмотрел в отладчике). Но для расшифровки docx-файла из задания подбор неизвестных 6 байт ключа aes может занять не один месяц. После этого было отправлено сообщение жюри о наличии ошибки в задании. 3. Жюри выложило исправленную версию файла и шифрованного файла - теперь для iv и key выделяется 32 байта памяти и все они заполняются данными, получаемыми из crc32-хеша от перевернутого имени файла. Подбирать метаданные кучи больше не требуется. Для iv достаточно было выделять и генерировать только 16 байт, но эта ошибка не является критической. Для расшифровки файла "plan_important.docx" и получения ответа был использован скрипт "decrypt.php". В нем же приведена используемая криптографическая схема.