solanav / liu_client

Cliente en C
1 stars 0 forks source link

Create X11 based keylogger plugin #26

Open solanav opened 5 years ago

solanav commented 5 years ago

I believe we should create the X11 keylogger from scratch and as a plugin (see encrypt.c for more info on how to create plugins). That way we can swap the keylogger for more advanced ones at any point. As a plugin we can also stop using the X11 one and change to Wayland if that is the window system being used in the client's computer.

v0sem commented 5 years ago

Imma die with this but ill try

v0sem commented 5 years ago

Un par de preguntas. Que tiene que tener algo para ser un plugin, y qué es lo que tengo que hacer exactamente con el keylogger que ya tenemos

solanav commented 5 years ago

Los plugins por ahora funcionan con un sistema que busca dentro de tu archivo .c una funcion con el nombre y prototipo "int init_plugin()". Devolviendo OK o ERROR. En tu plugin incluye la funcion esa y metelo en el CMakeList.txt copiando y pegando lo del encrypt.c Cuando compiles, dentro de build/plugins deberian aparecer libencrypt.so y tu plugin .so Voy a dejar el main preparado para que puedas hacer un test facilmente.

Con el keylogger actual no tienes que hacer nada, en principio puedes reutilizar el sistema de memoria compartida que usa este keylogger o puedes usar un semaforo en para poder parar la ejecucion del keylogger. El keylogger funciona en un fork o un thread de forma paralela, ya que se ejecuta constantemente.

Por otro lado el keylogger puede ser todo lo avanzado que lo quieras hacer, minimo es pillar todas las teclas que pulsa el usuario. Otros objetivos podrian ser:

  1. Timestamps, para saber cuando se han pulsado las teclas.
  2. Ventana actual, con X11 no deberia ser dificil incluir en que ventana se han pulsado las teclas.
  3. Usuario que ha pulsado las teclas.

Cualquier otra cosa que quieras meter, adelante. El log lo puedes guardar en plain text si quieres o puedes hacer un archivo binario que luego el servidor lea. Las dos soluciones funcionan aunque el binario pesa menos y ayuda a que la red vaya mas rapido. Eso siempre se puede cambiar despues.

Mucha suerte, existen otros keyloggers de X11 para linux por si quieres ver como lo implementan. Un ejemplo https://github.com/dorneanu/ixkeylog

v0sem commented 5 years ago

Para cerrar el keylogger como se va a hacer, desde usuario? con una señal? @solanav

solanav commented 5 years ago

Con una funcion normal desde el proceso core.c probablemente. Yo usaria semaforos, es muy limpito y te ahorras trabajar con la mierda de las señales

v0sem commented 5 years ago

Con el semaforo simplemente compruebo que no me hayan pedido que acabe y ya?

solanav commented 5 years ago

Yeah, comprueba que el semaforo valga 0 siempre por ejemplo. Habria que ver como comunicamos el valor de ese semaforo al proceso principal. Vete haciendo una funcion que se llame stop_plugin por ejemplo y ahi metes todo lo que haga falta para que se pare (ten en cuenta que el keylogger va a estar en un thread o un fork).

v0sem commented 4 years ago

Voy a dejarlo al menos por ahora. Voy a ponerme con otras cosas para ver si se me iluminan las ideas.

Cualquiera es bienvenido a cojer mi rama y mejorar lo que he hecho.