Кто решит и напишет развёрнутое объяснение до 08.06 20:00 по МСК, закину сотыгу на балик зелёнки Первый крякми, не судите строго Линк на .exe VT
1. Инициализация и ввод ключа sub_140001710(Buf2); // Инициализация Buf2 (эталонное значение) sub_1400021A0(std::cout, "Insert your key\n", v29); // Вывод приглашения ввести ключ Buf1[0] = 0i64; // Инициализация Buf1 (буфер для ввода) Size = 0i64; // Инициализация переменной размера v67 = 15i64; // Инициализация переменной sub_140002370(std::cin, Buf1); // Чтение ввода пользователя в Buf1 C sub_140001710(Buf2); // Инициализация Buf2 (эталонное значение) sub_1400021A0(std::cout, "Insert your key\n", v29); // Вывод приглашения ввести ключ Buf1[0] = 0i64; // Инициализация Buf1 (буфер для ввода) Size = 0i64; // Инициализация переменной размера v67 = 15i64; // Инициализация переменной sub_140002370(std::cin, Buf1); // Чтение ввода пользователя в Buf1 2. Сравнение введённого ключа с эталонным v30 = Buf2; if ( v64 >= 0x10 ) // Если размер Buf2 больше или равен 16 v30 = (void **)Buf2[0]; // Присваиваем v30 адрес первого элемента Buf2 v31 = Buf1; v32 = (char *)Buf1[0]; v33 = v67; if ( v67 >= 0x10 ) // Если v67 больше или равен 16 v31 = (void **)Buf1[0]; if ( Size == v63 && !memcmp(v31, v30, Size) ) // Сравнение введённого ключа с эталонным значением C v30 = Buf2; if ( v64 >= 0x10 ) // Если размер Buf2 больше или равен 16 v30 = (void **)Buf2[0]; // Присваиваем v30 адрес первого элемента Buf2 v31 = Buf1; v32 = (char *)Buf1[0]; v33 = v67; if ( v67 >= 0x10 ) // Если v67 больше или равен 16 v31 = (void **)Buf1[0]; if ( Size == v63 && !memcmp(v31, v30, Size) ) // Сравнение введённого ключа с эталонным значением Если размер введённого ключа (Size) совпадает с эталонным размером (v63), и если содержимое буфера v31 совпадает с содержимым v30, то выполняется блок кода для успешного ввода. 3. Обработка успешного ввода ключа // Подготовка успешного сообщения v35 = (__m128i *)sub_140001290(&v57); v36 = v35[1].m128i_i64[0]; v37 = v35[1].m128i_u64[1]; if ( v37 - v36 < 0x13 ) { v35 = (__m128i *)sub_140002B10(v35, v52, 0x13ui64); } else { v35[1].m128i_i64[0] = v36 + 19; v38 = (unsigned __int64)v35; if ( v37 >= 0x10 ) v38 = v35->m128i_i64[0]; // Конструкция сообщения о флаге memmove((void *)(v38 + 19), (const void *)v38, v36 + 1); memcpy((void *)v38, "Congrats! Flag is: ", v39); memcpy((void *)(v38 + v39), &aCongratsFlagIs[v39 + 19], 19 - v39); } // Подготовка блока для вывода Block[0] = 0i64; v54 = 0i64; *(__m128i *)Block = *v35; v54 = v35[1]; v35[1].m128i_i64[0] = 0i64; v35[1].m128i_i64[1] = 15i64; v35->m128i_i8[0] = 0; C // Подготовка успешного сообщения v35 = (__m128i *)sub_140001290(&v57); v36 = v35[1].m128i_i64[0]; v37 = v35[1].m128i_u64[1]; if ( v37 - v36 < 0x13 ) { v35 = (__m128i *)sub_140002B10(v35, v52, 0x13ui64); } else { v35[1].m128i_i64[0] = v36 + 19; v38 = (unsigned __int64)v35; if ( v37 >= 0x10 ) v38 = v35->m128i_i64[0]; // Конструкция сообщения о флаге memmove((void *)(v38 + 19), (const void *)v38, v36 + 1); memcpy((void *)v38, "Congrats! Flag is: ", v39); memcpy((void *)(v38 + v39), &aCongratsFlagIs[v39 + 19], 19 - v39); } // Подготовка блока для вывода Block[0] = 0i64; v54 = 0i64; *(__m128i *)Block = *v35; v54 = v35[1]; v35[1].m128i_i64[0] = 0i64; v35[1].m128i_i64[1] = 15i64; v35->m128i_i8[0] = 0; 4. Вывод сообщения об успехе cpp sub_140002950(std::cout, v43, si128.m128i_i64[0]); // Вывод сообщения в консоль C cpp sub_140002950(std::cout, v43, si128.m128i_i64[0]); // Вывод сообщения в консоль 5. Обработка неверного ключа cpp else { sub_1400021A0(std::cout, "Wrong! Better luck next time \n", v34); // Вывод сообщения об ошибке } C cpp else { sub_1400021A0(std::cout, "Wrong! Better luck next time \n", v34); // Вывод сообщения об ошибке } 6. Завершение программы cpp sub_1400021A0(std::cout, "Press any key to exit . . .", v44); std::ostream::operator<<(v48, sub_140002560); getch(); C cpp sub_1400021A0(std::cout, "Press any key to exit . . .", v44); std::ostream::operator<<(v48, sub_140002560); getch();