Coder Battle: Me vs. That VNC Guy

В denne bloggen En hel del programmererhistorier har blitt publisert. Jeg liker å mimre om de gamle dumme tingene mine. Vel, her er en annen slik historie.

Jeg ble først interessert i datamaskiner, spesielt programmering, da jeg var rundt 11 år gammel. Ved begynnelsen av videregående bоJeg brukte mesteparten av fritiden min på å fikle med min C64 og skrive BASIC, for så å kutte ut den dårlige koden med en saks. Jeg tuller ikke, saks.

Etter skolen (rundt 16 år) går britiske barn vanligvis på college, hvor de velger å studere tre eller fire fag før de går på universitetet. Gitt min kjærlighet til den beige boksen og båndopptakeren hjemme, bestemte jeg meg for at det å studere "informatikk" på college var det riktige valget.

Jeg likte kurset mer enn jeg forventet; der møtte jeg Pascal og Delphi for første gang.

I pausene mellom timene kunne elevene jobbe på hvilken som helst ledig maskin i datarommet. Tenk deg: et stort rom, designet for rundt hundre personer, med rader med bord fylt med maskiner, som de der skjermen står på systemenheten. Fansen nynner konstant, museballer surrer på bordene, stopper ikke et sekund. Det er en merkelig lukt i luften, som om 50-100 hormonelle tenåringer med jevne mellomrom skifter for å avkjøle hundrevis av Pentium III-brikker.

Til tross for helserisikoen likte jeg å sitte ved datamaskinen når jeg hadde et ledig minutt.

Vakthavende administrator i rommet var en lav, middelaldrende mann som ble valgt til denne rollen på grunn av sitt umettelige ønske om å bli en ond diktator. Jeg antar det. På vakt er et underdrivelse; fyren elsket virkelig jobben sin. Han fikk i oppgave å holde orden slik at ingen brukte skolens datamaskin til noe upassende.

Den dag i dag forteller intuisjonen min meg at administratorens bonus var direkte avhengig av antall studenter han tok i hånden og eskorterte ut av datarommet. Jeg er ganske sikker på at denne fyren betalte ned boliglånet sitt tidlig.

Han satt helt i hjørnet av datarommet ved et hjørnebord. Og det var trygt å anta at fertilitetsmonitorene hans hadde funnet en måte å reprodusere seg på med en imponerende kort svangerskapsperiode, det var så mange av dem. Man kunne bare lure på om han virkelig hadde tid til å holde styr på dem alle. Selvfølgelig, jeg tuller... nevnte jeg at han tok arbeidet sitt veldig seriøst?

På den tiden kjørte datanettverket Windows 2000. Jeg oppdaget snart at hver gang jeg logget på systemet, ble det lansert et skript som spesifiserte å starte VNC-serveren fra administratorkontoen for ekstern tilgang til skrivebordet. Når denne fyren ønsket å spionere på deg, koblet han seg direkte til maskinen din og så på. Det var skummelt, og nå som jeg tenker på det, sannsynligvis ulovlig.

Etter å ha kuttet tennene mine på BASIC og C64, skrev jeg nå i C og til og med litt C++. På den tiden var jeg fortsatt veldig interessert i D-språket, som korrigerte noen av manglene i C++, slik jeg så det da.

Jeg pleide å gå inn i datarommet for å lese noe nytt på D eller leke med kompilatoren Digital Mars D. Noen ganger, mens jeg ble distrahert fra å tenke på den store fremtiden til D, skrev jeg C-kode for å hacke andre Win32-programmer gjennom vinduet deres. håndtak.

I de gode gamle dager med Win32-programmering var det å finne et vindushåndtak den enkleste metoden for å hacke andre programmer. Tydeligvis hadde alle GUI-programmer på Windows et vindu, selv om det ikke dukket opp på skjermen. Ved å skrive et program for å hente et håndtak til en annen prosess (i hovedsak en lenke til den), kan du sende meldinger til den. Dette tillot noen grunnleggende operasjoner som å skjule/vise et programvindu, samt virkelig kule ting som å tvinge en prosess til å laste en vilkårlig DLL inn i minneplassen og begynne å kjøre kode. Etter DLL-injeksjonen begynte moroa.

I løpet av den første og en halv måneden plaget denne detektiven meg ikke mye; den koblet seg til VNC-serveren på maskinen min bare én eller to ganger. Men en spesiell økt kan ha vekket hans interesse. Jeg skrev litt C-kode for å skjule minesveipervinduer (uten å lukke dem) for å gjøre det lettere å spille i klassen, da jeg la merke til at det hvite VNC-ikonet i systemstatusfeltet hadde blitt svart. Dette betydde at han nå så på meg.

Jeg fortsatte å kode som vanlig, og prøvde å ignorere ham. I mellomtiden begynte maskinen å bremse, og forsøkte å overføre maksimal bildefrekvens til en av de utallige skjermene i hjørnet av rommet. Windows sluttet nesten å svare, da tålmodigheten min tok slutt, logget jeg ut og fullførte for dagen.

Ved påfølgende besøk på datarommet ble Colombo interessert i det jeg holdt på med nesten hver gang. Etter omtrent fjerde gang bestemte jeg meg: Jeg må gjøre noe med dette.

Jeg innrømmer at en fornuftig, rasjonell person ganske enkelt kunne ha tatt opp dette problemet direkte med ham eller sjefen hans. Imidlertid ga jeg alltid etter for fristelsen og overtalte meg raskt til å ta en helt annen strategi.

- Du kan ikke gjøre noe uten denne VNC-serveren! — Jeg sa det rolig og bestemt til meg selv flere ganger.

Det var nødvendig å drepe VNC.

Jeg begynte å gå inn i datarommet med store grupper av elever og sitte så langt unna hjørnet med skjermene som mulig. Dette fungerte en stund og ga meg litt tid til å teste ideer.

Mitt første forsøk, jeg tror du vil være enig, var ganske svakt. Ved å høyreklikke på VNC-ikonet i systemstatusfeltet så jeg en meny med de magiske bokstavene EXIT. Dessverre ble bokstavene skrevet i grå konturtekst. Administratoren har deaktivert menyelementet "Avslutt" gjennom redigeringsprogrammet for gruppepolicy. Jeg prøvde å drepe prosessen fra Task Manager, men den var selvfølgelig usynlig for meg fordi den kjørte under en annen, mer privilegert konto. Det gikk ikke.

VNC-serveren kjører på TCP-port 5900, husket jeg. Min neste plan var å sende ødelagte pakker til denne porten for å krasje den.

Jeg brukte i det minste noen dager på å fikle med protokollen, og sendte forskjellige former for godt strukturert dritt til port 5900 og håpet at den ville gå i stykker. Til slutt fungerte det heller ikke.

Jeg begynte allerede å tenke på at jeg ikke ville klare å bli kvitt denne tingen, da det plutselig gikk opp for meg: det må være et vindu der! Vi må vise det. Kanskje den vil ha en fin, saftig "Mute"-knapp som jeg kan bruke!

Jeg kjørte min nå nesten perfekte C-kode for å finne håndtaket til hovedvinduet til en annen prosess - og riktignok ble VNC funnet. Jeg følte meg inspirert når fingrene mine skrev WM_SHOWWINDOW. Prøv å gjette hva jeg så foran meg?

Ingenting!

Nå ble jeg nysgjerrig... den hadde et vindu, men den ignorerte meldingene mine. Jeg dobbeltsjekket koden min for å være sikker på at den fungerer. Testet det på flere andre prosesser og det fungerte bra. Jeg prøvde å sende andre meldinger til VNC-vinduet, og fortsatt ingenting.

Og så gikk det opp for meg igjen!

Takket være den veldig tykke boka Charles Petzold I studerte nøye hvordan Win32-prosesser fungerer inne i systemet. Hvert Win32-program har et vindu så vel som en "meldingskø". Meldinger utløst av brukerinteraksjon, samt meldinger sendt av Windows selv, kommer i en kø, og applikasjonen bestemmer selv hvordan de skal behandles.

Ikke særlig interessant i seg selv. Men da jeg innså at en stor nok ubehandlet meldingskø fungerte som en heuristikk for Window Process Manager til å gripe inn i en hengt prosess, begynte jeg å svette rent serotonin.

Uten å kaste bort et sekund, gikk jeg tilbake til C-koden min, og forberedte meg på å sende en ny melding til hovedvinduet i VNC WM_SHOWWINDOW. I en syklus. Evig. Så mange meldinger. WM_SHOWWINDOW, som jeg nå visste at VNC ville prøve å ignorere fullstendig... på fare.

Jeg kompilerte og kjørte 4KB av den mest frihetselskende koden i mitt liv. Etter omtrent tre sekunder rapporterte Windows at prosessen vncserver.ехе svarer ikke, og ga et tilbud som jeg rett og slett ikke kunne avslå:

Vil du fullføre denne prosessen?

HELT JA!

La meg innrømme at jeg resten av dagen var uutholdelig fornøyd med meg selv.

Etter noen timer med å fordøye min nye superkraft, bestemte jeg meg for hvordan jeg ville bruke den. Det var for lett å bare drepe økten rett foran ham. Jeg hadde en bedre idé - å forsvinne helt.

Etter ilddåp med stikkontaktprogrammering Jeg innså at jeg kunne skrive kode som ville gjøre to ting. Den vil først okkupere den nylig frigjorte TCP-porten 5900, tidligere okkupert av den uvitende VNC-serverprosessen. Deretter vil den opprette en ny TCP-tilkobling til VNC-serveren til den angitte maskinen. Koden vil ganske enkelt gi proxy alle data mellom de to kontaktene, og Columbo vil tro at han kobler seg til meg, mens han faktisk vil koble til en helt annen VNC-server.

Koden min vil fungere som en hemmelig bro mellom meg og en annen stakkars sjel jeg velger. Det var fantastisk.

Jeg begynte umiddelbart å skrive min falske VNC-bro. Columbo koblet til meg flere ganger, men jeg fortsatte å programmere foran ham. Jeg kom til den konklusjonen at han ikke ante hva jeg gjorde, selv om jeg skrev åpenbare ting som portnumre og kommentarer som // Прощай, жуткий шпион VNC.

Etter et par dager kunne jeg ikke få koden til å fungere riktig. For å gjøre vondt verre, jobbet jeg nesten kontinuerlig med det svarte VNC-ikonet i systemstatusfeltet. Mens den var tilkoblet, kunne jeg ikke frigjøre porten for å teste koden min.

Hvis jeg hadde visst det da netcat!

Til slutt ga nervene mine etter, jeg var tross alt en utålmodig 17 år gammel fyr. Da jeg så det hvite VNC-serverikonet bli svart igjen, skremte jeg, åpnet den originale koden som fylte meldingskøen, og kjørte den foran øynene hans. Jeg ventet til og med et par sekunder før jeg klikket End Process, bare for å være sikker på at han så det.

Hvis det å trykke på den knappen ikke helt overbeviste meg om at det var verdt det, så gjorde han det som hoppet bak festningen sin av monitorer for raskt å nærme meg meg og føre meg ut av rommet.

Som et resultat ble jeg utestengt fra nettverket i to uker. En grei straff, tenkte jeg. Etter omtrent tre uker forsvant VNC-serveren fra oppstartsskriptene og dukket aldri opp noe annet sted. Jeg visste aldri om hendelsen min spilte noen rolle i dette eller ikke, men det ødela fullstendig planen min om å bli fabelaktig rik ved å selge VNC-pistolen min til deprimerte studenter i datamaskinhaller over hele landet.

Kilde: www.habr.com

Legg til en kommentar