2011-06-24 17 views
6

Necesito capturar todo lo que escribo en mi teclado y luego almacenarlo de muchas maneras. Preferiría que estuviera escrito en C# para .Net, pero cualquier cosa realmente lo hará. Mis razones para escribir este "keylogger" son simples:Captura cualquier tipo de pulsaciones de teclas (también conocido como keylogger), preferiblemente C# .net pero cualquier tipo hará

Recientemente me convertí en propietario de un guante Peregrine. Es una cosa muy buena que le permite emitir comandos haciendo gestos con los dedos, y al mismo tiempo, es un guante muy fino para que pueda escribir con esa mano con poca incomodidad.

Además, he encontrado un buen programa llamado AutoHotkey que puede aumentar drásticamente tu productividad haciendo macros para cualquier acción. Puede vincular cualquier tecla a cualquier otra tecla o serie de teclas o comandos.

El problema es que no se puede decir simplemente que "esto es lo que estoy haciendo más" y "esto es lo que rara vez uso". Realmente, ¿puedes decir qué tecla usas más, página hacia abajo o hacia abajo? ¿Utiliza alt + tab con más frecuencia ese interruptor de escape o diseño (ctrl-shift o alt-shift)? No puedo decir eso. No puedo decir qué acciones debo automatizar o cambiar a la interfaz más sencilla, sin datos estadísticos.

Así que quiero escribir un programa para ejecutar en segundo plano y registrar todo lo que escribo. Este programa almacenará el histograma de mis acciones de primer, segundo y tercer orden (como, almacenará cuántas veces presioné una tecla, como ingresar, cuántas veces presioné una sucesión de dos teclas, como alt y luego tab, y cuántas veces presioné una sucesión de tres teclas, como ctrl, alt y luego borré o ctrl, cambio y luego escapé)

Luego, después de pasar algún tiempo trabajando/jugando/lo que sea, tendré información sobre qué tipo de acciones si trato de vincularme a esa interfaz (el guante) o automatizar con el programa AutoHotkey, para mejorar la velocidad de interacción con una PC.

En otras palabras, la ciencia experimento simple, sólo para la diversión y el progreso :)

+7

yo creo que hay una razón legítima para escribir esto, sin embargo, me permito sugerir la eliminación de su 3er párrafo porque eso hace que te gusta uno de esos " M $ odiando script kiddies ". Todo lo demás en su publicación es muy profesional y está bien redactado, solo creo que el 3er párrafo no pertenece a un sitio como SO. –

+1

También al punto '" Si los hackers pueden dañar las computadoras, eso es porque las computadoras están mal diseñadas ". Eso no es cierto, la programación es como la fuerza, tiene un lado claro y un lado oscuro. Sin ganchos en otros programas, no podría programar cosas como depuradores o usar muchas formas de IPC. No es el sistema operativo y los programas que están mal escritos, es la gente que escribe los exploits y el malware que están abusando de las funciones API perfectamente legítimas para usos nefastos. –

+0

Microsoft y Apple hacen un mal software, pero ¿quieres hacerlo en C#? –

Respuesta

5

Se necesita un controlador de teclado global.

Si esto es ventanas que tendrá que utilizar la API de Windows y utilizar lo siguiente:

SetWndowsHookEx

UnhookWindowsHookEx

CallNextHookEx

Usted debe configurar un "gancho" global para escuchar eventos de teclado y mouse.

Tengo una clase C# que hace esto y plantea argumentos de eventos de teclado y mouse .Net, pero no voy a publicar el código en línea, ya que este tipo de actividad se puede usar por medios nefastos.

¿Por qué hicimos esto? Incorporamos powerpoint en nuestra aplicación, pero no queríamos que el usuario editara las diapositivas de powerpoint mientras las visualiza, así que desde nuestra aplicación C# configuramos un gancho para monitorear e interceptar eventos de mouse y teclado si estaban en el control de powerpoint. Funcionó muy bien, pero teníamos que asegurarnos de que:

Tenían el control en nuestra aplicación, nuestra aplicación estaba activa, etc. Una vez que configuraste el gancho, escucha/captura todo incluyendo otras aplicaciones, ya que estábamos cancelando acciones con el teclado solo lo queríamos cuando lo necesitábamos.

Aquí hay un enlace de API.

http://msdn.microsoft.com/en-us/library/ff468842(v=VS.85).aspx

2
pregunta Antiguo

pero ...

En Windows, puede utilizar las API del user32.dll.

Para un keylogger muy simple puede usar el método GetAsyncKeyState() comprobando si se presiona cada carácter de la tabla ASCII.

Todo el código para un keylogger muy simple y estúpida escrita en una aplicación de consola sería:

[DllImport("user32.dll")] 
public static extern int GetAsyncKeyState(Int32 i); 

static void Main(string[] args) 
{ 
    while (true) 
    { 
     Thread.Sleep(100); 

     for (int i = 0; i < 255; i++) 
     { 
      int keyState = GetAsyncKeyState(i); 
      if (keyState == 1 || keyState == -32767) 
      { 
       Console.WriteLine((Keys)i); 
       break; 
      } 
     } 
    } 

KeystrokeAPI

Para aquellos que buscan algo más robusto y más limpio que he creó una API que lo hace fácil. Sólo tiene que hacer esto:

api.CreateKeyboardHook((character) => { Console.Write(character); }); 

Más detalles aquí: https://github.com/fabriciorissetto/KeystrokeAPI

+0

Oye, ¿alguna idea de por qué la aplicación de registro de teclas a veces obtendrá caracteres en un orden diferente al de la aplicación que está escribiendo (por ejemplo, el bloc de notas)? Para replicar: ejecute el registrador, abra el Bloc de notas, las teclas de mezcla. Con suficientes representantes verá – smartcaveman

+0

Nunca me di cuenta. ¿Puedes abrir un problema en la página de github que describe cómo reproducir el error? – fabriciorissetto

+0

En realidad, hay un problema mayor con esta biblioteca: publicaré ambos en GitHub más adelante esta semana – smartcaveman

Cuestiones relacionadas