Bitka programera: ja protiv tog tipa s VNC-om

U ovom blogu objavljeno je mnoštvo programerskih priča, a ja se volim sjećati svojih starih gluposti. Evo još jedne takve priče.

Prvi put sam se zainteresirao za računala, posebno programiranje, kada sam imao oko 11 godina. U prvom razredu srednje škole bovećinu svog slobodnog vremena sam provodio s C64 i pisao u Basicu, a zatim sam koristiti škare za rezanje lošeg koda. Šalim se, škare su..

Nakon škole (u dobi od oko 16 godina) britanska djeca obično idu u koledž, gdje biraju tri do četiri predmeta za studij prije nego što krenu na sveučilište. S obzirom na svoju ljubav prema bežoj kutiji i kazetofonu kod kuće, odlučio sam da je studij "informatike" na koledžu ispravni odabir.

Kurs mi se svidio više nego što sam očekivao; tamo sam prvi put upoznao Pascal i Delphi.

Tijekom pauza između predavanja, studenti su mogli raditi na bilo kojem slobodnom računalu u kompjutorskoj učionici. Zamislite: ogroman prostor, sa stotinjak mjesta, s redovima stolova prepunih računala — kao što su ona gdje je monitor postavljen na kućište. Kontinuirano zujanje ventilatora, kuglice miševa grguću po stolovima bez prestanka. U zraku je bio čudan miris, kao da se 50-100 tinejdžera, zasićenih hormonima, povremeno izmjenjuju radi hlađenja stotina Pentium III čipova.

Unatoč zdravstvenim rizicima, volio sam sjediti za računalom kada je bila slobodna minuta.

U prostoru je bio administrator, nizak čovjek srednjih godina, kojeg su odabrali za ovu ulogu zbog neugasivog nastojanja da postane zli diktator. Tako mislim. Djelovao je kao da su njegove ovlasti bile slabe, zapravo je volio svoj posao. Njegova zadaća bila je nadzirati red, kako nitko ne bi koristio obrazovne računare za nešto neprimjereno.

Sve do danas moja intuicija mi govori da je okruženje administratora direktno ovisilo o broju studenata koje je uhvatio na djelu i izveo iz učionice. Gotovo sam siguran da je taj dečko prijevremeno otplatio svoju hipoteku.

Sjedi u udaljenom kutu računalne dvorane za kutnim stolom. I moglo se s povjerenjem pretpostaviti da su njegovi plodni monitore pronašli način razmnožavanja s impresivno kratkim trudnoćom — toliko ih je bilo. Ostalo je samo nagađati prati li on stvarno sve njih. Naravno, šalim se... jesam li spomenuo da se vrlo ozbiljno odnosio prema radu?

Tada je računalna mreža radila pod kontrolom Windows 2000. Ubrzo sam otkrio da se pri svakom prijavljivanju pokreće skripta u kojoj je zadano pokretanje VNC servera s administratorskim računom za daljinski pristup radnoj površini. Svaki put kada je taj tip želio nadgledati vas, povezivao se izravno s vašim strojem i promatrao. Bilo je to zastrašujuće, a ako sada razmislimo, vjerojatno i ilegalno.

Nakon što sam se usavršio u BASIC-u i C64, sada sam pisao u C-u, a čak i malo u C++. U to vrijeme sam se također vrlo zainteresirao za jezik D, koji je ispravljao neke nedostatke C++-a, kako mi se tada činilo.

Obično sam navraćao u računalnu dvoranu kako bih pročitao nešto novo o D-u ili se igrao s Digital Mars D kompajlerom. Ponekad, skrenuvši misli od sjajne budućnosti D-a, pisao sam kod u C-u za hakiranje drugih Win32 programa putem njihovih deskriptora prozora.

U stara dobra vremena programiranja na Win32, pronalaženje deskriptora prozora bilo je najjednostavnija metoda za hakiranje drugih programa. Očigledno je da su svi programi s grafičkim sučeljem u Windows imali prozor, čak i ako nije bio prikazan na ekranu. Napisavši program za izvlačenje deskriptora drugog procesa (u osnovi, veze na njega), mogli ste mu slati poruke. To je omogućilo izvođenje nekih osnovnih operacija, kao što je sakrivanje/prikazivanje prozora programa, a također i stvarno cool stvari, poput tjeranja procesa da učita proizvoljnu DLL u svoj prostor memorije i počne izvršavati kod. Nakon umetanja DLL-a počela su najzanimljivija događanja.

U prva mjeseca i pol ovaj detektiv me nije posebno uznemiravao, povezao se s VNC poslužiteljem na mom računalu samo jedan ili dva puta. No, jedna konkretna sesija vjerojatno je probudila njegov interes. Pisao sam neki kod u C-u za skrivanje prozora Minesweepera (ne zatvarajući ih), kako bi mi bilo lakše igrati u učionici, i tada sam primijetio da je bijela ikona VNC-a u sistemskom području postala crna. To je značilo da me sada promatra.

Nastavio sam kodirati kao i obično, nastojeći ne obraćati pažnju na njega. U međuvremenu, računalo je počelo ozbiljno usporavati, pokušavajući prenijeti maksimalnu brzinu okvira na jedan od bezbroj monitora u kutu sobe. Windows gotovo da nije reagirao kad je moje strpljenje iscurilo, odjavio sam se i završio za danas.

Tijekom sljedećih posjeta računalnoj dvorani, Columbo je gotovo svaki put pokazivao živ interes za ono čime se bavim. Otprilike nakon četvrtog puta odlučio sam: s ovim se mora nešto učiniti.

Priznajem da je razuman, racionalan čovjek mogao jednostavno iznijeti ovo pitanje direktno s njim ili njegovim nadredjenim. No, uvijek sam se predao iskušenju i brzo sam uvjerio sebe da izaberem sasvim drugačiju strategiju.

— Nećeš moći učiniti ništa bez ovog VNC poslužitelja! — smireno sam odlučno rekao sebi nekoliko puta.

Bilo je potrebno ubiti VNC.

Počeo sam ulaziti u računalnu dvoranu s velikim grupama studenata i sjediti što dalje od kuta s monitorima. Neko vrijeme to je djelovalo i dalo mi malo vremena za provjeru ideja.

Moj prvi pokušaj, mislim da ćete se složiti, bio je prilično slab. Desnim klikom na ikonu VNC-a u sistemskom području, vidio sam izbornik s čarobnim slovima E-X-I-T. Nažalost, slova su bila napisana sivim obrubnim tekstom. Administrator je onemogućio stavku izbornika "Izlaz" putem uređivača grupne politike. Pokušao sam ubiti proces iz Upravitelja zadataka, ali, naravno, bio je nevidljiv za mene jer je radio pod drugim, privilegiranijim računom. Ništa nije uspjelo.

VNC poslužitelj vrti se na TCP portu 5900, sjetio sam se. Moj sljedeći plan bio je poslati oštećene pakete na taj port kako bih ga srušio.

Nekoliko dana sam proučavao protokol, šaljući razne oblike pravilno strukturiranog smeća na port 5900, nadajući se da će se uspjeti slomiti. Na kraju, ni to nije uspelo.

Već sam počeo sumnjati da ću se ikad riješiti ovog problema kada me odjednom kroz glavu prođe: mora da postoji prozor! Trebam ga prikazati. Možda će imati dobar sočan gumb 'Isključiti' koji ću moći dobro iskoristiti!

Pokrenuo sam svoj praktički savršen C kod za pronalaženje identifikatora glavnog prozora drugog procesa — i stvarno pronašao VNC. Osjećao sam se oduševljeno kada su mi prsti upisali WM_SHOWWINDOW. Pokušajte pogoditi što sam vidio ispred sebe?

Ništa!

Sada me počelo zanimati… imao je prozor, ali je ignorirao moje poruke. Provjerio sam svoj kod dvaput da budem siguran da radi. Testirao sam ga na nekim drugim procesima i radio je fantastično. Pokušao sam poslati razne poruke u VNC prozor, ali opet ništa.

I tu me opet obasjalo!

Zahvaljujući veoma debeloj knjizi Charlesa Petzolda, temeljito sam proučavao kako Win32 procesi rade unutar sustava. Svaka Win32 aplikacija ima prozor, kao i 'red poruka'. Poruke, uzrokovane interakcijom s korisnikom, kao i poruke koje šalje sama Windows, dolaze u red, a sama aplikacija odlučuje kako ih obraditi.

Nije previše zanimljivo samo po sebi. No, kada sam shvatio da dovoljno velik neobrađeni red poruka može poslužiti kao heuristika za intervenciju u visoku potrošnju procesora od strane menadžera Window Process Manager, bio sam preplavljen čistim serotonin.

Ne gubeći ni sekunde, vratio sam se svom C kodu, spreman poslati još jednu poruku glavnom prozoru VNC WM_SHOWWINDOW. U ciklusu. Vječnom. Dakle, mnogo poruka WM_SHOWWINDOW, za koje sam sada znao da će VNC potpuno ignorirati… na vlastitu odgovornost.

Kompilirao sam i pokrenuo 4 KB najslobodoumnog koda u svom životu. Nakon otprilike tri sekunde, Windows je javio da proces vncserver.exe ne reagira, i dao mi prijedlog kojem jednostavno nisam mogao odoljeti:

Želite li završiti ovaj proces?

Prokletstvo, DA!

Dopustite da priznam da sam ostatak dana bio neizmjerno zadovoljan sobom.

Nakon nekoliko sati provedenih u razmišljanju o svojoj novoj supermoći, odlučio sam kako ću je iskoristiti. Samo ubiti sesiju pred njim bilo bi previše lako. Imao sam bolju ideju – potpuno nestati.

Nakon borbenog krštenja s programiranjem soketa Shvatio sam da mogu napisati kod koji će raditi dvije stvari. Prvo, zauzet će nedavno oslobođenu TCP portu 5900, koju je ranije zauzimao neznalica u VNC poslužitelju. Zatim će kreirati novu TCP konekciju s VNC poslužiteljem odabrane mašine. Kod će jednostavno proksirati sve podatke između dva soketa, a Kolumbo će misliti da se povezuje sa mnom, dok će se zapravo povezivati s potpuno drugačijim VNC poslužiteljem.

Moj kod će djelovati kao tajni most između mene i neke druge nesretne duše po mom izboru. To je bilo divno.

Odmah sam počeo pisati svoj lažni VNC most. Kolumbo se nekoliko puta povezivao sa mnom, ali ja sam nastavio programirati pred njegovim očima. Došao sam do zaključka da nema pojma o mojim radnjama, iako sam pisao očite stvari poput brojeva portova i komentara poput // Прощай, жуткий шпион VNC.

Nakon nekoliko dana nisam mogao natjerati kod da ispravno radi. Što je još gore, gotovo sam neprekidno radio s crnom ikonom VNC-a u sistemskoj paleti. Dok je bio povezan, nisam mogao osloboditi port kako bih provjerio svoj kod.

Da sam tada znao o netcat!

Na kraju, živci nisu izdržali, ionako sam bio nestrpljivi 17-godišnjak. Ponovno gledajući kako bijela ikona VNC poslužitelja postaje crna, pobijedio me je bijes, otvorio sam početni kod koji je popunjavao red poruka i pokrenuo ga pred njegovim očima. Čak sam pričekao nekoliko sekundi prije nego što sam pritisnuo End Process, samo da budem siguran da je to vidio.

Ako pritisak ovog dugmeta još nije potpuno uvjerio da je to vrijedilo, njegov skok zbog svoje čvrstoće monitora, da brzo dođe do mene i izvuče me iz prostorije, definitivno je bio vrijedan toga.

Na kraju su mi zabranili pristup mreži na dva tjedna. Smatrao sam to pravednom kaznom. Oko tri tjedna kasnije, VNC server nestao je iz pokretačkih skripti i više se nije pojavljivao. Nisam saznao je li moj incident igrao neku ulogu u tome ili ne, ali potpuno je uništio moj plan o fantazijskom bogatstvu prodajom svog VNC oružja potlačenim studentima u računalnim dvoranama diljem zemlje.

Izvor: habr.com

Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster