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í.

Špiónske aplikácie v C # - 1. diel

Vitajte u prvého dielu môjho tutoriálu, v ktorom vám ukážem svoje majstrovské dielo. Dobrá, to možno preháňam ... V tomto tutoriále vám proste ukážem, ako naprogramovať takú "špiónske" aplikáciu v C #.

Čo to bude vedieť

V čase písania prvého dielu tejto série môj program už vie sledovať kameru, mikrofón a sledovať stlačené klávesy, avšak našim cieľom bude, aby aplikácia nakoniec vedela:

  • sledovať ľubovoľnú webkameru
  • odpočúvať ľubovoľný mikrofón
  • sledovať stlačené klávesy
  • sledovať používateľskú plochu a virtuálne na nej klikať (čo nám v praxi umožní ovládať vzdialený počítač)
  • vzdialene spúšťať príkazy (cmd)
  • preťahovať súbor sem a tam
  • trošku užívateľa "potrolit" zobrazovaním ľubovoľných správ
  • zobraziť nejaké základné informácie o vzdialenom počítači

Články sem budem postupne dávať - každý týždeň jeden. Najprv si napíšeme na použitie čo najjednoduchšie server a klienta, potom si ho nejako šikovne obalíme, aby sme si vytvorili takú základňu, na ktoré budeme môcť ľahko stavať. Jednotlivé špiónske funkcie si rozdelíme na "moduly", s ktorými budeme potom môcť vďaka základni ľahko a jednotne pracovať a ľahko si vďaka nej budeme môcť doprogramovať nové funkcie. Budeme teda mať modul na sledovanie kamery, modul na odpočúvanie mikrofónu atď.

Jeden z hlavných dôvodov, prečo chcem tento svoj výtvor ukázať svetu, je ten, že som celú aplikáciu urobil bez použitia akýchkoľvek Invoke či používanie DirectShow, iba za použitia čistého C# a managed knižníc. Používanie Invoke naozaj nemám rád a všetky projekty čo obaľovali DirectShow, na ktoré som narazil, boli buď mizerne dokumentované, alebo staré. Našťastie som ale narazil na tento článok na stránkach CodeProject ( http://www.codeproject.com/...am-C-library), ktorý robí presne to, čo potrebujem: jednoducho vracia Bitmapy. Prenos videa si teda urobíme (aj keď zďaleka nie tak hospodárne ako s DirectShow, zato ale ľahko) po svojom. U mikrofónu som narazil aj na skvelú knižnicu Naudia, ktorá opäť jednoducho vracia (a potom zase vie prehrať) pole bajtov au keylogger potom na tento projekt na CodePlex ( https://keyboardmousehooks.codeplex.com/). Za pomoci týchto knižníc teda naprogramujeme našu špiónske aplikáciu. Nuž vrhneme sa na prvú časť, na server a klienta!

Ako to urobíme

Základom našej aplikácie bude spoľahlivý a na použitie jednoduchý server a klient. Než ale začneme písať kód, musíme si trochu premyslieť, ako bude vlastne naša komunikácia vyzerať. Server a klienta som počas vývoja niekoľkokrát upravoval, práve kvôli tomu, že som prerábal štruktúru správ. Súčasná podoba ale myslím celkom vyhovuje. Správa bude mať pochopiteľne hlavičku a telo, hlavička bude obsahovať dĺžku tela a dva bajty nesúci ďalšie informácie.

Každú správu v našej komunikácii teda budeme odosielať a čítať takto:

  • Prečíta sa 8 bajtov ako long, ten nám bude značiť ako dlhá je naša správa
  • Prečíta sa ďalší bajt, ktorý nám hovorí, ktorá časť programu správu poslala (a teda ktoré časti programu má byť odovzdaná), napr. Či ju poslal modul na sledovanie kamery, či keylogger
  • Prečíta sa ďalší bajt, ktorý nám hovorí, čo je vlastne telom správy, napr. Či je to snímka z kamery, či nastavenie.
  • Prečíta sa toľko ďalších bajtov, koľko nám hovorí long, ktorý sme prečítali na začiatku

Ďalej si musíme ustanoviť jednotné kódovanie stringov. Ja použil UTF-8. Server aj klient musí tiež pochopiteľne bežať vo viacerých vláknach, budeme teda mať vlákno odosielajúcej a vlákno načúvacie, ktoré vytvoria (po pripojení) pre každého klienta jeho vlastné vlákno, ktoré ho bude obsluhovať. A pretože pravdepodobne nechceme, aby nám naše supertajnej správy niekto čítal, budeme to celé šifrovať. K tomu použijeme SslStream, čo nám napovedá, že budeme používať asymetrické šifrovanie za pomoci protokolu SSL. Ak neviete, čo že je to asymetrické šifrovanie, hneď to vysvetlím. Nie som síce žiadny expert na kryptografiu, ale spočíva to v tom, že (na rozdiel od symetrického) máme dva kľúče, šifrovacie a dešifrovacie. Šifrovacím kľúčom (ako názov napovedá) dáta zašifrujeme, ale prečítať ich môžeme len dešifrovacím. Šifrovací kľúč môžeme teda bez strachu nechať verejne prístupný a nikto nám naši komunikácii rovnako neprečíta.

Pre znázornenie som použil tento obrázok z Wikipédie:

C # - Pre pokročilých

Nuž všetko sme si rozmysleli, ale musíme si ešte pre sprevádzkovanie šifrovanie vygenerovať SSL certifikáty.

Generovanie certifikátov

Znie to síce možno ktovieako vznešene, ale taký certifikát nie je nič iné, než súbor, ktorý obsahuje kľúče, s ktorými budeme šifrovať. K jeho vytvoreniu použijeme program OpenSSL podľa tohto tutoriálu:

Link pre stiahnutie na stránkach OpenSSL už bohužiaľ nie je, ale tú istú stránku možno nájsť tu:

http://slproweb.com/...OpenSSL.html

Tu si stiahnite 64 alebo 32 bitovú verziu tohto programu, nainštalujte, pridajte cestu k nemu do systémovej premennej PATH (aby sa nám s ním lepšie pracovalo) a podľa zvyšku videá vygenerujte a niekam schovajte svoje certifikáty.

Keď máme náš verejný a privátny certifikát vytvorený, môžeme sa vrhnúť na kód. Založíme si teda vo Visual Studiu nový solution a v ňom nový projekt Class Library a nejako ho pomenujeme. Ja si ho pomenoval SharpNet.

Bol som donútený článok rozdeliť na dva diely, lebo aj sa zdrojáky bol moc veľký, v budúcom dieli už teda nebudeme plánovať, ale vrhneme sa rovno na kód a naprogramujeme si server.


 

Všetky články v sekcii
C # - Pre pokročilých
Článok pre vás napísal jiri.sada
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Autor se věnuje programování v C#, stříhání a úpravou videí a efektů do nich, trollení svých kamarádů drobnými viry a obecně všemu okolo počítačů a elektroniky s Androidem
Aktivity