Обращение к окну другой программы на 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;
}
};
Так же хотелось бы услышать предложения по оптимизации программы. Пока я решил создать отдельный массив всех допустимых в пароле символов и перебирать уже их, а не тот набор, что есть сейчас. Ещё бы хотелось понять, как мгновенно прекратить работу функции при получении результата, но не прекращать работу программы.