2011-06-24 9 views
6

Potrzebuję przechwycić wszystko, co piszę na klawiaturze, a następnie przechować na wiele sposobów. Wolałbym, aby był napisany w języku C# dla .Net, ale wszystko będzie naprawdę. Moje powody, aby napisać ten "keylogger" są proste:Uchwyć dowolny rodzaj klawiszy (aka keylogger), najlepiej C# .net, ale każdy zrobi

Niedawno stałem się właścicielem rękawicy do gry w węże. To bardzo fajna rzecz, która pozwala wydawać polecenia, wykonując gesty palcami, a jednocześnie bardzo cienką rękawicą, dzięki czemu można pisać z tą ręką z niewielkim dyskomfortem.

Również znalazłem przyjemny program o nazwie AutoHotkey, który może znacznie zwiększyć produktywność, tworząc makra dla każdego działania. Możesz powiązać dowolny klucz z dowolnym innym kluczem lub serią kluczy lub poleceń.

Problem polega na tym, że nie można powiedzieć, że "to jest to, co robię najbardziej" i "tego rzadko używam". Naprawdę, czy możesz powiedzieć, jakiego klucza używasz więcej, strona w dół lub w dół? Czy częściej używasz klawisza Alt + tabulatora lub przełącznika układu (ctrl-shift lub alt-shift)? Nie mogę tego powiedzieć. Nie mogę stwierdzić, które działania należy zautomatyzować lub przejść na łatwiejszy interfejs, bez danych statystycznych.

Dlatego chcę napisać program do działania w tle i rejestrować wszystko, co wpisuję. Ten program będzie następnie zapisywał histogramy pierwszego, drugiego i trzeciego rzędu moich działań (np. Będzie zapisywał ile razy wcisnąłem pojedynczy klawisz, np. Wprowadzanie, ile razy nacisnąłem kolejno dwa klucze, takie jak alt, a następnie zakładka, i ile razy naciskałem kolejno trzy klawisze, takie jak ctrl, alt, a następnie skasowane lub ctrl, przesunięcie, a następnie ucieczka)

Następnie, po pewnym czasie spędzonym na pracy/graniu/cokolwiek, będę miał informacje o tym, co rodzaj działań powinienem spróbować powiązać z tym interfejsem (rękawicą) lub zautomatyzować za pomocą programu AutoHotkey, aby poprawić szybkość interakcji z komputerem.

Innymi słowy, prostego naukowego eksperymentu, po prostu dla zabawy i postępu :)

+7

myślę, że mają uzasadniony powód do pisania to jednak chciałbym zaproponować usunięcie 3rd paragraf bo sprawia, że ​​chcesz jeden z tych " M $ nienawidzące dzieciaków ze skryptów ". Wszystko inne w twoim poście jest bardzo profesjonalne i dobrze sformułowane, po prostu uważam, że trzeci akapit nie należy do witryny takiej jak SO. –

+1

Również do punktu "Jeśli hakerzy mogą źle działać na komputery, to dlatego, że komputery są źle zaprojektowane". To nieprawda, programowanie przypomina siłę, ma jasną stronę i ciemną stronę. Bez haków w innych programach nie można było programować takich rzeczy, jak debuggery lub używać wielu form IPC. Nie jest to system operacyjny i programy, które są słabo napisane, to ludzie piszący exploity i złośliwe oprogramowanie nadużywają całkowicie legalnych funkcji API do niegodziwych zastosowań. –

+0

Microsoft i Apple tworzą złe oprogramowanie, ale chcesz to zrobić w C#? –

Odpowiedz

5

Musisz obsługi globalnego klawiatury.

Jeśli jest to okna trzeba będzie użyć Windows API i użyć następujących:

SetWndowsHookEx

UnhookWindowsHookEx

CallNextHookEx

Musisz skonfigurować globalną "haczyk" aby słuchać zdarzeń klawiatury i myszy.

Mam klasę C#, która to robi i podnosi .Net argumenty zdarzeń klawiatury i myszy, ale nie mam zamiaru opublikować kodu online, ponieważ ten rodzaj aktywności może być używany dla nikczemnych środków.

Dlaczego to zrobiliśmy? Umieściliśmy powerpoint w naszej aplikacji, ale nie chcieliśmy, aby użytkownik edytował slajdy powerpoint podczas ich przeglądania, więc z naszej aplikacji C# ustawiliśmy hak do monitorowania i przechwytywania zdarzeń myszy i klawiatury, jeśli były one w kontrolce Powerpoint. Świetnie się spisali, ale musieliśmy się upewnić:

Mieli kontrolę nad naszą aplikacją, nasza aplikacja była aktywna itd. Po skonfigurowaniu haka, nasłuchuje/przechwytuje wszystko, łącznie z innymi aplikacjami, ponieważ anulowaliśmy konkretne Działania na klawiaturze chcieliśmy, gdy tego potrzebowaliśmy.

Oto link interfejsu API.

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

2

Stare pytanie, ale ...

W systemie Windows można użyć API z user32.dll.

Dla bardzo prostego keyloggera można użyć metody GetAsyncKeyState() sprawdzającej, czy wciśnięty jest każdy znak tabeli ASCII.

Cały kod dla bardzo prosty i głupi keyloggera napisanego w Console Application byłoby:

[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

Dla tych, którzy szukają czegoś bardziej wytrzymałego i czystsze mam stworzył API, które ułatwia. Wystarczy tylko, aby to zrobić:

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

Więcej szczegółów tutaj: https://github.com/fabriciorissetto/KeystrokeAPI

+0

Hej - jakikolwiek pomysł, dlaczego aplikacja klucza rejestrującego czasem otrzyma znaki w innej kolejności niż aplikacja, którą wpisujesz (np. Notatnik)? Aby powielić: uruchom rejestrator, otwórz notatnik, klucze mash. Pod wystarczającą liczbą powtórzeń zobaczysz – smartcaveman

+0

Nigdy tego nie zauważyłem. Czy możesz otworzyć problem na stronie github opisujący sposób odtworzenia błędu? – fabriciorissetto

+0

W tej bibliotece jest większy problem - opublikuję oba na GitHubie w tym tygodniu. – smartcaveman

Powiązane problemy