É bem simples, mais do que qualquer um pode imaginar… existe um comando chamado xinput, ele testa e configura dispositivos de entrada conectados ao Xorg, pois bem, para listar os devices conectados:
[liquuid@catalina ~]$ xinput list ⎡ Virtual core pointer id=2 [master pointer (3)] ⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)] ⎜ ↳ Microsoft Microsoft Basic Optical Mouse v2.0 id=10 [slave pointer (2)] ⎣ Virtual core keyboard id=3 [master keyboard (2)] ↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)] ↳ Power Button id=6 [slave keyboard (3)] ↳ Power Button id=7 [slave keyboard (3)] ↳ USB Keyboard id=8 [slave keyboard (3)] ↳ USB Keyboard id=9 [slave keyboard (3)] ↳ cx88 IR (Prolink Pixelview MPEG id=11 [slave keyboard (3)]
Isso mostra o ID do meu teclado, no caso o número 8, então o comando abaixo é suficiente para capturar tudo que eu digitar:
[liquuid@catalina ~]$ xinput test 8 key release 36 key press 54 ckey release 54 key press 52 zkey press 53 xkey release 52 key release 53 key press 56 bkey release 56 key press 25 wkey release 25
Basta então deixar isso rodando em background e processar as teclas digitadas com mais calma depois.
Um exemplo de código para o keylogger pode ser encontrado aqui.
Para nossa felicidade da pra gravar o mouse também, basta usar :
[liquuid@catalina ~]$ xinput test 10 motion a[0]=1046 a[1]=270 motion a[0]=1055 a[1]=269 motion a[0]=1063 a[1]=266 motion a[0]=1068 a[1]=264 motion a[0]=1070 a[1]=264 motion a[0]=1071 a[1]=263 motion a[0]=1072 a[1]=262 motion a[0]=1073 a[1]=261 motion a[0]=1074 a[1]=260 motion a[0]=1075 a[1]=259 motion a[0]=1075 a[1]=258 motion a[0]=1076 a[1]=257 motion a[0]=1077 a[1]=256 motion a[0]=1076 a[1]=256 motion a[0]=1075 a[1]=255 motion a[0]=1074 a[1]=255 motion a[0]=1073 a[1]=255 motion a[0]=1072 a[1]=255 motion a[0]=1071 a[1]=255 motion a[0]=1070 a[1]=255 motion a[0]=1069 a[1]=254 motion a[0]=1068 a[1]=253 button press 1 motion a[0]=1069 a[1]=252 motion a[0]=1071 a[1]=252 motion a[0]=1072 a[1]=252 motion a[0]=1073 a[1]=252 motion a[0]=1074 a[1]=253 motion a[0]=1076 a[1]=254 motion a[0]=1077 a[1]=254 motion a[0]=1078 a[1]=254 motion a[0]=1079 a[1]=254 motion a[0]=1080 a[1]=255 motion a[0]=1081 a[1]=256 motion a[0]=1083 a[1]=257 motion a[0]=1085 a[1]=258 motion a[0]=1086 a[1]=259 motion a[0]=1088 a[1]=260 motion a[0]=1089 a[1]=260 motion a[0]=1091 a[1]=262 motion a[0]=1092 a[1]=263 motion a[0]=1093 a[1]=264 motion a[0]=1094 a[1]=265 motion a[0]=1095 a[1]=265 motion a[0]=1096 a[1]=266 motion a[0]=1097 a[1]=267 motion a[0]=1098 a[1]=268 motion a[0]=1099 a[1]=269 motion a[0]=1100 a[1]=270 motion a[0]=1101 a[1]=271 motion a[0]=1102 a[1]=272 motion a[0]=1103 a[1]=272 motion a[0]=1105 a[1]=273 motion a[0]=1106 a[1]=274
Alguns encaram o xinput como uma mega falha de segurança e você caro leitor ?
Isso é perigoso mesmo. E se eu alterar a permissão dele para ser executado apenas como root, fica seguro?
Na real, imagino que vários programas parem de funcionar caso a permissão dele seja alterada. É um problema de arquitetura do Xorg, ele foi feito para permitir esse tipo de coisa. Ao meu ver, a melhor forma de tratar esse tipo de problema é o isolamento de processos + ou – como já acontece no iphone e no PS3 onde a comunicação entre processos só acontece atravez de um supervisor.
Gostaria de saber como faço para usar o keylogger em python que foi passado no link, fiz um fork[1] que corrige um erro por falta da codificação na segunda linha do script, no mais a dúvida é como gerar um arquivo de saída com os dados.
O seu artigo gerou além deste fork uma página no meu wiki[2] de comandos linux[3]
1 – https://gist.github.com/955569
2 – http://linuxdicas.wikispaces.com/xinput
3 – http://linuxdicas.wikispaces.com/comandos-linux
Tem uma variavel output no fim do código que pode ser salva com um simples:
open(‘saida.txt’,’w’).write(output) por exemplo