commit
This commit is contained in:
commit
ae37c0319a
143
BrutForce.cpp
Executable file
143
BrutForce.cpp
Executable file
@ -0,0 +1,143 @@
|
|||||||
|
#include<iostream>//Ввод вывод
|
||||||
|
#include<fstream>//Работа с файлами
|
||||||
|
#include<string>//Работа со строками
|
||||||
|
#include<vector>//Работа с динамическими массивами
|
||||||
|
#include<algorithm>//Работа с алгоритмами
|
||||||
|
#include<chrono>//Работа с временем
|
||||||
|
#include<thread>//Работа с многопоточностью
|
||||||
|
|
||||||
|
|
||||||
|
std::vector<std::string>usernames;// Храним имена пользователей
|
||||||
|
std::vector<std::string>passwords;// Храним пароли
|
||||||
|
|
||||||
|
void addUserFromFile()// Объявляем функцию добавления пользователей в файл
|
||||||
|
{
|
||||||
|
std::ifstream file("users.txt");// Создаём объект file типа std::ifstream
|
||||||
|
if(!file){//Если файл не открылся
|
||||||
|
std::cout<<"Файл не найден"<<std::endl;//Выводим сообщение об ошибке
|
||||||
|
return ;//Завершаем функцию
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string username, password;// Объявляем переменные типа string для пароля и имени пользователя
|
||||||
|
while (file >> username >> password){//Цикл читает файл до тех пор пока есть сходства
|
||||||
|
usernames.push_back(username);//Добавляем элемент в конец вектора
|
||||||
|
passwords.push_back(password);//Добавляем объект в конец вектора
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Verifier(const std::string& username, const std::string& password,//Проверка совпадений
|
||||||
|
const std::vector<std::string>& usernames, const std::vector<std::string>& passwords)//Списки логинов и паролей
|
||||||
|
|
||||||
|
{
|
||||||
|
for (size_t i=0; i<usernames.size(); i++)//Проходим по всем логигнам
|
||||||
|
{
|
||||||
|
if(usernames[i] == username && passwords[i] == password){//Если логин и пароль совпадают
|
||||||
|
return true;//Вход разрешён
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;//конец проверки
|
||||||
|
}
|
||||||
|
bool userExists(const std::string& username){//Проверяем наличие пользователя
|
||||||
|
for(const auto& existing: usernames){//Перебираем список логинов
|
||||||
|
if(existing == username){//Если логин найден
|
||||||
|
return true;//Пользователь существует
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;//Пользователь не найден
|
||||||
|
}
|
||||||
|
void bruteSmart(const std::string& targetPassword, const std::string& charset){//Функция умного подбора пароля
|
||||||
|
std::string current = std::string(targetPassword.length(), '.');//Строка заготовка из точек
|
||||||
|
|
||||||
|
for (size_t i=0; i<targetPassword.length();++i){//Перебираем каждый символ пароля
|
||||||
|
for(char c : charset){//Перебираем каждый символ из набора символов
|
||||||
|
current[i]=c;//Подставляем символ
|
||||||
|
std::cout<<"Пробуем: "<<current<<"\r"<<std::flush;//Вывод текущей попытки
|
||||||
|
std::this_thread::sleep_for(std::chrono::milliseconds(30));//Небольшая задержка
|
||||||
|
if(c == targetPassword[i]){//Если символ совпал с оригиналом
|
||||||
|
break;//Переходим к следующему символу
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
std::cout<<"\nПароль подобран: "<<current<<std::endl;//Выводим найденный пароль
|
||||||
|
|
||||||
|
}
|
||||||
|
void bruteForce(const std::string& username){//Запуск брутфорса по логину
|
||||||
|
auto it =std::find(usernames.begin(), usernames.end(), username);//Ищем логин в списке
|
||||||
|
if(it == usernames.end()){//Если не найден
|
||||||
|
std::cout<<"Пользователь не найден"<<std::endl;//Выводим сообщение
|
||||||
|
return;//Выход из функции
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t index = std::distance(usernames.begin(), it);//Получаем индекс пользователя
|
||||||
|
std::string targetPassword = passwords[index];//Получаем его пароль
|
||||||
|
|
||||||
|
const std::string charset = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()-_=+[]{};:'\",.<>?/\\|~";//Допустимые символы
|
||||||
|
|
||||||
|
|
||||||
|
std::cout<<"Запуск брутфорса на пользователя: " << username<<std::endl;//Вывод надписи
|
||||||
|
bruteSmart(targetPassword, charset);//Вызов самого брутфорса
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(){
|
||||||
|
addUserFromFile();//Добавляем пользователя в файл
|
||||||
|
while(true){//Бесконечный цикл для отображения
|
||||||
|
std::cout<<"\n===MENU==="<<std::endl;//Выводим надпись MENU
|
||||||
|
std::cout<<"1. Проверка пользователя"<<std::endl;//Выводим надпись "1. Проверка пользователя"
|
||||||
|
std::cout<<"2. Зарегистрировать нового пользователя"<<std::endl;//Выводим надпись "2.Зарегистрировать пользователя ""
|
||||||
|
std::cout<<"3. Брутфорс"<<std::endl;//Вывод "Брутфорс"
|
||||||
|
std::cout<<"4. Выход"<<std::endl;//Вывод надписи "3.Выход"
|
||||||
|
std::cout<<"Выбери действие: "<<std::endl;//Выводим "Выбери действие"
|
||||||
|
|
||||||
|
int choice;// Переменная хранящаяя выбор пользователя (1 , 2 или 3)
|
||||||
|
std::cin>>choice;//Ввод с клавиатуры
|
||||||
|
std::cin.ignore(); // пропускаем символ новой строки после ввода, чтобы избежать проблем с последующим вводом строк
|
||||||
|
|
||||||
|
if(choice==1){//Условие выбора
|
||||||
|
std::string username;//Переменная хранит имя пользователя и пароль
|
||||||
|
std::cout<<"Введи логин: ";//Запрашиваем логин
|
||||||
|
std::getline(std::cin, username);//Вводим логин с клавиатуры
|
||||||
|
if(userExists(username)){//Если введеные пользователем данные совпадают
|
||||||
|
std::cout<<"Пользователь найден"<<std::endl;//Выводим разрешенный доступ
|
||||||
|
}else{//Иначе
|
||||||
|
std::cout<<"Неверный логин или пароль"<<std::endl;//Выводим ошибку
|
||||||
|
}
|
||||||
|
|
||||||
|
}else if (choice ==2){//Условие выбора
|
||||||
|
|
||||||
|
std::string newUsername, newPassword;//Переменная хранящая новый пароль и логигн для регистрации нового пользователя
|
||||||
|
std::cout<<"Придумай логин: ";//Запрашиваем новыйь
|
||||||
|
std::getline(std::cin, newUsername);//Вводим с клавиатуры
|
||||||
|
std::cout<<"Придумай пароль: ";//Запрашиваем
|
||||||
|
std::getline(std::cin, newPassword);//Вводим новый пароль читая всю строку
|
||||||
|
|
||||||
|
if(userExists(newUsername)){//Если пользователь уже существует
|
||||||
|
std::cout<<"Такой пользователь уже существует"<<std::endl;//Выводим сообщение
|
||||||
|
}else{//Иначе
|
||||||
|
usernames.push_back(newUsername);//Добавляем логин
|
||||||
|
passwords.push_back(newPassword);//Добавляем логин
|
||||||
|
|
||||||
|
std::ofstream outFile("users.txt", std::ios::app);//Открываем файл для записи
|
||||||
|
if(outFile){
|
||||||
|
outFile<<newUsername<<" "<<newPassword<<std::endl;//Сохраняем данные
|
||||||
|
std::cout<<"регистрация успешна"<<std::endl;//Вывод сообщения
|
||||||
|
}else{//Иначе
|
||||||
|
std::cout<<"Ошибка записи в файл"<<std::endl;//Выводим ошибку
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}else if(choice == 3){//Если выбор 3
|
||||||
|
std::string username;//Переменная для хранения имени пользователя
|
||||||
|
std::cout<<"Введите имя пользователя для брутфорса: ";//Выводим запрос на ввод
|
||||||
|
std::getline(std::cin,username);//Ввод имени пользователя(с учетом пробелов)
|
||||||
|
bruteForce(username);//Запуск буртфорса
|
||||||
|
}else if(choice ==4){//Если выбор 4
|
||||||
|
std::cout<<"Выход..."<<std::endl;//Выводим надпись
|
||||||
|
break;//Завершение программы
|
||||||
|
}else{//Если введен некорректный пункт меню
|
||||||
|
std::cout<<"Некорректный выбор, попробуй еще раз"<<std::endl;//Ошибка
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0; //Завершение
|
||||||
|
|
||||||
|
}
|
||||||
78
KeyGen.cpp
Executable file
78
KeyGen.cpp
Executable file
@ -0,0 +1,78 @@
|
|||||||
|
#include <iostream>//ввод/вывод
|
||||||
|
#include <vector>//хранение символов
|
||||||
|
#include <string>//работа со строками
|
||||||
|
#include <cstdlib>//работа с rand()
|
||||||
|
#include <ctime>//работа со временем
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
std::vector<std::string> allowedChars;
|
||||||
|
|
||||||
|
char useLetters, useDigits, useSpecials;//переменные символьного типа
|
||||||
|
int caseChoice = 0;//переменные целочисленного типа
|
||||||
|
int passwdLength = 0;//переменная для длинны пароля
|
||||||
|
|
||||||
|
std::cout << "=== Генератор паролей ===" << std::endl;//Типо заголовок
|
||||||
|
|
||||||
|
std::cout << "Использовать буквы? (y/n): ";//Запрашиваем использование букв
|
||||||
|
std::cin >> useLetters;//Ввод с клавиатуры
|
||||||
|
|
||||||
|
if (useLetters == 'y' || useLetters == 'Y') {
|
||||||
|
std::cout << "Выбери регистр:" << std::endl;
|
||||||
|
std::cout << "1 - Заглавные" << std::endl;
|
||||||
|
std::cout << "2 - Строчные" << std::endl;
|
||||||
|
std::cout << "3 - Оба" << std::endl;
|
||||||
|
std::cout << "Твой выбор: ";
|
||||||
|
std::cin >> caseChoice;//Выбор регистра
|
||||||
|
|
||||||
|
if (caseChoice == 1 || caseChoice == 3) {//если выбор заглавный регистр то (1) если оба то (3)
|
||||||
|
std::vector<std::string> engUpper = {"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};
|
||||||
|
allowedChars.insert(allowedChars.end(), engUpper.begin(), engUpper.end());//копируем буквы из engUpper
|
||||||
|
}
|
||||||
|
if (caseChoice == 2 || caseChoice == 3) {//Если выбрал строчный реггистр то (2)
|
||||||
|
std::vector<std::string> engLower = {"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"};
|
||||||
|
allowedChars.insert(allowedChars.end(), engLower.begin(), engLower.end());//снова копируем
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
std::cout << "Использовать спецсимволы? (y/n): ";//Запрашшиваем использование символов
|
||||||
|
std::cin >> useSpecials;//Ввод с клавиатуры
|
||||||
|
|
||||||
|
if (useSpecials == 'y' || useSpecials == 'Y') {//Если используем вводим 'y'
|
||||||
|
std::vector<std::string> specials = {"!", "@", "#", "$", "%", "^", "&", "*", "(", ")", "-", "_", "=", "+", "[", "]", "{", "}", ";", ":", ",", ".", "<", ">", "/", "?"};
|
||||||
|
allowedChars.insert(allowedChars.end(), specials.begin(), specials.end());//копируем и добавляем символы из specials в allowedChars
|
||||||
|
}
|
||||||
|
std::cout << "Использовать цифры? (y/n): ";//Запрашиваем использование цифр?
|
||||||
|
std::cin >> useDigits;//Ввод с клавиатуры
|
||||||
|
|
||||||
|
if (useDigits == 'y' || useDigits == 'Y') { //{Если используем вводим 'y'
|
||||||
|
std::vector<std::string> digits = {"0","1","2","3","4","5","6","7","8","9"};
|
||||||
|
allowedChars.insert(allowedChars.end(), digits.begin(), digits.end());//копируем и добавляем цифры из digits.begin в allowedChars
|
||||||
|
}
|
||||||
|
|
||||||
|
std::cout << "Введи желаемую длину пароля: ";//Запрашиваем длинну пароля
|
||||||
|
std::cin >> passwdLength;//Вводим
|
||||||
|
if (allowedChars.empty()) {//Если выбранных символов нет то:
|
||||||
|
std::cout << "Ошибка: не выбран ни один тип символов. Генерация невозможна." << std::endl;//ошибка
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (passwdLength <= 0 || passwdLength>15) {//если длинна пароля меньше ноля и больше 10 то:
|
||||||
|
std::cout << "Ошибка: длина пароля должна быть положительным числом но не больше 15 символов." << std::endl;//ошибка
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::srand(static_cast<unsigned int>(std::time(nullptr)));//Задаем генератору стартовое значение
|
||||||
|
std::cout << "\nСгенерированные пароли:" << std::endl;//Надпись "Сгенерированные пароли: "
|
||||||
|
|
||||||
|
for (int p = 0; p < 3; ++p) {//Генерация продолжается пока паролей не будет 3
|
||||||
|
std::string password = "";//Пустая строка для паролей
|
||||||
|
for (int i = 0; i < passwdLength; ++i) {//создается длинна пароля
|
||||||
|
int index = std::rand() % allowedChars.size();//генерируем целое число неограниченое по размерам. от нуля до размера(allowedChars -1)
|
||||||
|
password += allowedChars[index];//формируется пароль по одному символу из allowedChars
|
||||||
|
}
|
||||||
|
std::cout << password << std::endl;//вывод пароля
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
66
color_detection.cpp
Executable file
66
color_detection.cpp
Executable file
@ -0,0 +1,66 @@
|
|||||||
|
#include <opencv2/opencv.hpp>
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
cv::VideoCapture cap(0);
|
||||||
|
|
||||||
|
if (!cap.isOpened()) {
|
||||||
|
std::cout << "Не удалось открыть камеру\n";
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
cv::Mat frame, hsv, mask1, mask2, mask;
|
||||||
|
|
||||||
|
while (true) {
|
||||||
|
cap >> frame;
|
||||||
|
if (frame.empty()) break;
|
||||||
|
|
||||||
|
cv::cvtColor(frame, hsv, cv::COLOR_BGR2HSV);
|
||||||
|
|
||||||
|
|
||||||
|
cv::Scalar lower_red1(0, 120, 70);
|
||||||
|
cv::Scalar upper_red1(10, 255, 255);
|
||||||
|
|
||||||
|
cv::Scalar lower_red2(170, 120, 70);
|
||||||
|
cv::Scalar upper_red2(180, 255, 255);
|
||||||
|
|
||||||
|
cv::inRange(hsv, lower_red1, upper_red1, mask1);
|
||||||
|
cv::inRange(hsv, lower_red2, upper_red2, mask2);
|
||||||
|
|
||||||
|
cv::bitwise_or(mask1, mask2, mask);
|
||||||
|
|
||||||
|
|
||||||
|
cv::GaussianBlur(mask, mask, cv::Size(7,7), 0);
|
||||||
|
|
||||||
|
|
||||||
|
std::vector<std::vector<cv::Point>> contours;
|
||||||
|
cv::findContours(mask, contours, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_SIMPLE);
|
||||||
|
|
||||||
|
for (const auto &c : contours) {
|
||||||
|
if (cv::contourArea(c) > 1000) {
|
||||||
|
|
||||||
|
cv::Rect r = cv::boundingRect(c);
|
||||||
|
cv::rectangle(frame, r, cv::Scalar(0, 255, 0), 2);
|
||||||
|
|
||||||
|
|
||||||
|
cv::Moments m = cv::moments(c);
|
||||||
|
if (m.m00 > 0) {
|
||||||
|
int cx = m.m10 / m.m00;
|
||||||
|
int cy = m.m01 / m.m00;
|
||||||
|
|
||||||
|
cv::circle(frame, cv::Point(cx, cy), 8, cv::Scalar(0, 0, 255), -1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
cv::imshow("Red Tracking", frame);
|
||||||
|
cv::imshow("Mask", mask);
|
||||||
|
|
||||||
|
if (cv::waitKey(1) == 27) break;
|
||||||
|
}
|
||||||
|
|
||||||
|
cap.release();
|
||||||
|
cv::destroyAllWindows();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
53
face_detection.cpp
Normal file
53
face_detection.cpp
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
#include <opencv2/opencv.hpp>
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
cv::VideoCapture cap(0);
|
||||||
|
|
||||||
|
if (!cap.isOpened()) {
|
||||||
|
std::cout << "Не удалось открыть камеру\n";
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
cv::CascadeClassifier face_cascade;
|
||||||
|
|
||||||
|
std::string path = "/usr/share/opencv4/haarcascades/haarcascade_frontalface_default.xml";
|
||||||
|
|
||||||
|
if (!face_cascade.load(path)) {
|
||||||
|
std::cout << "Ошибка загрузки каскада\n";
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
cv::Mat frame, gray;
|
||||||
|
|
||||||
|
while (true) {
|
||||||
|
cap >> frame;
|
||||||
|
if (frame.empty()) break;
|
||||||
|
|
||||||
|
cv::cvtColor(frame, gray, cv::COLOR_BGR2GRAY);
|
||||||
|
|
||||||
|
std::vector<cv::Rect> faces;
|
||||||
|
|
||||||
|
face_cascade.detectMultiScale(
|
||||||
|
gray,
|
||||||
|
faces,
|
||||||
|
1.1,
|
||||||
|
5,
|
||||||
|
0,
|
||||||
|
cv::Size(30, 30)
|
||||||
|
);
|
||||||
|
|
||||||
|
for (const auto &f : faces) {
|
||||||
|
cv::rectangle(frame, f, cv::Scalar(0, 255, 0), 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
cv::imshow("Face Detection", frame);
|
||||||
|
|
||||||
|
if (cv::waitKey(1) == 27) break;
|
||||||
|
}
|
||||||
|
|
||||||
|
cap.release();
|
||||||
|
cv::destroyAllWindows();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
49
hand&arm_detection.cpp
Executable file
49
hand&arm_detection.cpp
Executable file
@ -0,0 +1,49 @@
|
|||||||
|
#include <opencv2/opencv.hpp>
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
cv::VideoCapture cap(0);
|
||||||
|
|
||||||
|
if (!cap.isOpened()) {
|
||||||
|
std::cout << "Не удалось открыть камеру\n";
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
cv::Mat frame, hsv, mask;
|
||||||
|
|
||||||
|
while (true) {
|
||||||
|
cap >> frame;
|
||||||
|
if (frame.empty()) break;
|
||||||
|
|
||||||
|
|
||||||
|
cv::cvtColor(frame, hsv, cv::COLOR_BGR2HSV);
|
||||||
|
|
||||||
|
|
||||||
|
cv::Scalar lower(0, 30, 60);
|
||||||
|
cv::Scalar upper(20, 150, 255);
|
||||||
|
|
||||||
|
cv::inRange(hsv, lower, upper, mask);
|
||||||
|
|
||||||
|
cv::GaussianBlur(mask, mask, cv::Size(7,7), 0);
|
||||||
|
|
||||||
|
std::vector<std::vector<cv::Point>> contours;
|
||||||
|
cv::findContours(mask, contours, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_SIMPLE);
|
||||||
|
|
||||||
|
for (const auto &c : contours) {
|
||||||
|
if (cv::contourArea(c) > 8000) {
|
||||||
|
cv::Rect r = cv::boundingRect(c);
|
||||||
|
cv::rectangle(frame, r, cv::Scalar(255, 0, 0), 2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
cv::imshow("Hand Tracking", frame);
|
||||||
|
cv::imshow("Mask", mask);
|
||||||
|
|
||||||
|
if (cv::waitKey(1) == 27) break;
|
||||||
|
}
|
||||||
|
|
||||||
|
cap.release();
|
||||||
|
cv::destroyAllWindows();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user