| 
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 } |