I Det har publicerats en hel del programmeringshistorier. Jag gillar att minnas mina gamla dumheter. HÀr kommer Ànnu en sÄdan historia.
Jag blev intresserad av datorer, sÀrskilt programmering, nÀr jag var ungefÀr 11 Är gammal. I början av högstadietbÀsta resultatet (subjektiv Äsikt).tillbringade jag mestadels min fritid med min C64 och skrev i BASIC, för att sedan klippa bort dÄlig kod med en sax. .
Efter skolan (vid ungefÀr 16 Ärs Älder) gÄr brittiska barn vanligtvis pÄ college, dÀr de vÀljer tre till fyra Àmnen att studera innan de gÄr vidare till universitetet. Med tanke pÄ min kÀrlek till den beige lÄdan och kassettbandspelaren hemma, beslutade jag att studera "datavetenskap" pÄ college var det rÀtta valet.
Kursen övertrÀffade mina förvÀntningar; dÀr fick jag för första gÄngen lÀra mig Pascal och Delphi.
Under pauserna kunde studenterna arbeta vid vilken ledig dator som helst i datorsalen. FörestÀll dig: ett stort rum som rymmer omkring hundra personer, med rader av bord fyllda med datorer med skÀrmar pÄ systemen. Det stÀndiga surrandet av flÀktar, muskulÀra klot som rullar över borden utan att stanna. I luften finns en konstig doft, som om 50-100 hormonproducerande tonÄringar periodiskt bytte plats för att kyla hundratals Pentium III-chips.
Trots hÀlsoriskerna gillade jag att sitta vid datorn nÀr jag fick en ledig minut.
I rummet fanns en administratör, en medelÄlders man av kort vÀxt som valdes för den hÀr rollen pÄ grund av sin oemotstÄndliga vilja att bli en elak diktator. Jag antar det. Att vara vakt Àr en underdrift; killen Àlskade verkligen sitt jobb. Han fick ansvaret att hÄlla ordning sÄ att ingen anvÀnde skoldatorerna för olÀmpliga syften.
Och Àn idag sÀger min intuition mig att administratörens belöning direkt berodde pÄ antalet studenter han fÄngade och förvisade frÄn datorsalen. Jag Àr nÀstan sÀker pÄ att den killen tidigt betalade av sitt bolÄn.
Han satt i det avlÀgsna hörnet av datorsalen vid ett hörnbord. Och man kunde med sÀkerhet anta att hans fruktbara skÀrmar hade hittat ett sÀtt att reproducera sig med en imponerande kort graviditetstid - sÄ mÄnga var de. Det Äterstod bara att gissa om han verkligen lyckades hÄlla koll pÄ dem alla. SjÀlvklart skÀmtar jag... nÀmnde jag att han tog sitt jobb vÀldigt pÄ allvar?
Vid den tiden körde datanÀtverket pÄ Windows 2000. Snart upptÀckte jag att varje gÄng jag loggade in startade ett skript som startade VNC-servern med administratörskontot för fjÀrrÄtkomst till skrivbordet. Varje gÄng denna kille ville spana pÄ dig, kopplade han direkt till din maskin och observerade. Det var obehagligt, och om man nu tÀnker efter, troligen olagligt.
Efter att ha slipat tÀnderna pÄ BASIC och C64 skrev jag nu i C och lite i C++. Vid den tiden hade jag ocksÄ blivit vÀldigt intresserad av D-sprÄket, som enligt mig ÄtgÀrdade vissa brister i C++.
Jag brukade gÄ in i datorsalen för att lÀsa nÄgot nytt om D eller leka med Digital Mars D-kompilatorn. Ibland, nÀr jag blev distraherad frÄn tankar om D:s storartade framtid, skrev jag kod i C för att hacka andra Win32-program genom deras fönsterns handtag.
PÄ gamla goda dagar av programmering i Win32 var sökandet efter fönsterhandtag den enklaste metoden för att hacka andra program. Det Àr uppenbart att alla program med grafiskt grÀnssnitt i Windows hade ett fönster, Àven om det inte visades pÄ skÀrmen. Genom att skriva ett program för att extrahera handtaget till en annan process (i huvudsak en lÀnk till den) kunde du skicka meddelanden till den. Detta gjorde det möjligt att utföra vissa grundlÀggande operationer, som att dölja/visa programmets fönster, samt riktigt coola saker, som att fÄ processen att ladda en godtycklig DLL i sitt minnesutrymme och börja exekvera kod. Efter DLL-injektionen började det riktigt intressanta.
Under de första en och en halv mÄnaden oroade inte denna detektiv mig sÀrskilt, han kopplade upp sig mot VNC-servern pÄ min maskin endast en eller tvÄ gÄnger. Men en specifik session vÀckte troligen hans intresse. Jag skrev nÄgot kod i C för att dölja fönster i Minesweeper (utan att stÀnga dem), för att göra det lÀttare att spela i klassen, och mÀrkte plötsligt att den vita VNC-ikonen i systemfÀltet blivit svart. Det innebar att han nu övervakade mig.
Jag fortsatte att koda som vanligt, försökte att inte bry mig om honom. Under tiden började datorn verkligen lagga, nÀr den försökte överföra maximal bildfrekvens till en av de otaliga skÀrmarna i hörnet av rummet. Windows svarade knappt, och nÀr mitt tÄlamod brast loggade jag ut och avslutade för dagen.
Under de kommande besöken i datorsalen visade Colombo nÀstan varje gÄng ett stort intresse för vad jag gjorde. UngefÀr efter fjÀrde gÄngen bestÀmde jag mig för att göra nÄgot Ät detta.
Jag inser att en förnuftig, rationell person kanske skulle ha tagit upp frÄgan direkt med honom eller hans chef. Men jag har alltid fallit för frestelsen och snabbt övertygat mig sjÀlv att vÀlja en helt annan strategi.
â Du kan inte göra nĂ„gonting utan den hĂ€r VNC-servern! â sa jag lugnt och bestĂ€mt för mig sjĂ€lv ett par gĂ„nger.
Jag var tvungen att döda VNC.
Jag började gÄ in i datorsalen med stora grupper av studenter och satte mig sÄ lÄngt bort frÄn hörnet med skÀrmar som möjligt. Ett tag fungerade detta och gav mig lite tid att kontrollera idéer.
Mitt första försök, som jag tror ni hÄller med om, var ganska svagt. Genom att högerklicka pÄ VNC-ikonen i systemfÀltet sÄg jag en meny med magiska bokstÀver E-X-I-T. TyvÀrr var bokstÀverna skrivna med grÄ konturtecken. Administratören hade stÀngt av alternativet "Logga ut" via grupprincipredigeraren. Jag försökte döda processen frÄn Aktivitetshanteraren, men förstÄs var den osynlig för mig eftersom den kördes under ett annat, mer privilegierat konto. Inget fungerade.
VNC-servern körs pÄ TCP-port 5900, kom jag ihÄg. Min nÀsta plan var att skicka trasiga paket till denna port för att krascha den.
I spent several days analyzing the protocol, sending various forms of correctly structured junk to port 5900, hoping it would break. Eventually, that didnât work either.
I was starting to think I wouldnât be able to get rid of this thing when it suddenly hit me: thereâs likely a window! I need to display it. Maybe thereâs a nice juicy âShutdownâ button in it that I can put to good use!
I ran my nearly perfect C code to find the main window handle of another processâand indeed found VNC. I was elated as my fingers typed out WM_SHOWWINDOW. Guess what I saw in front of me?
Nothing!
Now I was curious⊠it had a window, but it ignored my messages. I double-checked my code to ensure it was working. I tested it on several other processes, and it worked great. I tried sending other messages to the VNC window, still nothing.
And then it hit me again!
Thanks to the very thick Charles Petzold, I studied how Win32 processes work within the system. Every Win32 application has a window and a "message queue." Messages triggered by user interaction, as well as messages sent by Windows itself, go into the queue, and the application decides how to handle them.
Not overly interesting by itself. But when I realized that a sufficiently large unprocessed message queue acts as a heuristic for interfering with a hung process by the Window Process Manager, I was drenched in pure serotonin.
Without wasting a second, I returned to my C code, preparing to send another message to the VNC main window WM_SHOWWINDOW. In a loop. An eternal one. So, a multitude of messages WM_SHOWWINDOW, which I now knew VNC would try to completely ignore⊠at its own peril.
I compiled and ran 4 KB of the most rebellious code of my life. About three seconds later, Windows reported that the process vncserver.exe is not responding, and made an offer I just couldnât refuse:
Do you want to terminate this process?
Hell yes, I DO!
Let me confess that for the rest of the day I was unbearably pleased with myself.
Efter flera timmar av att smĂ€lta min nya superkraft bestĂ€mde jag mig för hur jag skulle anvĂ€nda den. Att bara döda sessionen framför hans ögon var för enkelt. Jag hade en bĂ€ttre idĂ© â att försvinna helt.
Efter Jag insÄg att jag kunde skriva kod som skulle göra tvÄ saker. Först skulle den ta den nyligen frigjorda TCP-porten 5900, tidigare upptagen av den okunniga VNC-serverprocessen. Sedan skulle den skapa en ny TCP-anslutning med VNC-servern pÄ den angivna maskinen. Koden skulle helt enkelt vidarebefordra all data mellan de tvÄ sockets, och Columbo skulle tro att han anslöt till mig, nÀr han i sjÀlva verket skulle ansluta till en helt annan VNC-server.
Min kod skulle fungera som en hemlig bro mellan mig och nÄgon annan stackars sjÀl efter mitt val. Det var fantastiskt.
Jag började genast skriva min fejkbrygga för VNC. Columbo anslöt flera gĂ„nger till mig, men jag fortsatte att programmera framför hans ögon. Jag kom fram till att han inte hade en aning om mina handlingar, Ă€ven om jag skrev uppenbara saker som portnummer och kommentarer som // ĐŃĐŸŃаĐč, жŃŃĐșĐžĐč ŃĐżĐžĐŸĐœ VNC.
Efter ett par dagar kunde jag inte fÄ koden att fungera korrekt. Vad som var Ànnu vÀrre, jag jobbade praktiskt taget oavbrutet med den svarta VNC-symbolen i systemfÀltet. SÄ lÀnge den var ansluten kunde jag inte frigöra porten för att testa min kod.
Om jag bara hade vetat om netcat!
Till slut orkade nerverna inte lÀngre, jag var trots allt en otÄlig 17-Äring. NÀr jag Äterigen sÄg den vita VNC-serverns symbol bli svart, blev jag galen, öppnade den ursprungliga koden som fyllde meddelandekön och körde den framför honom. Jag vÀntade till och med nÄgra sekunder innan jag tryckte pÄ Avsluta process, bara för att vara sÀker pÄ att han sÄg det.
Om tryckningen pÄ den hÀr knappen Ànnu inte helt övertygat mig om att det var vÀrt det, sÄ var hans hopp frÄn sin plats vid skÀrmarna för att snabbt gÄ fram till mig och fösa ut mig ur rummet definitivt vÀrt det.
Till slut fick jag nÀtverksförbud i tvÄ veckor. En rÀttvis bestraffning, tÀnkte jag. UngefÀr tre veckor senare försvann VNC-servern frÄn boot-skripten och dök aldrig upp igen. Jag fick aldrig veta om min incident spelade nÄgon roll i detta eller inte, men den förstörde helt min plan för en sagolik berikning genom att sÀlja min VNC-hackade utrustning till förtryckta studenter i datorsalar pÄ högskolor över hela landet.
KĂ€lla: habr.com
