В программе реализована процедура аутентификации по логину и паролю.
Сначала запрашивается логин в виде строки. Полученая строка переворачивается с помощью функции std::string invert_login(std::string admin)
и сравнивается с требуемым перевернутым логином "nimda"
Далее запрашивается строка с паролем и со строкой делаются следующие преобразования.
- Двоичное представление каждого символа строки сдвигается побитово влево на 4
- Результат предыдущей операции переводится в 16-ричное представление
- Далее с результатом предыдущей операции производится сложение с логином по модулю 2 , и полученная строка сравнивается с требуемым паролем
-
Опирация побитового сдвига влево на 4 - разбита на 4 операции:
- двиг влево на 2 , сдвиг влево на 2, сдвиг влево 2, сдвиг вправо на 2.
-
Вместо прямого указания в программе количество побитовых сдвигов - вызывалась функция c различным параметрами
cifre
, которая независимо от параметров всегда возвращает 2. -
Добавлены бесполезные условные переходы, если число символа будет отрицательным.
-
Добавлены бесполезные условия Switch case.
-
Ряд констант и программных выражений были заменены на безсмыленные фразы с помощью директивы #define
-
Реализован метод детектирования отладки программы с помощью методов из библиотеки
chrono
, если программа выполняется больше 30 секунд нужно завершать программу с ошибкой. -
При сборке файла были использованы флаги: -s для удаления таблицы .symtab, -O3 (оптимизация и ухудшение читабельности);
-
бинарный был упакован с помощью upx
-
mkdir build && cd build
-
cmake ..
-
std::string offset(const std::string &s) - принимает строку и сдвигает каждый символ в двоичном представлении побитово на 4 влево и возвращает новую строку.
-
std::string string_to_hex(const std::string &input) - переводит строку символов в строку из шестнадцатиричных кодов.
-
std::bitset<32> to_bitset(std::string s) - переводит строку в объект из двоичных чисел.
-
std::string to_string(std::bitset<32> bs) - переводит из типа bitset в строку.
-
std::string xoring(std::string str1, std::string str2) - прозводит операцию сложения по модулю 2.
-
std::string crypto(std::string password, std::string login) - функций в которой последоветельно вызываются функции ofset, string_to_hex, xoring и возвращается результат в виде строки.
-
std::string invert_login(std::string admin) - переворачивает строку.
Если вводить правильные данные: login: admin
password: 1y8rOStw0RZV29qfqVpp
Если вводить неправильные данные, то выводится сообщение об ошибке и предложение ввести пароль еще раз: