Обращение к окну другой программы на C

Решил написать простенький брутфорс, чтоб попрактиковаться в C и теперь хочу его испытать на реальной программе. Решил протестировать на запароленном архиве WinRAR, но не знаю, как обратиться к окну ввода пароля. Ниже прилагаю код программы.

#include <stdio.h>
#include <string.h>
#include <locale.h>
#include <malloc.h>
#include <time.h>

char* constructor(char* s, int lvl, int deep, const char* pass);
bool pass_detected = false;
int main() {
    int deep = 1;
    bool is_lett = false;
    bool is_numb = true;
    bool is_special = false;
    setlocale(LC_ALL, "");
    char* s;
    char pass[16] = "Re17Pa";//Образцовая строка
    printf_s("Введите максимальное количество символов в пароле: ");
    scanf_s("%d", &deep);
    clock_t begin = clock();
    s = (char*)malloc(sizeof(char));
    constructor(s, 1, deep, pass);
    if (!pass_detected) {
        printf_s("Пароль не был найден\n");
    }
    clock_t end = clock();
    double time_spent = (double)(end - begin) / CLOCKS_PER_SEC;
    printf_s("Время выполнения для %d символов: %d часов, %d минут, %d cекунд", deep, (int)(time_spent/3600), (int)(time_spent / 3600), (int)time_spent % 60);
}

char* constructor(char* s, int lvl, int deep, const char* pass) {
    if (lvl > deep) {
        return s;
    }
    else {
        s = (char*)realloc(s, (lvl + 1) * sizeof(char));
        s[lvl - 1] = ' ';
        s[lvl] = '\0';
            for (int i = 33; i < 126; i++) {
                s[lvl-1] = (char)i;
                s = constructor(s, lvl + 1, deep, pass);
                //Вот здесь происходит сравнение образцовой строки и полученной
                if (!strcmp(s, pass)) {
                    printf_s("Пароль: %s\n", s);
                    pass_detected = true;
                }
            }
            s = (char*)realloc(s, (lvl) * sizeof(char));
            s[lvl - 1] = '\0';
            return s;
    }
};

Так же хотелось бы услышать предложения по оптимизации программы. Пока я решил создать отдельный массив всех допустимых в пароле символов и перебирать уже их, а не тот набор, что есть сейчас. Ещё бы хотелось понять, как мгновенно прекратить работу функции при получении результата, но не прекращать работу программы.


Ответы (0 шт):