| 64 | 1 /** | 
|  | 2  *  Windows 95 Keygen - 4/23/2022 | 
|  | 3  *  By Paper | 
|  | 4  *  a "rewrite" of my C++ app to vanilla C | 
|  | 5  *  truth be told, most of it was C already | 
|  | 6  * | 
|  | 7  *  skaven is awesome!! | 
|  | 8 **/ | 
|  | 9 #include <stdio.h> | 
|  | 10 #include <stdlib.h> | 
|  | 11 #include <math.h> | 
|  | 12 #include <time.h> | 
|  | 13 #include <string.h> | 
|  | 14 #define CONCAT_INTS(x, y) \ | 
|  | 15 	x * pow(10, log10(y)+1) + y; | 
|  | 16 | 
|  | 17 int get_sum(int n) { | 
|  | 18 	int sum; | 
|  | 19 	for (sum = 0; n > 0; sum += n % 10, n /= 10); // copied this from google. sorry not sorry | 
|  | 20 	return sum; | 
|  | 21 } | 
|  | 22 | 
|  | 23 int win95_nt4_prefix() { | 
|  | 24     int num = rand() % 1000; | 
|  | 25     while ((num == 333) || (num == 444) || (num == 555) || (num == 666) || (num == 777) || (num == 888) || (num == 999) || ((num % 3) != 0)) { | 
|  | 26         num = num + 1; | 
|  | 27     } | 
|  | 28     return num; | 
|  | 29 } | 
|  | 30 | 
|  | 31 int win95_suffix() { | 
|  | 32     int first_digits, last_digit, second_segment = 5; | 
|  | 33     while (second_segment % 7 != 0) { | 
|  | 34         first_digits = rand() % 1000000; | 
|  | 35         last_digit = rand() % 10; | 
|  | 36         while ((last_digit == 0) || (last_digit >= 8)) { | 
|  | 37             last_digit = rand() % 10; | 
|  | 38         } | 
|  | 39 		second_segment = CONCAT_INTS(first_digits, last_digit); | 
|  | 40     } | 
|  | 41     return second_segment; | 
|  | 42 } | 
|  | 43 | 
|  | 44 int office_prefix() { | 
|  | 45     int new_site = rand() % 1000; | 
|  | 46     int ez_pwned = new_site % 10 + 1; | 
|  | 47     while (ez_pwned >= 10) { | 
|  | 48         ez_pwned = ez_pwned - 10; | 
|  | 49     } | 
|  | 50     return CONCAT_INTS(new_site, ez_pwned); | 
|  | 51 } | 
|  | 52 | 
|  | 53 int oem_prefix() { | 
|  | 54     int years[] = { | 
|  | 55         95, | 
|  | 56         96, | 
|  | 57         97, | 
|  | 58         98, | 
|  | 59         99, | 
|  | 60         00, | 
|  | 61         01, | 
|  | 62         02, | 
|  | 63         03 | 
|  | 64     }; | 
|  | 65     return CONCAT_INTS(((rand() % 366) + 1), years[rand() % 9]); | 
|  | 66 } | 
|  | 67 | 
|  | 68 int oem_middle() { | 
|  | 69     int first_digits, last_digit, second_segment, sum = 1; | 
|  | 70     while (sum % 7 != 0) { | 
|  | 71         sum = 0; | 
|  | 72         first_digits = rand() % 10000; | 
|  | 73         last_digit = rand() % 10; | 
|  | 74         while ((last_digit == 0) || (last_digit >= 8)) { | 
|  | 75             last_digit = rand() % 10; | 
|  | 76         } | 
|  | 77         second_segment = CONCAT_INTS(first_digits, last_digit); | 
|  | 78         get_sum(second_segment); | 
|  | 79     } | 
|  | 80     return second_segment; | 
|  | 81 } | 
|  | 82 | 
|  | 83 int main(int argc, char* argv[]) { | 
|  | 84 	srand((unsigned) time(NULL)); // magic rand() stuff :p | 
|  | 85     if (argc >= 2) { | 
|  | 86         if (strcmp(argv[1], "--office") == 0) { | 
|  | 87 			printf("%04d-%07d", office_prefix(), win95_suffix()); | 
|  | 88 			return 0; | 
|  | 89         } else if (strcmp(argv[1], "--oem") == 0) { | 
|  | 90 			printf("%05d-OEM-%07d-%05d", oem_prefix(), oem_middle(), (rand() % 100000)); | 
|  | 91 			return 0; | 
|  | 92         } else if (strcmp(argv[1], "--normal") == 0) { | 
|  | 93             printf("%03d-%07d", win95_nt4_prefix(), win95_suffix()); | 
|  | 94 			return 0; | 
|  | 95         } | 
|  | 96     } | 
|  | 97 	printf("usage: %s [--normal] [--oem] [--office]", argv[0]); | 
|  | 98     return 0; | 
|  | 99 } |