Условие (можете поменять если придумаете что-то эпичнее): Нас опять взломали и зашифровали все файлы. Нам удалось извлечь шифровальщик, но мы понятия не имеем, как расшифровать их. Поможете? Вот вам шифровальщик и пример зашифрованного файла, кстати. Флаг: ```ctf{0h_c0ngr4tz_y0u_g0t_th1s!}``` Решение: Открываем файл в <ваш-любимый-дизассемблер-нейм> Видим в main() примерно следующий код (ghidra), который подозрительно похож на то, что мы видели в предыдущем таске: ``` undefined8 main(void) { file = fopen("flag.txt","r"); if (file == (FILE *)0x0) { puts("File does not exist!"); } else { fgets(line,0x22,file); copying(); encryption(); puts(ans); fclose(file); } return 0; } ``` Снова открывается файл flag.txt и из него читаются 0х22 символа. Функция copying() опять просто копирует одну строку в другую. Функция encryption() нас расстроит, но не сильно: ``` void encryption(void) { int local_c; local_c = 0; while (local_c < 0x21) { local_c = local_c + 1; ans[local_c] = (char)local_c + ans[local_c] ^ 8; } return; } ``` Здесь опять xor с той же константой, но помимо этого результат еще складывается с позицией символа в строке. Для декрипта важно не перепутать порядок этих действий: сначала xor-им, потом вычитаем.