Beteja e koduesit: Unë kundër atij djalit të VNC

В këtë blog Janë botuar mjaft përralla programuesish. Më pëlqen të kujtoj gjërat e mia të vjetra budallaqe. Epo, këtu është një histori tjetër e tillë.

Fillimisht u interesova për kompjuterët, veçanërisht programimin, kur isha rreth 11 vjeç. Në fillim të shkollës së mesme bоPjesën më të madhe të kohës së lirë e kalova duke ngatërruar C64-ën time dhe duke shkruar BASIC, më pas duke hequr kodin e keq me gërshërë. Nuk po bëj shaka, gërshërë.

Pas shkollës (rreth moshës 16 vjeç), fëmijët britanikë zakonisht shkojnë në kolegj, ku zgjedhin të studiojnë tre ose katër lëndë përpara se të shkojnë në universitet. Duke pasur parasysh dashurinë time për kutinë ngjyrë bezhë dhe magnetofonin në shtëpi, vendosa që të studioja "shkenca kompjuterike" në kolegj ishte zgjedhja e duhur.

Më pëlqeu kursi më shumë sesa prisja; aty takova për herë të parë Paskalin dhe Delfin.

Gjatë pushimeve ndërmjet orëve, studentët mund të punonin në çdo makinë të lirë në dhomën e kompjuterit. Imagjinoni: një dhomë të madhe, të projektuar për rreth njëqind njerëz, me rreshta tavolina të mbushura me makina, si ato ku monitori qëndron në njësinë e sistemit. Tifozët po gumëzhin vazhdimisht, topat e miut gumëzhinin në tavolina, duke mos ndalur asnjë sekondë. Ka një erë të çuditshme në ajër, sikur 50-100 adoleshentë hormonalë ndryshojnë periodikisht për të ftohur qindra çipa Pentium III.

Pavarësisht rreziqeve për shëndetin, më pëlqente të ulesha në kompjuter kur kisha një minutë të lirë.

Administratori në detyrë në dhomë ishte një burrë i shkurtër, në moshë të mesme, i cili u zgjodh për këtë rol për shkak të dëshirës së tij të pangopur për t'u bërë një diktator i keq. Mendoj se po. Në detyrë është një nënvlerësim; djali me të vërtetë e donte punën e tij. Ai kishte për detyrë të ruante rendin në mënyrë që askush të mos përdorte kompjuterin e shkollës për ndonjë gjë të papërshtatshme.

Deri më sot, intuita ime më thotë se bonusi i administratorit varej drejtpërdrejt nga numri i studentëve që ai e kapte për dore dhe i përcillte nga dhoma e kompjuterit. Jam shumë i sigurt që ky djalë e ka paguar më herët hipotekën.

Ai u ul në cepin e largët të dhomës së kompjuterit në një tavolinë qoshe. Dhe ishte e sigurt të supozohej se monitoruesit e tij të fertilitetit kishin gjetur një mënyrë për të riprodhuar me një periudhë mbresëlënëse të shkurtër shtatzënie, kishte kaq shumë prej tyre. Dikush mund vetëm të pyesë veten nëse ai me të vërtetë kishte kohë për t'i mbajtur shënim të gjitha. Sigurisht qe po bej shaka...a permenda qe e kishte marre shume seriozisht punen?

Në atë kohë, rrjeti kompjuterik funksiononte Windows 2000. Shumë shpejt zbulova se sa herë që hyja në sistem, lëshohej një skript që specifikonte nisjen e serverit VNC nga llogaria e administratorit për qasje në distancë në desktop. Sa herë që ky djalë donte të të spiunonte, lidhej drejtpërdrejt me kompjuterin tënd dhe shikonte. Ishte rrëqethëse, dhe tani që e mendoj, ndoshta e paligjshme.

Pasi kam prerë dhëmbët në BASIC dhe C64, tani kam shkruar në C dhe madje edhe pak C++. Në atë kohë, unë isha ende shumë i interesuar për gjuhën D, e cila korrigjonte disa nga mangësitë e C++, siç e pashë atëherë.

Shkoja në dhomën e kompjuterit për të lexuar diçka të re në D ose për të luajtur me përpiluesin Digital Mars D. Ndonjëherë, ndërsa isha i hutuar nga të menduarit për të ardhmen e madhe të D, shkruaja kodin C për të hakuar programe të tjera Win32 përmes dritares së tyre. trajton.

Në ditët e mira të programimit Win32, gjetja e një doreze dritareje ishte metoda më e lehtë për të hakuar programe të tjera. Natyrisht, të gjitha programet GUI në Windows kishin një dritare, edhe nëse ajo nuk shfaqej në ekran. Duke shkruar një program për të tërhequr një dorezë në një proces tjetër (në thelb një lidhje me të), ju mund t'i dërgoni mesazhe atij. Kjo lejoi disa operacione bazë si fshehja/shfaqja e një dritareje programi, si dhe gjëra vërtet interesante si detyrimi i një procesi për të ngarkuar një DLL arbitrare në hapësirën e tij të memories dhe për të filluar ekzekutimin e kodit. Pas injektimit të DLL, filloi argëtimi.

Në muajin e parë e gjysmë, ky detektiv nuk më shqetësoi shumë; u lidh me serverin VNC në makinën time vetëm një ose dy herë. Por një seancë e veçantë mund të ketë zgjuar interesin e tij. Po shkruaja disa kode C për të fshehur dritaret e Minesweeper (pa i mbyllur) për ta bërë më të lehtë luajtjen në klasë, kur vura re se ikona e bardhë VNC në panelin e sistemit ishte bërë e zezë. Kjo do të thoshte se ai tani po më shikonte.

Vazhdova të kodoja si zakonisht, duke u përpjekur ta shpërfillja. Ndërkohë, makina filloi të ngadalësohej, duke u përpjekur të transmetonte shpejtësinë maksimale të kuadrove në një nga monitorët e panumërt në cep të dhomës. Windows pothuajse pushoi së përgjigjuri, kur durimi im mbaroi, unë dola dhe mbarova për ditën.

Në vizitat e mëvonshme në dhomën e kompjuterave, Colombo tregoi një interes të madh për atë që unë bëja pothuajse çdo herë. Pas rreth herës së katërt, vendosa: Më duhet të bëj diçka për këtë.

E pranoj se një person i arsyeshëm, racional thjesht mund ta kishte ngritur këtë çështje drejtpërdrejt me të ose me shefin e tij. Megjithatë, unë gjithmonë i nënshtrohesha tundimit dhe shpejt fola për të adoptuar një strategji krejtësisht të ndryshme.

- Nuk mund të bësh asgjë pa këtë server VNC! — I thashë vetes disa herë me qetësi dhe vendosmëri.

Ishte e nevojshme të vritet VNC.

Fillova të shkoj në dhomën e kompjuterave me grupe të mëdha studentësh dhe të ulem sa më larg këndit me monitorët. Kjo funksionoi për një kohë dhe më dha pak kohë për të provuar idetë.

Përpjekja ime e parë, mendoj se do të pajtoheni, ishte shumë e dobët. Duke klikuar me të djathtën në ikonën VNC në tabaka e sistemit, pashë një menu me shkronjat magjike EXIT. Fatkeqësisht, shkronjat ishin shkruar në tekst gri. Administratori ka çaktivizuar artikullin e menysë "Dalje" përmes Redaktorit të Politikave të Grupit. Unë u përpoqa ta heq procesin nga Task Manager, por sigurisht që ishte i padukshëm për mua sepse po funksiononte nën një llogari tjetër, më të privilegjuar. Nuk funksionoi.

Më kujtova, serveri VNC funksionon në portin TCP 5900. Plani im i radhës ishte të dërgoja pako të korruptuara në këtë port për ta rrëzuar atë.

Kalova të paktën disa ditë duke ndërhyrë me protokollin, duke dërguar forma të ndryshme gërmadhash të strukturuara mirë në portin 5900 dhe duke shpresuar se do të prishej. Në fund, as kjo nuk funksionoi.

Tashmë kisha filluar të mendoja se nuk do të mund të shpëtoja nga kjo gjë, kur papritmas më zuri syri: duhet të ketë një dritare atje! Ne duhet ta shfaqim atë. Ndoshta do të ketë një buton të këndshëm "Hesht" që mund ta përdor shumë!

Kam ekzekutuar kodin tim pothuajse të përsosur C për të gjetur dorezën në dritaren kryesore të një procesi tjetër - dhe sigurisht, VNC u gjet. U ndjeva i frymëzuar kur shtypnin gishtat WM_SHOWWINDOW. Mundohuni të merrni me mend se çfarë pashë para meje?

Jo!

Tani isha kurioz... kishte një dritare, por po injoronte mesazhet e mia. E kontrollova dy herë kodin tim për t'u siguruar që funksionon. E testova në disa procese të tjera dhe funksionoi shkëlqyeshëm. Provova të dërgoja mesazhe të tjera në dritaren e VNC, dhe ende asgjë.

Dhe pastaj m'u duk përsëri!

Falë shumë të trashë libri Charles Petzold Kam studiuar me kujdes se si funksionojnë proceset Win32 brenda sistemit. Çdo aplikacion Win32 ka një dritare si dhe një "radhë mesazhesh". Mesazhet e shkaktuara nga ndërveprimi i përdoruesit, si dhe mesazhet e dërguara nga vetë Windows, mbërrijnë në një radhë dhe vetë aplikacioni vendos se si t'i përpunojë ato.

Jo shumë interesante në vetvete. Por kur kuptova se një radhë mjaft e madhe e mesazheve të papërpunuara veproi si një heuristik për menaxherin e procesit të dritares për të ndërhyrë në një proces të varur, fillova të djersitja serotoninën e pastër.

Pa humbur asnjë sekondë, u ktheva në kodin tim C, duke u përgatitur për të dërguar një mesazh tjetër në dritaren kryesore të VNC WM_SHOWWINDOW. Në një cikël. I perjetshem. Pra, shumë mesazhe. WM_SHOWWINDOW, të cilin tani e dija që VNC do të përpiqej ta injoronte plotësisht... në rrezik.

Përpilova dhe ekzekutova 4 KB të kodit më liridashës të jetës sime. Pas rreth tre sekondash, Windows raportoi se procesi vncserver.ехе nuk përgjigjet dhe bëra një ofertë që thjesht nuk mund ta refuzoja:

Dëshironi ta përfundoni këtë proces?

FERRI PO!

Më lejoni të pranoj se për pjesën tjetër të ditës isha padurueshëm i kënaqur me veten.

Pas disa orësh të shpenzuara për të tretur superfuqinë time të re, vendosa se si do ta përdorja. Ishte shumë e lehtë të vrasësh seancën pikërisht përpara tij. Kisha një ide më të mirë - të zhdukesha plotësisht.

Pas pagëzimi i zjarrit me programim prizë Kuptova se mund të shkruaja kod që do të bënte dy gjëra. Fillimisht do të zërë portin TCP 5900 të sapo çliruar, i zënë më parë nga procesi i paditur i serverit VNC. Pastaj do të krijojë një lidhje të re TCP me serverin VNC të makinës së specifikuar. Kodi thjesht do të përfaqësojë të gjitha të dhënat midis dy prizave dhe Columbo do të mendojë se po lidhet me mua, kur në fakt ai do të lidhet me një server VNC krejtësisht të ndryshëm.

Kodi im do të veprojë si një urë sekrete midis meje dhe një shpirti tjetër të varfër që kam zgjedhur. Ishte e mrekullueshme.

Fillova menjëherë të shkruaj urën time të rreme VNC. Columbo u lidh disa herë me mua, por unë vazhdova të programoja para tij. Unë arrita në përfundimin se ai nuk e kishte idenë se çfarë po bëja, edhe pse shkruajta gjëra të dukshme si numrat e porteve dhe komente si // Прощай, жуткий шпион VNC.

Pas nja dy ditësh, nuk arrita ta gjeja kodin për të punuar si duhet. Për t'i bërë gjërat edhe më keq, unë po punoja pothuajse vazhdimisht me ikonën e zezë VNC në tabaka e sistemit. Ndërsa ishte i lidhur, nuk mund ta lëshoja portin për të testuar kodin tim.

Sikur ta dija atëherë netcat!

Në fund, nervat më ranë, në fund të fundit, isha një djalë 17-vjeçar i paduruar. Duke parë ikonën e bardhë të serverit VNC duke u bërë sërish e zezë, u tremba, hapa kodin origjinal që mbushte radhën e mesazheve dhe e drejtova para syve të tij. Madje prita disa sekonda para se të klikoja End Process, vetëm për t'u siguruar që ai e pa atë.

Nëse shtypja e atij butoni nuk më bindi plotësisht se ia vlente, atëherë ai kërceu nga prapa fortesës së tij të monitorëve për t'u afruar me shpejtësi tek unë dhe do të më nxirrte nga dhoma sigurisht që ia vlente.

Si rezultat, unë u ndalova nga rrjeti për dy javë. Një dënim i drejtë, mendova. Pas rreth tre javësh, serveri VNC u zhduk nga skriptet e nisjes dhe nuk u shfaq kurrë askund tjetër. Unë kurrë nuk e dija nëse incidenti im luajti ndonjë rol në këtë apo jo, por ai e prishi plotësisht planin tim për t'u pasuruar jashtëzakonisht shumë duke shitur armën time VNC studentëve të dëshpëruar në sallat e kompjuterave të kolegjit në të gjithë vendin.

Burimi: www.habr.com

Shto një koment