Kooderite lahing: mina versus see VNC-tüüp

V selles blogis on olnud palju programmeerijate lugusid. Mulle meeldib meenutada oma vanu lollusi. Siin on veel üks selline lugu.

Hakkasin arvutitest, eriti programmeerimisest, huvituma umbes 11-aastaselt. Keskkooli alguses veetisinooma vabast ajast enamiku C64 külge ja kirjutasin Basicus, seejärel lõikasin kääridega halba koodi. Ma ei nalja, kääridega..

Pärast kooli (umbes 16-aastaselt) lähevad briti lapsed tavaliselt kolledžisse, kus valitakse kolme-nelja aine vahel, enne ülikooli minekut. Arvestades minu armastust beezist karbist ja magnetofonist kodus, otsustasin, et arvutiteaduse õppimine kolledžis on õige valik.

Kursus meeldis mulle rohkem, kui ma oodata oskasin; seal tutvusin esmakordselt Pascal ja Delphi.

Tunnipauside ajal said üliõpilased töötada igasuguste vabade masinate juures arvutiklassis. Kujutage ette: suur ruum, kus on umbes sada kohta, ridade kaupa laudu, mille peal on masinad — nagu need, kus monitor on süsteemiboksi peal. Pidev ventilaatorite sumisemine, hiiremuhvid gurgeldavad laudade peal, mitte hetkekski peatudes. Õhus on kummaline lõhn, justkui 50-100 teismelise hormoonide allikad vahelduvad, et jahutada sadu Pentium III kiipe.

Olenemata terviseriskidest, meeldis mulle arvuti taga istuda, kui vaba hetk tekkis.

Ruumi valvas administraator, kes oli keskealine, madal mees, kelle valiti sellele kohale tema vääritu sooviga saada kuri diktaator. Ma arvan nii. Valvamine on ilmselt vale sõna, poisile tõeliselt meeldis oma töö. Talle oli usaldatud jälgida korda, et keegi ei kasutaks õpikute arvutit sobimatuks otstarbeks.

Ja on siiani alateadvus ütleb mulle, et administraatori preemia sõltus otseselt õpilaste arvust, keda ta käest kinni püüdis ja arvutisaalist välja saatis. Olen praktiliselt kindel, et see tüüp maksis oma hüpoteegi enne tähtaega tagasi.

Ta istus arvutisaali kauges nurgas nurgalauas. Ja võis kindlalt öelda, et tema viljakad monitorid olid leidnud viisi paljuneda muljetavaldavalt lühikese raseduse perioodiga - neid oli nii palju. Jäi vaid aimata, kas ta tõeliselt suudab kõiki neid jälgida. Loomulikult, ma naljatan... kas ma ei maininud, et ta võttis oma tööd väga tõsiselt?

Sel ajal töötas arvutivõrk Windows 2000 all. Varsti avastasin, et igal sisselogimisel käivitub skript, mis käivitab VNC-serveri administraatori kontolt kaugjuurdepääsuks töölauale. Iga kord, kui see tüüp soovis teid jälgida, ühines ta otse teie masinaga ja vaatas. See oli hirmutav ja kui nüüd mõelda, tõenäoliselt ka ebaseaduslik.

Hakkasin hambad ära Baisikute ja C64 peale, nüüd kirjutasin ma C-s ja isegi natuke C++-s. Toona olin ma väga huvitatud D-keelest, mis lahendas mõned C++ puudused, nagu mulle tookord tundus.

Ma käisin tavaliselt arvutitootmisse, et lugeda midagi uut D-st või mängida Digital Mars D kompilaatoriga. Vahepeal, mõeldes D suursugusele tulevikule, kirjutasin ma C-koodi teiste Win32 programmide häkkimiseks nende akende descriptorite kaudu.

Vanadel headel aegadel Win32 programmeerimisel oli akna descriptorite otsimine kõige lihtsam meetod teiste programmide häkkimiseks. On ilmne, et kõikidel Windowsi graafilise liidese programmide akendest oli aken, isegi kui see ei olnud ekraanil nähtav. Kirjutades programmi, et teise protsessi descriptorit tõmmata (sisuliselt lingi sellele), võisite talle sõnumeid saata. See võimaldas teha mõned algsed toimingud, nagu programmi akna peitmine/kuvamine, samuti tõeliselt lahedaid asju, nagu sundida protsessi laadima juhuslikku DLL-i enda mäluruumi ja käivitama koodi. Pärast DLL-i süstimist algas tõeliselt põnev osa.

Esimese pooleteise kuu jooksul ei häirinud see detektiiv mind eriti, ta ühendus minu masina VNC-serveriga toimus vaid üks või kaks korda. Kuid üks konkreetne seanss nägi välja nagu oleks äratanud temas huvi. Kirjutasin mingit C-koodi Minesweepersi akende peitmiseks (neid sulgemata), et klassis mängimist lihtsustada, ja märkasin siis, et VNC valge ikoon süsteemisalves muutus mustaks. See tähendas, et ta jälgis mind nüüd.

Jätkasin koodimist nagu tavaliselt, püüdes temast mitte tähelepanu pöörata. Samal ajal hakkas masin tõeliselt aeglustuma, püüdes edastada maksimaalset kaadrisagedust ühele paljusid monitore toa nurgas. Windows peaaegu ei reageerinud, ja kui mu kannatus rauges, logisin välja ja lõpetasin selleks päevaks.

Järgmiste külastuste ajal arvutisaalis näitas Kolombo peaaegu igal korral elavat huvi selle vastu, millega ma tegelesin. Umbes pärast neljandat korda otsustasin: millegagi tuleb midagi teha.

Ma arvan, et mõistlik ja ratsionaalne inimene oleks võinud selle küsimuse otse tema või tema ülemuse poole esitada. Siiski olen ma alati tahtnud valida täiesti teistsuguse strateegia.

— Sa ei saa seda VNC-serverit ilma teha! — ütlesin endale mõned korrad rahulikult ja kindlalt.

VNC tuli hävitada.

Alustasin arvutisaali sisenemist suurte üliõpilasgruppidega ja püüdsin istuda nii kaugele monitoride nurga eest kui võimalik. Mõnda aega toimis see ja andis mulle veidi aega ideede kontrollimiseks.

Minu esimene katse, ma arvan, et te nõustute, oli üsna nõrk. Paremklõpsades VNC ikoonil süsteemisalves, nägin ma menüüd maagiliste tähtedega E-X-I-T. Kahjuks olid tähed kirjutatud halli kontuuriga. Administraator oli välja lülitanud 'Välja' menüüpunkte rühmapoliitika redaktori kaudu. Proovisin protsessi Tööülesannete haldurist lõpetada, kuid loomulikult ei olnud see minu jaoks nähtav, kuna see töötas teise, kõrgendatud privileegidega konto all. Midagi ei tulnud välja.

VNC-server töötab TCP 5900 sadamal, meenutasin. Minu järgmine plaan oli saata sellele sadamale kahjustatud pakette, et seda hanguda.

Mõned päevad veetsin protokolli uurides, saates sadamale 5900 erinevaid korralikult struktureeritud jama ja lootes, et ta puruneb. Lõpuks ei töötanud see ka.

Olin juba hakanud mõtlema, et ma ei suuda sellest asjast lahti saada, kui äkki tuli mulle meelde: seal peab olema aken! Pean selle kuvama. Võib-olla on seal ilus ja mahlane nupp 'Lülita välja', millele leian suurepärase kasutuse!

Käivitasin oma peaaegu täiusliku C-koodi, et leida teise protsessi peamise akna identifikaator - ja tõepoolest leidsin VNC. Tundsin end inspireerituna, kui sõrmed lõid WM_SHOWWINDOW. Proovige ära arvata, mida ma enda ees nägin?

Midagi!

Nüüd hakkas mind huvitama... tal oli aken, kuid see ignoreeris minu sõnumeid. Kontrollisin kaks korda oma koodi, et veenduda, et see töötab. Testisin seda mitmete teiste protsesside peal ja see töötas suurepäraselt. Proovisin saata VNC aknale muid sõnumeid, ja ikka mitte midagi.

Ja ja jälle sain suure ülevaate!

Tänu väga paksule a book Charles Petzoldile uurisin põhjalikult, kuidas Win32 protsessid süsteemis töötavad. Igal Win32 rakendusel on aken ja "sõnumijärjekord". Sõnumid, mis tulenevad kasutaja interaktsioonist, samuti Windowsi saatnud sõnumid, jõuavad järjekorda, ja rakendus otsustab, kuidas neid töödelda.

See ei olnud iseenesest liiga huvitav. Kuid kui ma mõistsin, et piisavalt suur töödeldud sõnumijärjekord on heuristika, et sekkuda hangunud protsessi, sain ma puhtalt serotoniinist higiseks.

Kaotamata sekundi, naasin tagasi oma C koodi juurde, valmistudes saatma VNC peamisele aknale veel ühe sõnumi WM_SHOWWINDOW. Tsüklis. Lõputus. Nii et palju sõnumeid WM_SHOWWINDOW, mida VNC, nagu ma nüüd teadsin, püüab täielikult ignoreerida… oma riski ja ohtu.

Kompileerisin ja käivitasin oma elu kõige vabameelsema 4 KB koodi. Umbes kolme sekundi pärast teatas Windows, et protsess vncserver.exe ei vasta ja tegi ettepaneku, millest ma lihtsalt ei saanud keelduda:

Kas soovite selle protsessi lõpetada?

Kuradi jah!

Lubage, et pean tunnistama, et ülejäänud päeva olin ma erakordselt enda üle uhke.

Pärast mõningaid tunde, mis kulusid minu uue superjõu seedimiseks, otsustasin, kuidas ma seda kasutan. Lihtsalt seansi lõpetamine otse tema silme ees oleks olnud liiga lihtne. Mul oli parem idee – täielikult kaduda.

Pärast programmeerimise socket’ite lahingu ristimine sain aru, et suudan kirjutada koodi, mis teeb kahte asja. Esiteks haarab see hiljuti vabaks saanud TCP-pordi 5900, mida oli varem kasutanud teadmatult VNC-serveri protsess. Seejärel loob see uue TCP-ühenduse määratud masina VNC-serveriga. Kood lihtsalt suunab kõik andmed kahe socketi vahel ja Columbo arvab, et ühendub minuga, samas kui tegelikult ühendub ta täiesti teise VNC-serveriga.

Minu kood toimib nagu salajane sild minu ja mõne teise vaese hinge vahel, kelle ma valin. See oli suurepärane.

Hakkasin kohe kirjutama oma vale VNC silda. Colombo ühendas minuga mitu korda, kuid ma jätkasin kodeerimist tema silme ees. Jõudsin järeldusele, et tal pole minu tegudest mingit aimu, kuigi kirjutasin iseenesestmõistetavaid asju, nagu portide numbrid ja kommentaarid nagu // Прощай, жуткий шпион VNC.

Mõne päeva pärast ei suutnud ma koodi õigesti tööle panna. Mis veelgi hullem, töötasin pidevalt musta VNC ikooniga süsteemisalves. Kui ta oli ühendatud, ei saanud ma porti vabastada, et oma koodi kontrollida.

Kui ma oleks toona teadnud netcat!

Lõpuks ei pidanud närvid vastu, olin ikkagi kärsitud 17-aastane noormees. Vaadates jälle, kuidas VNC serveri valge ikoon muutus mustaks, kaotasin rahu, avasin algse koodi, mis täitis sõnumite järjekorra, ja käivitasin selle tema silme all. Ootasime isegi paar sekundit, enne kui vajutasin End Process, et veenduda, et ta seda näeb.

Kui selle nupu vajutamine ei olnud mind veel täielikult veennud, et see oli seda väärt, siis tema hüppe tõttu oma monitorite tugevuselt, et kiiresti minu juurde tulla ja mind toast välja saata, oli kindlasti seda väärt.

Lõpuks keelati mul juurdepääs võrgule kaheks nädalaks. See oli õiglane karistus, mõtlesin ma. Umbes kolme nädala pärast kadus VNC server käivituskriptidest ja ei ilmunud enam kusagil. Ma ei saanud kunagi teada, kas minu intsident mängis selles mingit rolli või mitte, kuid see hävitas täielikult minu plaani rikastuda, müües oma VNC relva ülikoolide arvutiklassides hädas olevatele üliõpilastele üle kogu riigi.

Allikas: habr.com

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster