Coder Battle: Minä vs. tuo VNC-mies

В tämä blogi Ohjelmoijatarinoita on julkaistu melko paljon. Haluan muistella vanhoja typeryyksiäni. No, tässä on toinen tällainen tarina.

Kiinnostuin tietokoneista, erityisesti ohjelmoinnista, ensimmäisen kerran noin 11-vuotiaana. Lukion alussa bоVietin suurimman osan vapaa-ajastani C64:n kanssa puuhaillessani ja BASIC:in kirjoittamiseen, minkä jälkeen leikkasin saksilla pois huonon koodin. En vitsaile, sakset.

Koulun jälkeen (noin 16-vuotiaana) brittilapset menevät yleensä korkeakouluun, jossa he päättävät opiskella kolme tai neljä ainetta ennen yliopistoon pääsyä. Ottaen huomioon rakkauteni beigeä laatikkoa ja nauhuria kohtaan kotona, päätin, että "tietotekniikan" opiskelu yliopistossa oli oikea valinta.

Pidin kurssista enemmän kuin odotin; siellä tapasin ensimmäisen kerran Pascalin ja Delphin.

Luokkien välissä oppilaat saivat työskennellä millä tahansa tietokonehuoneen vapaalla koneella. Kuvittele: valtava huone, joka on suunniteltu noin sadalle hengelle, jossa on rivejä pöytiä täynnä koneita, kuten ne, joissa näyttö seisoo järjestelmäyksikön päällä. Tuulettimet humisevat jatkuvasti, hiiren pallot surisevat pöydillä pysähtymättä hetkeksikään. Ilmassa on outo haju, ikään kuin 50-100 hormonaalista teini-ikäistä vaihtaisi ajoittain jäähdyttämään satoja Pentium III -siruja.

Terveysriskeistä huolimatta istuin mielelläni tietokoneen ääressä, kun minulla oli vapaa hetki.

Huoneessa päivystävä admin oli lyhyt, keski-ikäinen mies, joka valittiin tähän rooliin hänen kyltymättömästä halustaan ​​tulla pahaksi diktaattoriksi. Oletan niin. Päivystys on vähättelyä; kaveri todella rakasti työtään. Hän sai tehtäväkseen pitää järjestystä niin, ettei kukaan käyttänyt koulun tietokonetta sopimattomaan tarkoitukseen.

Tähän päivään asti intuitioni kertoo minulle, että järjestelmänvalvojan bonus riippui suoraan siitä, kuinka monta opiskelijaa hän tarttui kädestä ja saattoi ulos tietokonehuoneesta. Olen melko varma, että tämä kaveri maksoi asuntolainansa ennenaikaisesti.

Hän istui tietokonehuoneen perimmäisessä kulmassa kulmapöydän ääressä. Ja oli turvallista olettaa, että hänen hedelmällisyysmittarinsa olivat löytäneet tavan lisääntyä vaikuttavan lyhyellä raskausajalla, niitä oli niin paljon. Voisi vain ihmetellä, oliko hänellä todella aikaa seurata niitä kaikkia. Tietenkin, vitsailen... mainitsinko, että hän otti työnsä erittäin vakavasti?

Tuolloin tietokoneverkossa oli Windows 2000. Huomasin pian, että joka kerta kun kirjauduin järjestelmään, käynnistettiin komentosarja, joka määritti VNC-palvelimen käynnistämisen järjestelmänvalvojan tililtä etäkäyttöä varten työpöydälle. Aina kun tämä kaveri halusi vakoilla sinua, hän liittyi suoraan koneeseesi ja katsoi. Se oli kammottavaa, ja nyt kun ajattelen sitä, luultavasti laitonta.

Leikkattuani hampaani BASICilla ja C64:llä, kirjoitin nyt C:llä ja jopa hieman C++:lla. Tuolloin olin vielä erittäin kiinnostunut D-kielestä, joka korjasi joitain C++:n puutteita, sellaisena kuin sen silloin näin.

Menin tietokonehuoneeseen lukemaan jotain uutta D:stä tai pelaamaan Digital Mars D -kääntäjällä. Joskus, kun olin hajamielinen ajattelemasta D:n suurta tulevaisuutta, kirjoitin C-koodia hakkeroidakseni muita Win32-ohjelmia niiden ikkunasta kahvat.

Win32-ohjelmoinnin vanhoina hyvinä aikoina ikkunakahvan löytäminen oli helpoin tapa hakkeroida muita ohjelmia. Ilmeisesti kaikissa Windowsin GUI-ohjelmissa oli ikkuna, vaikka se ei näkynyt näytöllä. Kirjoittamalla ohjelman, joka hakee kahvan toiselle prosessille (lähinnä linkin siihen), voit lähettää viestejä sille. Tämä mahdollisti joidenkin perustoimintojen, kuten ohjelmaikkunan piilottamisen/näyttämisen, sekä todella hienot asiat, kuten prosessin pakottaminen lataamaan mielivaltaisen DLL:n muistitilaansa ja aloittamaan koodin suorittamisen. DLL-injektion jälkeen hauskuus alkoi.

Ensimmäisen puolentoista kuukauden aikana tämä etsivä ei häirinnyt minua juurikaan, se liittyi koneeni VNC-palvelimeen vain kerran tai kahdesti. Mutta yksi tietty istunto on saattanut herättää hänen kiinnostuksensa. Kirjoitin C-koodia piilottaakseni Minesweeper-ikkunoita (sulkematta niitä) helpottaakseni luokassa pelaamista, kun huomasin, että ilmaisinalueella oleva valkoinen VNC-kuvake oli muuttunut mustaksi. Tämä tarkoitti, että hän katseli nyt minua.

Jatkoin koodaamista tavalliseen tapaan yrittäen olla välittämättä hänestä. Samaan aikaan kone alkoi hidastua yrittäen lähettää enimmäiskuvanopeuden yhteen huoneen nurkassa olevista lukemattomista näytöistä. Windows melkein lakkasi vastaamasta, kun kärsivällisyyteni loppui, kirjauduin ulos ja lopetin päivän.

Myöhemmin tietokonehuoneessa vieraillessaan Colombo oli erittäin kiinnostunut siitä, mitä tein melkein joka kerta. Noin neljännen kerran jälkeen päätin: Minun täytyy tehdä asialle jotain.

Myönnän, että järkevä, järkevä ihminen olisi voinut yksinkertaisesti ottaa tämän asian esille suoraan hänen tai pomonsa kanssa. Annoin kuitenkin aina periksi kiusaukselle ja puhuin nopeasti omaksumaan täysin erilaisen strategian.

- Et voi tehdä mitään ilman tätä VNC-palvelinta! — Totesin itselleni rauhallisesti ja päättäväisesti useaan otteeseen.

Oli tarpeen tappaa VNC.

Aloin mennä tietokonehuoneeseen isojen opiskelijaryhmien kanssa ja istua mahdollisimman kaukana nurkasta näyttöjen kanssa. Tämä toimi jonkin aikaa ja antoi minulle aikaa kokeilla ideoita.

Ensimmäinen yritykseni, uskon, että olet samaa mieltä, oli melko heikko. Napsauta hiiren kakkospainikkeella VNC-kuvaketta ilmaisinalueella, ja näin valikon, jossa oli taikakirjaimet EXIT. Valitettavasti kirjeet kirjoitettiin harmaalla tekstillä. Järjestelmänvalvoja on poistanut "Poistu"-valikkokohdan käytöstä ryhmäkäytäntöeditorin kautta. Yritin lopettaa prosessin Tehtävienhallinnasta, mutta se oli tietysti näkymätön minulle, koska se oli käynnissä eri, etuoikeutetumman tilin alla. Se ei onnistunut.

VNC-palvelin toimii TCP-portissa 5900, muistin. Seuraava suunnitelmani oli lähettää vioittuneita paketteja tähän porttiin kaataakseen sen.

Vietin ainakin muutaman päivän puuhaillessani protokollaa, lähetin erilaisia ​​hyvin jäsenneltyä paskaa porttiin 5900 ja toivoin sen rikkoutuvan. Lopulta sekään ei toiminut.

Aloin jo ajatella, että en pääse tästä eroon, kun minulle yhtäkkiä valkeni: siellä täytyy olla ikkuna! Meidän on näytettävä se. Ehkä siinä on mukava mehukas "Mute"-painike, jota voin käyttää hyvin!

Ajoin nyt lähes täydellisen C-koodini löytääkseni kahvan toisen prosessin pääikkunaan - ja totta kai, VNC löytyi. Tunsin inspiraatiota sormeni kirjoittaessani WM_SHOWWINDOW. Yritä arvata, mitä näin edessäni?

Ei mitään!

Nyt olin utelias... siinä oli ikkuna, mutta se ei huomioinut viestejäni. Tarkistin koodini kahdesti varmistaakseni, että se toimii. Testasin sitä useissa muissa prosesseissa ja se toimi hyvin. Yritin lähettää muita viestejä VNC-ikkunaan, mutta silti mitään.

Ja sitten se valkeni minulle taas!

Kiitos erittäin paksu kirja Charles Petzold Tutkin huolellisesti kuinka Win32-prosessit toimivat järjestelmän sisällä. Jokaisessa Win32-sovelluksessa on ikkuna sekä "viestijono". Käyttäjän toiminnan laukaisemat viestit sekä Windowsin itsensä lähettämät viestit saapuvat jonoon, ja sovellus itse päättää, kuinka ne käsitellään.

Ei sinänsä kovin kiinnostavaa. Mutta kun tajusin, että riittävän suuri käsittelemätön viestijono toimi heuristina Window Process Managerille puuttuakseen ripustettuun prosessiin, aloin hikoilla puhdasta serotoniinia.

Hukkaamatta hetkeäkään palasin C-koodiini valmistautuen lähettämään toisen viestin VNC-pääikkunaan WM_SHOWWINDOW. Syklissä. Ikuinen. Eli paljon viestejä. WM_SHOWWINDOW, jonka tiesin nyt, että VNC yrittäisi jättää huomioimatta kokonaan... omalla vaarallaan.

Kokosin ja suoritin 4 kilotavua elämäni vapautta rakastavinta koodia. Noin kolmen sekunnin kuluttua Windows ilmoitti, että prosessi vncserver.ехе ei vastaa ja teki tarjouksen, josta en yksinkertaisesti voinut kieltäytyä:

Haluatko suorittaa tämän prosessin loppuun?

TOTTA HELVETISSÄ!

Myönnän, että loppupäivän olin sietämättömän tyytyväinen itseeni.

Muutaman tunnin sulatettuani uutta supervoimaani päätin, miten käytän sitä. Oli liian helppoa tappaa istunto suoraan hänen edessään. Minulla oli parempi idea - kadota kokonaan.

Jälkeen tulikaste pistorasiaohjelmoinnilla Tajusin, että voin kirjoittaa koodia, joka tekisi kaksi asiaa. Se käyttää ensin äskettäin vapautettua TCP-porttia 5900, jota aiemmin oli käyttänyt neuvoton VNC-palvelinprosessi. Sitten se luo uuden TCP-yhteyden määritetyn koneen VNC-palvelimeen. Koodi yksinkertaisesti välittää kaikki tiedot kahden pistorasian välillä, ja Columbo luulee muodostavansa yhteyden minuun, vaikka itse asiassa hän muodostaa yhteyden täysin eri VNC-palvelimeen.

Koodini toimii salaisena siltana minun ja jonkun muun valitsemani köyhän sielun välillä. Se oli mahtavaa.

Aloin heti kirjoittaa väärennettyä VNC-siltaani. Columbo otti minuun yhteyttä useita kertoja, mutta jatkoin ohjelmointia hänen edessään. Tulin siihen tulokseen, että hänellä ei ollut aavistustakaan mitä olin tekemässä, vaikka kirjoitin itsestäänselvyyksiä, kuten porttinumeroita ja kommentteja, kuten // Прощай, жуткий шпион VNC.

Parin päivän jälkeen en saanut koodia toimimaan oikein. Asiaa pahensi vielä se, että työskentelin lähes jatkuvasti ilmaisinalueella olevan mustan VNC-kuvakkeen kanssa. Kun se oli kytkettynä, en voinut vapauttaa porttia koodini testaamiseksi.

Jos olisin silloin tiennyt netcat!

Lopulta hermot antoivat periksi, olin loppujen lopuksi kärsimätön 17-vuotias kaveri. Katsoessani valkoisen VNC-palvelimen kuvakkeen muuttuvan jälleen mustaksi, järkytyin, avasin viestijonon alkuperäisen koodin ja juoksin sen hänen silmiensä edessä. Odotin jopa muutaman sekunnin ennen kuin klikkasin End Process, vain varmistaakseen, että hän näki sen.

Jos sen painikkeen painaminen ei täysin vakuuttanut minua siitä, että se oli sen arvoista, niin hän, joka hyppäsi näyttöjen linnoituksensa takaa lähestyäkseen nopeasti minua ja ohjatakseen minut ulos huoneesta, teki varmasti.

Tämän seurauksena minut kiellettiin verkossa kahdeksi viikoksi. Kohtuullinen rangaistus, ajattelin. Noin kolmen viikon kuluttua VNC-palvelin katosi käynnistysskripteistä eikä koskaan näkynyt missään muualla. En koskaan tiennyt, oliko tapaukseni rooli tässä vai ei, mutta se tuhosi täysin suunnitelmani rikastua upeasti myymällä VNC-aseeni masentuneille opiskelijoille yliopistojen tietokonesaleissa eri puolilla maata.

Lähde: will.com

Lisää kommentti