Cóż, chłopaki, ssicie: P To było trochę specyficzne i niszowe, ale nie będę miał tego przeciwko tobie;)
Tak czy inaczej, dla pełnego zaniedbania.
Kupiłem tę zgrabną małą jednostkę, która opisuje się jako „bez sterownika”, jak w oryginalnym poście. Oznacza to, że działa jak klawiatura USB (i rejestruje się jako taka w / dev / input / event *). Uczyniło mnie to niemal bezużytecznym, ponieważ nie mogłem w żaden sposób wchodzić w interakcje z urządzeniem, gdy ekran blokady był aktywny, musiałem czytać naciśnięcia klawiszy z urządzenia, ponieważ były one „wprowadzane” przez czytnik Cating /dev/input/event3
(mój czytnik) ) dała mi śmieci, a przynajmniej tak mi się zdawało.
Potem natknąłem się na ten fragment kodu tutaj: http://itech-planet.net/content/reading-device-input-directly-fromto-devinputeventx-ubuntu-c bez? autora, którego widzę, ale większość zasług za pracę nóg w tej aplikacji należy do niego. Dzięki! Upraszczając ten kod, byłem w stanie odczytać nieprzetworzone dane wejściowe z własnej klawiatury, przy czym tajne wyrażenie jest „tajne” i przystąpiłem do przechwytywania naciśnięć klawiszy w zmiennej i sprawdzam, kiedy naciśnięty został klawisz „Enter”, aby sprawdzić ciąg znaków względem zapisanej wartości dla kodu.
Ten kod jest w zasadzie uwielbionym keyloggerem wskazującym na inną „klawiaturę” i skanującym to, co „wpisuje” do pasującej frazy. Podobnie jak FBI przesuwa miliony AOL IM od 13-letniej dziewczyny szukającej terrorystów!
Gdy trafi w pasującą frazę, uruchamia instrukcję if i uruchamia resztę odpowiedniego kodu. Skomentowałem to najlepiej jak potrafię, jeśli masz jakiekolwiek problemy, napisz do mnie e-mail / pm / im / krzyk.
Nie tak, jak to czytasz, po prostu chcesz kod! Cóż, oto jest!
Stosowanie:
sudo ./[file] -u [twoja nazwa użytkownika] -d [lokalizacja do urządzenia] -t [identyfikator tagu]
Więc ja, będąc Tylerem, z moim urządzeniem w / dev / input / event3 i moim tagiem 0000996716 miałbym:
sudo ./input -u tyler -d / dev / input / event3 -t 0000996716
KOD:
#include <linux/input.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
int getStatus(){
FILE *fp;
char path[128];
fp = popen("sudo -u tyler gnome-screensaver-command -q", "r");
fgets(path, sizeof(path)-1, fp);
pclose(fp);
printf("%s\n",path);
if(strcmp("The screensaver is inactive\n",path)==0)
return 1;//if screensaver is disabled
else if(strcmp("The screensaver is active\n",path)==0)
return 0;//if screensaver is enabled
else
return -1;//wat
}
int main(int argc, char **argv)
{
//char array that stores the keys in order up to like 40 something, DO NOT MESS WITH THE ORDER OF THIS ARRAY. ITS IMPORTANT.
char arr[]={' ',' ','1','2','3','4','5','6','7','8','9','0','-','=','\b','\t','q','w','e','r','t','y','u','i','o','p','[',']','\n',' ','a','s','d','f','g','h','j','k','l',';',',','`',' ','\\','z','x','c','v','b','n','m',',','.','/',' ','*',' ',' '};
char inp[256];//input string to check what you type.
int fd;//file pointer to the /dev/input device
char usr[32];//stores your username to run screensaver command as you. Root user (sudo) can NOT lock the screen.
char tag[32];//stores the tag ID for the RFID
char dev[32];//stores the device location, /dev/input/eventX
char lcom[96];//locking command builder string
char ucom[96];//unlocking command builder string
//processes arguments, dont ask.
int idx = 0;
for (idx = 1; idx < argc; idx++) {
if (strcmp(argv[idx], "-u") == 0) {
strcpy(usr,argv[idx+1]);
printf("User = %s\n", usr);
} else if (strcmp(argv[idx], "-t") == 0) {
strcpy(tag,argv[idx+1]);
printf("Tag = %s\n", tag);
} else if (strcmp(argv[idx], "-d") == 0) {
strcpy(dev,argv[idx+1]);
printf("Device = %s\n", dev);
fd = open(dev, O_RDONLY);
} else {}
}
//build commands
strcpy(lcom,"sudo -u ");
strcat(lcom,usr);
strcat(lcom," gnome-screensaver-command -l");
strcpy(ucom,"sudo -u ");
strcat(ucom,usr);
strcat(ucom," gnome-screensaver-command -d");
struct input_event ev;
int cursor=0;
while (1)
{
read(fd, &ev, sizeof(struct input_event));
if(ev.type == 1)//only key ID event
if(ev.value == 0)//only not repeat
if(ev.code== 28||ev.code==14){//if code is enter or bsp, reset the counter and compare
inp[cursor]='\0';//terminate string
cursor=0;
if(strcmp(inp,tag)==0){//if input string equals tag, strcmp works funny lol
int status=getStatus();//find out what the screensaver is doing
if(status==1){//screensaver is unlocked, so lock it
printf("Locking...");
system(lcom);}
else if(status==0){//screensaver is locked, so unlock it!
printf("Unlocking...");
system(ucom);}
else printf("Wat happened");//???
}
}
else{//if not enter or bsp, log it
inp[cursor]=arr[ev.code];
cursor++;
}
//fflush(stdout);this was here for debug purposes, since apparently I dont know how STDOUT works lol
}
}