From 21ecc81c3aacdecf62f18a3db36ed8e003e6bc13 Mon Sep 17 00:00:00 2001 From: Silmaulviel Date: Sat, 17 Jun 2023 12:37:43 +0000 Subject: [PATCH] =?UTF-8?q?Upload=20files=20to=20'tasks/=D0=92=D0=BE=D0=B7?= =?UTF-8?q?=D0=B2=D1=80=D0=B0=D1=89=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=B7=D0=B0?= =?UTF-8?q?=D1=88=D0=B8=D1=84=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=BD=D0=BE?= =?UTF-8?q?=D0=B3=D0=BE=20=D1=84=D0=B0=D0=B9=D0=BB=D0=B0'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../README.md | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 tasks/Возвращение зашифрованного файла/README.md diff --git a/tasks/Возвращение зашифрованного файла/README.md b/tasks/Возвращение зашифрованного файла/README.md new file mode 100644 index 0000000..5db9f36 --- /dev/null +++ b/tasks/Возвращение зашифрованного файла/README.md @@ -0,0 +1,47 @@ +Условие (можете поменять если придумаете что-то эпичнее): + +Нас опять взломали и зашифровали все файлы. Нам удалось извлечь шифровальщик, но мы понятия не имеем, как расшифровать их. Поможете? Вот вам шифровальщик и пример зашифрованного файла, кстати. + +Флаг: ```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-им, потом вычитаем. \ No newline at end of file