Witam. Ostatnio napisałem program do generowania słowników w linuxie. Problem tylko w tym, że już pierwsza część 8-znakowa według obliczeń zajmie około 1500 TB. Czytałem na internecie kiedyś że to powinno ważyć 32 gb. A potem to wszystko posprawdzać.. Jest to możliwe? Jak mogę zmodyfikować ten program? Czy to jest głupie ?
Kod:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdlib.h>
#include <pthread.h>
#include <signal.h>
unsigned long long int sec,w,g;
void* t(void* u)
{ while (1){
sleep(1); sec++;
if ((sec % 10) == 0) printf("%d w/s : ",w);
w = 0;
}}
FILE *fp; char nm[21],a[32],k;
char fo(char l)
{
sprintf(nm,"wpa-dict-%d-1.lst",l);
fp = fopen(nm,"w"); k = 1;
if (fp == 0){ perror("failed to open"); return 1; }
printf("Generating %d-letter words..\n",l);
return 0;
}
char fw(char l)
{
if (g >= 1073741824 && g < (1073741825+l)){
g = 0; fclose(fp); k++; sprintf(nm,"wpa-dict-%d-%d.lst",l,k);
printf("\n--------------------\n%s\n--------------------\n",nm);
fp = fopen(nm,"w");
if (fp == 0){ perror("failed to open"); return 1; }
}
fwrite(a,1,strlen(a),fp); fputc(10,fp);
if (w == 0 && sec != 0 && (sec % 10) == 0) printf("[%s]\n",a);
w++; g+=l+1;
return 0;
}
void cpl(char l,char wh)
{
fclose(fp);
printf("\n\n%d-letter words complete",l);
if (wh == 0) printf("\n------------------------------------");
}
void quitproc()
{
fclose(fp);
printf("\nStopped.\n");
exit(0);
}
int main(int argc, char *argv[])
{
printf("\n Ponulaczek WPA/WPA2 Dict-Gen\n\n");
unsigned char wh = 0;
if (argc > 1){
wh = atoi(argv[1]);
if (!(wh >= 8 && wh <= 32)){
printf(" %d isn't a 8-32 number.\n",wh);
printf(" You can write nothing number too, to generate the full dictionary.\n");
return 0;
}
}
pthread_t id1; pthread_create(&id1,0,&t,0);
memset(a,0,sizeof(a)); signal(SIGINT,quitproc);
if (wh == 0 || wh == 8){
if (fo(8) == 1) return 1;
for (a[0] = 32; a[0] <= 126; a[0]++){
for (a[1] = 32; a[1] <= 126; a[1]++){
for (a[2] = 32; a[2] <= 126; a[2]++){
for (a[3] = 32; a[3] <= 126; a[3]++){
for (a[4] = 32; a[4] <= 126; a[4]++){
for (a[5] = 32; a[5] <= 126; a[5]++){
for (a[6] = 32; a[6] <= 126; a[6]++){
for (a[7] = 32; a[7] <= 126; a[7]++){
if (fw(8) == 1) return 1;
}}}}}}}}
cpl(8,wh);
}
if (wh == 0 || wh == 9){
if (fo(9) == 1) return 1;
for (a[0] = 32; a[0] <= 126; a[0]++){
for (a[1] = 32; a[1] <= 126; a[1]++){
for (a[2] = 32; a[2] <= 126; a[2]++){
for (a[3] = 32; a[3] <= 126; a[3]++){
for (a[4] = 32; a[4] <= 126; a[4]++){
for (a[5] = 32; a[5] <= 126; a[5]++){
for (a[6] = 32; a[6] <= 126; a[6]++){
for (a[7] = 32; a[7] <= 126; a[7]++){
for (a[8] = 32; a[8] <= 126; a[8]++){
if (fw(9) == 1) return 1;
}}}}}}}}}
cpl(9,wh);
}
i tak dalej..
Kod:
if (wh == 0 || wh == 32){
if (fo(32) == 1) return 1;
for (a[0] = 32; a[0] <= 126; a[0]++){
for (a[1] = 32; a[1] <= 126; a[1]++){
for (a[2] = 32; a[2] <= 126; a[2]++){
for (a[3] = 32; a[3] <= 126; a[3]++){
for (a[4] = 32; a[4] <= 126; a[4]++){
for (a[5] = 32; a[5] <= 126; a[5]++){
for (a[6] = 32; a[6] <= 126; a[6]++){
for (a[7] = 32; a[7] <= 126; a[7]++){
for (a[8] = 32; a[8] <= 126; a[8]++){
for (a[9] = 32; a[9] <= 126; a[9]++){
for (a[10] = 32; a[10] <= 126; a[10]++){
for (a[11] = 32; a[11] <= 126; a[11]++){
for (a[12] = 32; a[12] <= 126; a[12]++){
for (a[13] = 32; a[13] <= 126; a[13]++){
for (a[14] = 32; a[14] <= 126; a[14]++){
for (a[15] = 32; a[15] <= 126; a[15]++){
for (a[16] = 32; a[16] <= 126; a[16]++){
for (a[17] = 32; a[17] <= 126; a[17]++){
for (a[18] = 32; a[18] <= 126; a[18]++){
for (a[19] = 32; a[19] <= 126; a[19]++){
for (a[20] = 32; a[20] <= 126; a[20]++){
for (a[21] = 32; a[21] <= 126; a[21]++){
for (a[22] = 32; a[22] <= 126; a[22]++){
for (a[23] = 32; a[23] <= 126; a[23]++){
for (a[24] = 32; a[24] <= 126; a[24]++){
for (a[25] = 32; a[25] <= 126; a[25]++){
for (a[26] = 32; a[26] <= 126; a[26]++){
for (a[27] = 32; a[27] <= 126; a[27]++){
for (a[28] = 32; a[28] <= 126; a[28]++){
for (a[29] = 32; a[29] <= 126; a[29]++){
for (a[30] = 32; a[30] <= 126; a[30]++){
for (a[31] = 32; a[31] <= 126; a[31]++){
if (fw(32) == 1) return 1;
}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
fclose(fp);
printf("\n\n 32-letter words complete!");
if (wh == 0){
printf("\n\n DoNE! You have now the complete wpa dictionary!");
printf("\n Let's cracking xD\n");
}
}
return 0;
}
ps.
Kod:
if (g >= 1073741824 && g < (1073741825+l)){
Ta linijka sprawdza czy jest już 1gb. Nie dało sie zrobić pliku wiekszego niż 2gb.