Jednoduchý KeyLogger v C# 1: Příprava formuláře

C# .NET Pro pokročilé Jednoduchý KeyLogger v C# 1: Příprava formuláře

Vítejte v mém prvním tutoriálu na www.devbook.cz. V tomto tutoriálu se budeme věnovat jednoduchému KeyLoggeru, který vám jistě otevře nové možnosti v programování. Určitě každého z vás někdy napadlo, že by si mohl vytvořit svůj vlastní KeyLogger, ale po nějakém tom googlování vás myšlenka opustila, protože jste nenarazili na nic, kde by to bylo dobře vysvětlené. Sám jsem nedávno strávil několik desítek hodin nad tvorbou KeyLoggeru. Potýkal jsme se s mnohými a často hloupými chybami, které jsem řešil zde na fóru. Forum. Netvrdím, že to byla cesta snadná, ale došel jsem až na nejí konec. Tedy na konec současných požadavků.

Je čas tedy začít.

Tvorba formuláře

Vytvořme tedy nový projekt typu: "Windows Forms Application" a pojmenujte jej třeba "KeyLogger". Vlastnost formuláře FormBorderStyle nastavíme na FixedToolWindow, to kvůli znemožnění změnit velikost okna. A vlastnost MaximizeBox na false, aby nešlo okno maximalizovat. Nadepišme formulář nějakým srozumitelným názvem např. "KeyLogger 1.0 - Vypnut".

Na formulář umístěte 3x timer, 1x checkBox, 2x button, 1x textBox

  1. Timer1 přejmenujte na tCheckKey - tento timer nám bude obstarávat, zda byla stisknutá klávesa. Zároveň tento timer nastavte na Interval na 1, tímto zajístíme snímání každou milisekundu.
  2. Timer2 přejmenujte na tClearField - tento timer nám bude čistit textBox a pokaždé nám uloží jeho obsah do nějaké proměnné pro pozdější využití. Rovnou také nastavíme tento timer na 1000, to znamená, že vykoná kód každou sekundu.
  3. Timer3 přejmenujte na tCheckHide - tento timer se bude starat o skrývání a odkrývání KeyLoggeru. U tohoto timeru nemusíme nastavovat interval, ponecháme jej 100.
  4. CheckBox1 přejmenujeme na chbCheckRules a upravíme jeho text na něco takovéhoto: "Souhlasím, že nebudu tento KeyLogger používat protizákoně. Autor nenese žádnou zodpovědnost za zneužití programu."
  5. Button1 přejmenujte na "btnStart" a nadepište ho třeba "Start". Toto tlačítko zakažte, tedy nastavte jeho vlastnost Enable na false, chceme totiž aby uživatel nejdříve souhlasil s pravidly používání, než bude možné KeyLogger spustit. Nastavete vlastnost Enabled na false
  6. Button2 přejmenujste na "btnStop" a nadepište ho třeba "Stop". Toto tlačítko rovněž také zakažte. Nastavete vlastnost Enabled na false
  7. TextBox1 přejmenujte na "tbLog" a jeho vlastnost ReadOnly nastavte na true

Kód

Nyní přistoupíme k samotnému psaní kódu.

Začněme nečím jednoduchým a to kontrolou, zda je zaháčkován chbCheckRules Co tedy vyžadujeme? Chceme, že pokud je zaháčkovaný tento checkBox, tak se nám povolí tlačítko tbnStart, pakliže jej odháčkujeme, potřebujeme vypnout keylogger a znemožnist zapnutí do doby, dokud nebude znovu zaháčkován tento checkBox. Celou tuto kontrolu budeme provádět v události tohoto checkBoxu zvané "CheckedChanged". Tato událost nám hlídá, zda nastane změna v zaháčkování a je jedno jaká. Tedy buď zaháčkování, nebo odháčkování. Zkrátka změna stavu.

Pokud je tedy checkBox zaháčkovaný, povolíme tlačítko btnStart, jinak vypneme KeyLogger.

private void chbCheckRules_CheckedChanged(object sender, EventArgs e)
{
    if (chbCheckRules.Checked == true) // pokud je zaháčkovaný souhlas s pravidly,
    {
        btnStart.Enabled = true; // povolím tlačítko pro spuštění KeyLoggeru
    }
    else // pokud není
    {
        // pokud je zaháčkovaný souhlas s pravidly užívání, tak
        if (chbCheckRules.Checked == true)
        {
            btnStart.Enabled = true; // povolím tlačítko na spuštění KeyLoggeru
        }
        else
        {
            btnStart.Enabled = false; // jinak ho zakážu
        }
        btnStop.Enabled = false; // vypnu tlačítko pro vypnutí KeyLoggeru
        tCheckKey.Enabled = false; // vypnu timer pro záznam kláves
        tClearField.Enabled = false; // vypnu timer pro vymazávání okna
        tCheckHide.Enabled = false; // vypnu timer umožňující skrývání
        this.Text = "KeyLogger 1.5 - Vypnut"; // nadepíšu okno
    }
}

Vzhledem k tomu, že velmi podobný kód jako je při odháčkování budeme potřebovat i u tlačítka btnStop, tak si vytvoříme metodu a nazveme ji: "KeyLoggerOFF". Tato metoda nebude mít žádné vstupní parametry. Metodu vytvoříme z části předchozího kódu. Tu část, kterou vložíme do metody z kódu smažeme a nahradíme ji voláním metody. Metoda bude vypadat takto:

// Metoda pro vypnutí KeyLoggeru
private void KeyLoggerOFF()
{
    // pokud je zaháčkovaný souhlas s pravidly užívání, tak
    if (chbCheckRules.Checked == true)
    {
        btnStart.Enabled = true; // povolím tlačítko na spuštění KeyLoggeru
    }
    else
    {
        btnStart.Enabled = false; // jinak ho zakážu
    }
    btnStop.Enabled = false; // vypnu tlačítko pro vypnutí KeyLoggeru
    tKey.Enabled = false; // vypnu timer pro záznam kláves
    tClear.Enabled = false; // vypnu timer pro vymazávání okna
    tHide.Enabled = false; // vypnu timer umožňující skrývání
    this.Text = "KeyLogger 1.5 - Vypnut"; // nadepíšu okno
}

Tedy událost "CheckedChanged" bude nyní vypadat takto:

private void chbCheckRules_CheckedChanged(object sender, EventArgs e)
{
    if (chbCheckRules.Checked == true) // pokud je zaháčkovaný souhlas s pravidly,
    {
        btnStart.Enabled = true; // povolím tlačítko pro spuštění KeyLoggeru
    }
    else // pokud není
    {
        KeyLoggerOFF(); // zavoláme metodu pro vypnutí KeyLoggeru
    }
}

Na tlačítku btnStop do události zvané Click vložíme volání naší již vytvořené metody pro vypnutí KeyLoggeru. Takto bude vypadat tato medota:

private void btnStop_Click(object sender, EventArgs e)
{
    KeyLoggerOFF();
}

Stejně jako jsme začali, tak budeme i pokračovat. Trošku všímavý človek si uvědomuje, že velmi podobný kód, který je v metodě KeyLoggerOFF budeme i u tlačítka btnStart. Jen znegovaný.

private void btnStart_Click(object sender, EventArgs e)
{
    this.Text = "KeyLogger 1.5 - Zapnut"; // nadepíšu toto hlavní okno
    btnStop.Enabled = true; // povolím tlačítko pro vypnutí KeyLoggeru
    btnStart.Enabled = false; // zakážu tlačítko pro spuštění KeyLoggeru
    tCheckKey.Enabled = true; // zapnu timer pro snímání kláves
    tCheckHide.Enabled = true; // zapnut timer umožňující skrývání
    tClearField.Enabled = true; // zapnu timer pro mazání okna
}

Příště již začne skutečné programování. Vytvoříme si třídu pro zachytávání kláves.


 

Stáhnout

Staženo 585x (60.29 kB)
Aplikace je včetně zdrojových kódů v jazyce C#

 

  Aktivity (1)

Článek pro vás napsal Mediel
Avatar
Autor se věnuje programování v C#, ThaiBoxu, ženám a posilování :) „Jestliže si vsugerujete neúspěch, pak vás čeká neúspěch. Někdo říká, že je nesmělý, hloupý. Zopakujte si to desetkrát za sebou a vaše nesmělost a hloupost se tím jen prohloubí.“ MUHAMMAD

Jak se ti líbí článek?
Celkem (2 hlasů) :
55555


 



 

 

Komentáře

Avatar
Michal Žůrek (misaz):

Kicknou to antiviry?

Odpovědět 23.3.2013 21:02
Nesnáším {}, proto se jim vyhýbám.
Avatar
Mediel
Redaktor
Avatar
Odpovídá na Michal Žůrek (misaz)
Mediel:

zkus to a uvidis :) Jinou odpoved ti snad dat nemohu ...

Odpovědět 23.3.2013 22:00
Nechci vám ukazovat, jak dobrý jsem já ... Chci vám ukázat, jak dobrý můžete být vy ... Když uvěříte ... V sami sebe...
Avatar
mkub
Redaktor
Avatar
mkub:

myslim, ze pouzivanie keyloggeru je uz na hrane zakona - porusuje zakladne ludske prava

 
Odpovědět 12.10.2014 2:49
Avatar
pracansky
Člen
Avatar
pracansky:

Čtení klávesy každou ms mi přijde jako dost amatérské řešení se který bude spojená hromada problémů. :o
Existuje něco elegantnějšího? Nějaký callback/event z OS na stisk a puštění klávesy? Klávesnice je snad přímo vzorem pro asynchronní události ve windows :)

 
Odpovědět 30.4.2015 20:10
Avatar
Martin Dráb
Redaktor
Avatar
Odpovídá na pracansky
Martin Dráb:

Existuje něco elegantnějšího? Nějaký callback/event z OS na stisk a puštění klávesy?

SetWindowsHookEx s parametrem WH_KEYBOARD či WH_KEYBOARD_LL (i WH_GETMESSAGE by mohlo dobře posloužit).
https://msdn.microsoft.com/…s.85%29.aspx

myslim, ze pouzivanie keyloggeru je uz na hrane zakona - porusuje zakladne ludske prava

Pokud to nebude instalovat cizím lidem, tak by to snad problém být neměl.

Odpovědět  +1 30.4.2015 21:31
2 + 2 = 5 for extremely large values of 2
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.