Brute force w C++

Witam, postanowiłem napisać prosty programik, który emulując klawiaturę, będzie próbował łamać dowolne hasło metodą siłową. Oto sama algorytmiczna esencja tego programu (później będę się jeszcze bawił w jego przyspieszanie i rozszerzanie, żeby potrafił odgadywać hasła dłuższe niż 3 literowe):

#include

#include

#include

using namespace std;

inline byte dopasuj(int i){

if (i==1) return 0x41;

if (i==2) return 0x42;

if (i==3) return 0x43;

if (i==4) return 0x44;

if (i==5) return 0x45;

if (i==6) return 0x46;

if (i==7) return 0x47;

if (i==8) return 0x48;

if (i==9) return 0x49;

if (i==10) return 0x4A;

if (i==11) return 0x4B;

if (i==12) return 0x4C;

if (i==13) return 0x4D;

if (i==14) return 0x4E;

if (i==15) return 0x4F;

if (i==16) return 0x50;

if (i==17) return 0x51;

if (i==18) return 0x52;

if (i==19) return 0x53;

if (i==20) return 0x54;

if (i==21) return 0x55;

if (i==22) return 0x56;

if (i==23) return 0x57;

if (i==24) return 0x58;

if (i==25) return 0x59;

if (i==26) return 0x5A;

}

void czekaj(){

time_t start_time, cur_time;

time(&start_time);

do

{

time(&cur_time);

}

while((cur_time - start_time) < 5);}

int main(int argc, char *argv[])

{cout<<“witamy w PasswordFinder by JSoft”<

cin.ignore();

czekaj();

int i,j,k;

for (i=0; i<27;i++){

for (j=0; j<27; j++){

for(k=1; k<27; k++){

if (i==0 and j==0){

keybd_event(dopasuj(k),0,0,0);

keybd_event(VK_RETURN,0,0,0);}

else if(i==0 and j!=0){

keybd_event(dopasuj(j),0,0,0);

keybd_event(dopasuj(k),0,0,0);

keybd_event(VK_RETURN,0,0,0);}

else{

keybd_event(dopasuj(i),0,0,0);

keybd_event(dopasuj(j),0,0,0);

keybd_event(dopasuj(k),0,0,0);

keybd_event(VK_RETURN,0,0,0);}

}}}

system(“PAUSE”);

return EXIT_SUCCESS;

}

problem jednak polega na tym, że program nie zdaje sobie sprawy z tego, że podał już właściwe hasło… w pewnym momencie właściwe hasło zostanie podane, zaszyfrowany plik się otworzy, ale algorytm będzie działać dalej, nie zdając sobie sprawy z tego, że już osiągnął swój cel… pytanie to “co można dodać do tego algorytmu, żeby program mógł w odpowiednim momencie zastopować i podać jakie było to właściwe hasło?”

Musisz sprawdzać, czy dana aplikacja(ta w której łamiemy hasło) nie zmieniła swojego stanu(tu np.: nie zmieniła wyglądu okna). Innego sposobu nie jestem w stanie wymyślić(oczywiście dla aplikacjo okienkowych).