Coder Battle: Me vs. That VNC Guy

В denna blogg En hel del programmerare har publicerats. Jag tycker om att minnas mina gamla dumma saker. Tja, här är en annan sådan historia.

Jag började intressera mig för datorer, speciellt programmering, när jag var ungefär 11 år gammal. I början av gymnasiet bоJag tillbringade större delen av min fritid med att mixtra med min C64 och skriva BASIC, och sedan klippa bort den dåliga koden med sax. Jag skojar inte, sax.

Efter skolan (runt 16 års ålder) går brittiska barn vanligtvis på college, där de väljer att läsa tre eller fyra ämnen innan de går till universitetet. Med tanke på min kärlek till den beige boxen och bandspelaren hemma, bestämde jag mig för att studera "datavetenskap" på college var det rätta valet.

Jag gillade kursen mer än jag förväntade mig; där träffade jag Pascal och Delphi för första gången.

Under rasterna mellan lektionerna kunde eleverna arbeta på vilken ledig maskin som helst i datorrummet. Föreställ dig: ett enormt rum, designat för cirka hundra personer, med rader av bord fyllda med maskiner, som de där monitorn står på systemenheten. Fansen brummar hela tiden, musbollar surrar på borden och stannar inte för en sekund. Det finns en konstig lukt i luften, som om 50-100 hormonella tonåringar med jämna mellanrum byter för att kyla hundratals Pentium III-chips.

Trots hälsoriskerna gillade jag att sitta vid datorn när jag hade en ledig minut.

Den tjänstgörande administratören i rummet var en kortvuxen medelålders man som valdes till denna roll på grund av sin omättliga önskan att bli en ond diktator. Jag antar det. På tjänst är en underdrift, killen älskade verkligen sitt jobb. Han fick i uppdrag att hålla ordning så att ingen använde skoldatorn till något olämpligt.

Än i dag säger min intuition mig att administratörens bonus direkt berodde på antalet elever som han fångade vid handen och eskorterade ut från datorrummet. Jag är ganska säker på att den här killen betalade av sitt lån tidigt.

Han satt längst bort i datorrummet vid ett hörnbord. Och det var säkert att anta att hans fertilitetsmonitorer hade hittat ett sätt att reproducera sig med en imponerande kort dräktighetstid, det fanns så många av dem. Man kunde bara undra om han verkligen hade tid att hålla reda på dem alla. Visst, jag skojar... nämnde jag att han tog sitt arbete på största allvar?

Vid den tiden körde datornätverket Windows 2000. Jag upptäckte snart att varje gång jag loggade in på systemet, lanserades ett skript som specificerade att VNC-servern startade från administratörskontot för fjärråtkomst till skrivbordet. Närhelst den här killen ville spionera på dig, kopplade han direkt till din maskin och tittade. Det var läskigt, och nu när jag tänker efter, förmodligen olagligt.

Efter att ha klippt tänderna på BASIC och C64 skrev jag nu i C och även lite C++. På den tiden var jag fortfarande väldigt intresserad av D-språket, vilket rättade till några av bristerna i C++, som jag såg det då.

Jag brukade gå in i datorrummet för att läsa något nytt på D eller leka med kompilatorn Digital Mars D. Ibland, medan jag distraherades från att tänka på D:s stora framtid, skrev jag C-kod för att hacka andra Win32-program genom deras fönster. handtag.

På den gamla goda tiden med Win32-programmering var det enklaste sättet att hacka andra program att hitta ett fönsterhandtag. Uppenbarligen hade alla GUI-program på Windows ett fönster, även om det inte visades på skärmen. Genom att skriva ett program för att hämta ett handtag till en annan process (i huvudsak en länk till det), kan du skicka meddelanden till det. Detta tillät vissa grundläggande operationer som att dölja/visa ett programfönster, såväl som riktigt coola saker som att tvinga en process att ladda en godtycklig DLL i dess minnesutrymme och börja exekvera kod. Efter DLL-injektionen började det roliga.

Under den första och en halv månaden störde den här detektiven mig inte mycket, den kopplade till VNC-servern på min maskin bara en eller två gånger. Men en viss session kan ha väckt hans intresse. Jag skrev lite C-kod för att dölja Minesweeper-fönster (utan att stänga dem) för att göra det lättare att spela i klassen, när jag märkte att den vita VNC-ikonen i systemfältet hade blivit svart. Detta betydde att han nu tittade på mig.

Jag fortsatte att koda som vanligt och försökte ignorera honom. Under tiden började maskinen sakta ner och försökte överföra den maximala bildhastigheten till en av de otaliga monitorerna i hörnet av rummet. Windows slutade nästan svara, när mitt tålamod tog slut loggade jag ut och gjorde klart för dagen.

Vid efterföljande besök i datorrummet var Colombo stort intresse för vad jag gjorde nästan varje gång. Efter ungefär fjärde gången bestämde jag mig: Jag måste göra något åt ​​det här.

Jag erkänner att en förnuftig, rationell person helt enkelt kunde ha tagit upp denna fråga direkt med honom eller hans chef. Men jag gav alltid efter för frestelser och övertalade mig snabbt att anta en helt annan strategi.

- Du kan inte göra någonting utan denna VNC-server! — Jag sa till mig själv lugnt och bestämt flera gånger.

Det var nödvändigt att döda VNC.

Jag började gå in i datarummet med stora grupper av elever och satte mig så långt bort från hörnet med bildskärmarna som möjligt. Detta fungerade ett tag och gav mig lite tid att testa idéer.

Mitt första försök, jag tror du håller med om, var ganska svagt. När jag högerklickade på VNC-ikonen i systemfältet såg jag en meny med de magiska bokstäverna EXIT. Tyvärr var bokstäverna skrivna i grå konturtext. Administratören har inaktiverat menyalternativet "Avsluta" via grupprincipredigeraren. Jag försökte döda processen från Aktivitetshanteraren, men den var naturligtvis osynlig för mig eftersom den kördes under ett annat, mer privilegierat konto. Det gick inte.

VNC-servern körs på TCP-port 5900, kom jag ihåg. Min nästa plan var att skicka skadade paket till den här porten för att krascha den.

Jag tillbringade åtminstone några dagar med att mixtra med protokollet, skicka olika former av välstrukturerad skit till port 5900 och hoppades att det skulle gå sönder. Till slut fungerade det inte heller.

Jag började redan tänka att jag inte skulle kunna bli av med det här, när det plötsligt gick upp för mig: det måste finnas ett fönster där! Vi måste visa det. Kanske kommer den att ha en fin saftig "Mute"-knapp som jag kan använda till stor nytta!

Jag körde min nu nästan perfekta C-kod för att hitta handtaget till huvudfönstret i en annan process - och visst, VNC hittades. Jag kände mig inspirerad när mina fingrar skrev WM_SHOWWINDOW. Försök gissa vad jag såg framför mig?

Ingenting!

Nu blev jag nyfiken... den hade ett fönster, men den ignorerade mina meddelanden. Jag dubbelkollade min kod för att se till att den fungerar. Testade det på flera andra processer och det fungerade utmärkt. Jag försökte skicka andra meddelanden till VNC-fönstret, men fortfarande ingenting.

Och så gick det upp för mig igen!

Tack vare den mycket tjocka boken Charles Petzold Jag studerade noggrant hur Win32-processer fungerar inuti systemet. Varje Win32-program har ett fönster såväl som en "meddelandekö". Meddelanden som utlöses av användarinteraktion, såväl som meddelanden som skickas av Windows själv, kommer i en kö och programmet själv bestämmer hur de ska behandlas.

Inte särskilt intressant i sig. Men när jag insåg att en tillräckligt stor obearbetad meddelandekö fungerade som en heuristik för Window Process Manager att ingripa i en hängande process, började jag svettas rent serotonin.

Utan att slösa en sekund återvände jag till min C-kod och förberedde mig på att skicka ett nytt meddelande till VNC-huvudfönstret WM_SHOWWINDOW. I en cykel. Evig. Så många meddelanden. WM_SHOWWINDOW, som jag nu visste att VNC skulle försöka ignorera helt... på dess fara.

Jag kompilerade och körde 4KB av mitt livs mest frihetsälskande kod. Efter cirka tre sekunder rapporterade Windows att processen vncserver.ехе svarar inte och lämnade ett erbjudande som jag helt enkelt inte kunde tacka nej till:

Vill du slutföra den här processen?

OH JA!

Låt mig erkänna att jag under resten av dagen var outhärdligt nöjd med mig själv.

Efter några timmar med att smälta min nya superkraft bestämde jag mig för hur jag skulle använda den. Det var för lätt att bara döda sessionen precis framför honom. Jag hade en bättre idé - att försvinna helt.

Efter elddop med uttagsprogrammering Jag insåg att jag kunde skriva kod som skulle göra två saker. Den kommer först att ockupera den nyligen frigjorda TCP-porten 5900, som tidigare var upptagen av den aningslösa VNC-serverprocessen. Sedan kommer den att skapa en ny TCP-anslutning till VNC-servern för den angivna maskinen. Koden kommer helt enkelt att proxyservera all data mellan de två uttagen, och Columbo kommer att tro att han ansluter till mig, när han i själva verket kommer att ansluta till en helt annan VNC-server.

Min kod kommer att fungera som en hemlig bro mellan mig och någon annan stackars själ som jag väljer. Det var underbart.

Jag började genast skriva min falska VNC-brygga. Columbo kopplade till mig flera gånger, men jag fortsatte att programmera framför honom. Jag kom fram till att han inte hade någon aning om vad jag gjorde, även om jag skrev självklara saker som portnummer och kommentarer som // Прощай, жуткий шпион VNC.

Efter ett par dagar kunde jag inte få koden att fungera korrekt. För att göra saken värre arbetade jag nästan kontinuerligt med den svarta VNC-ikonen i systemfältet. Medan den var ansluten kunde jag inte släppa porten för att testa min kod.

Om jag hade vetat då netcat!

Till slut gav mina nerver vika, jag var trots allt en otålig 17-årig kille. När jag såg den vita VNC-serverikonen bli svart igen blev jag flippad, öppnade originalkoden som fyllde meddelandekön och körde den framför hans ögon. Jag väntade till och med ett par sekunder innan jag klickade End Process, bara för att vara säker på att han såg det.

Om att trycka på den knappen inte helt övertygade mig om att det var värt det, då hoppade han bakom sin fästning av monitorer för att snabbt gå fram till mig och föra ut mig ur rummet verkligen.

Som ett resultat blev jag avstängd från nätverket i två veckor. Ett rättvist straff, tyckte jag. Efter ungefär tre veckor försvann VNC-servern från startskripten och dök aldrig upp någon annanstans. Jag visste aldrig om min incident spelade någon roll i detta eller inte, men det förstörde helt min plan att bli fantastiskt rik genom att sälja min VNC-pistol till deprimerade studenter i datorhallar över hela landet.

Källa: will.com

Lägg en kommentar