Coder Battle: Én vs. az a VNC srác

В ezt a blogot Jó néhány programozós mese jelent meg. Szeretek visszaemlékezni a régi hülyeségeimre. Nos, itt van egy másik ilyen történet.

Körülbelül 11 éves koromban kezdett el először érdeklődni a számítógépek, különösen a programozás iránt. A középiskola elején bоSzabadidőm nagy részét a C64-emmel való babrálással és BASIC írással töltöttem, majd ollóval kivágtam a rossz kódot. Nem viccelek, olló.

Iskola után (16 éves koruk körül) a brit gyerekek általában főiskolára mennek, ahol úgy döntenek, hogy három-négy tárgyat tanulnak, mielőtt egyetemre mennének. Tekintettel arra, hogy szeretem a bézs színű dobozt és a magnót otthon, úgy döntöttem, hogy a „számítástechnika” tanulmányozása a megfelelő választás az egyetemen.

A vártnál jobban élveztem a tanfolyamot; ott találkoztam először Pascallal és Delphivel.

Az órák közötti szünetekben a tanulók a számítástechnika terem bármely szabad gépén dolgozhattak. Képzeld el: egy hatalmas terem, körülbelül száz főre tervezve, asztalok sorain, tele gépekkel, olyanokkal, ahol a monitor áll a rendszeregységen. A szurkolók folyamatosan zúgnak, az asztalokon egérgolyók zümmögnek, egy pillanatra sem állnak meg. Furcsa szag terjeng a levegőben, mintha 50-100 hormonális tinédzser időről időre átcserélné a Pentium III chipek százait.

Az egészségügyi kockázatok ellenére szerettem a számítógép előtt ülni, ha volt egy szabad percem.

A teremben ügyeletes adminisztrátor egy alacsony, középkorú férfi volt, akit azért választottak erre a szerepre, mert csillapíthatatlan vágya volt, hogy gonosz diktátor legyen. Azt hiszem, igen. Az ügyelet enyhe kifejezés; a srác nagyon szerette a munkáját. Azt a feladatot kapta, hogy tartson rendet, hogy senki ne használja az iskolai számítógépet semmire.

A megérzésem a mai napig azt súgja, hogy az adminisztrátor bónusza közvetlenül attól függött, hány diákot fogott meg és kísért ki a számítógépteremből. Biztos vagyok benne, hogy ez a fickó korán kifizette a jelzáloghitelét.

A számítógépterem túlsó sarkában ült egy sarokasztalnál. És nyugodtan feltételezhető volt, hogy termékenységmérői megtalálták a módját, hogy lenyűgözően rövid vemhességi idővel szaporodjanak, olyan sok volt belőlük. Csak azon tűnődhetett, hogy tényleg van-e ideje nyomon követni őket. Persze viccelek... említettem már, hogy nagyon komolyan vette a munkáját?

Abban az időben a számítógépes hálózaton Windows 2000 futott. Hamar rájöttem, hogy minden alkalommal, amikor bejelentkeztem a rendszerbe, elindul egy szkript, amely előírja, hogy a VNC-kiszolgálót a rendszergazdai fiókból indítsa el az asztal távoli eléréséhez. Amikor ez a fickó kémkedni akart utánad, közvetlenül csatlakozott a gépedhez és figyelt. Hátborzongató volt, és most, hogy belegondolok, valószínűleg illegális.

Miután megvágtam a fogam a BASIC-on és a C64-en, most C-ben írtam, és még egy kicsit C++-ban is. Akkoriban még nagyon érdekelt a D nyelv, ami korrigálta a C++ néhány hiányosságát, ahogy akkor láttam.

Régebben bementem a számítógépterembe, hogy valami újat olvassak D-n, vagy játsszak a Digital Mars D fordítóval. Néha, miközben elzavart a D nagyszerű jövőjéről való gondolkodás, C kódot írtam, hogy feltörhessek más Win32 programokat az ablakukon keresztül. fogantyúk.

A Win32 programozás régi szép napjaiban az ablak fogantyújának megtalálása volt a legegyszerűbb módszer más programok feltörésére. Nyilvánvaló, hogy a Windows összes grafikus felhasználói felületének volt ablaka, még ha nem is jelent meg a képernyőn. Ha olyan programot ír, amely lekéri egy másik folyamat leíróját (lényegében egy hivatkozást), akkor üzeneteket küldhet neki. Ez lehetővé tette néhány alapvető műveletet, mint például egy programablak elrejtését/megjelenítését, valamint olyan nagyszerű dolgokat, mint például egy folyamat arra kényszerítése, hogy betöltsön egy tetszőleges DLL-t a memóriájába, és megkezdje a kód végrehajtását. A DLL injekció után kezdődött a móka.

Az első másfél hónapban ez a nyomozó nem nagyon zavart, csak egyszer-kétszer csatlakozott a gépemen lévő VNC szerverhez. De egy bizonyos ülés felkeltette az érdeklődését. C-kódot írtam, hogy elrejtse az Aknakereső ablakait (bezárás nélkül), hogy megkönnyítsem a játékot az órán, amikor észrevettem, hogy a tálcán a fehér VNC ikon feketére vált. Ez azt jelentette, hogy most engem figyel.

A szokásos módon folytattam a kódolást, megpróbálva figyelmen kívül hagyni őt. Eközben a gép lassítani kezdett, és a maximális képkocka sebességet próbálta továbbítani a szoba sarkában található számtalan monitor egyikére. A Windows majdnem leállt, amikor elfogyott a türelmem, kijelentkeztem és befejeztem a napot.

A számítógépteremben tett későbbi látogatások alkalmával Colombo szinte minden alkalommal élénken érdeklődött az iránt, amit csinálok. Körülbelül a negyedik alkalom után úgy döntöttem: tennem kell valamit.

Elismerem, hogy egy ésszerű, racionális ember egyszerűen felvehette volna ezt a kérdést közvetlenül neki vagy a főnökének. Azonban mindig engedtem a kísértésnek, és gyorsan rábeszéltem magam egy teljesen más stratégia elfogadására.

- Semmit nem tudsz csinálni e VNC szerver nélkül! — mondtam magamnak többször is higgadtan és határozottan.

Meg kellett ölni a VNC-t.

Elkezdtem bemenni a számítógépes terembe nagy diákcsoportokkal, és a lehető legtávolabb ültem a saroktól a monitorokkal. Ez működött egy ideig, és adott egy kis időt az ötletek tesztelésére.

Az első próbálkozásom, azt hiszem, egyetért, elég gyenge volt. A tálcán jobb gombbal a VNC ikonra kattintva egy menüt láttam az EXIT varázsbetűkkel. Sajnos a levelek szürke vázlatos szöveggel voltak írva. A rendszergazda letiltotta a "Kilépés" menüpontot a Csoportházirend-szerkesztőn keresztül. Megpróbáltam leállítani a folyamatot a Feladatkezelőből, de természetesen láthatatlan volt számomra, mert egy másik, privilegizáltabb fiók alatt futott. Nem sikerült.

A VNC szerver az 5900-as TCP porton fut, emlékeztem. A következő tervem az volt, hogy sérült csomagokat küldök erre a portra, hogy összeomolják.

Legalább néhány napot eltöltöttem a protokollon való trükközéssel, különféle jól felépített baromságokat küldtem az 5900-as portra, és reméltem, hogy elromlik. Végül ez sem sikerült.

Már kezdtem azt hinni, hogy nem fogok tudni szabadulni ettől a dologtól, amikor hirtelen eszembe jutott: ott biztos van egy ablak! Meg kell jelenítenünk. Talán lesz egy szép szaftos “Némítás” gombja, amit remekül tudok használni!

Lefuttattam a már majdnem tökéletes C kódomat, hogy megtaláljam egy másik folyamat főablakának fogantyúját – és bizony, a VNC megtalálta. Ihletet éreztem, amikor az ujjaim gépeltek WM_SHOWWINDOW. Próbáld kitalálni, mit láttam magam előtt?

Semmi!

Most kíváncsi voltam... volt ablaka, de figyelmen kívül hagyta az üzeneteimet. Még egyszer ellenőriztem a kódomat, hogy megbizonyosodjon arról, hogy működik. Több más folyamaton is tesztelték, és remekül működött. Megpróbáltam más üzeneteket küldeni a VNC ablakba, de még mindig semmi.

És akkor újra eszembe jutott!

Köszönhetően a nagyon vastag a könyv Charles Petzold Gondosan tanulmányoztam a Win32 folyamatok működését a rendszeren belül. Minden Win32 alkalmazásnak van ablaka, valamint "üzenetsora". A felhasználói interakció által kiváltott üzenetek, valamint a Windows által küldött üzenetek sorban érkeznek, és az alkalmazás maga dönti el, hogyan dolgozza fel őket.

Önmagában nem túl érdekes. De amikor rájöttem, hogy egy elég nagy feldolgozatlan üzenetsor heurisztikaként működik a Window Process Manager számára, hogy beavatkozzon egy lefagyott folyamatba, elkezdtem izzadni a tiszta szerotonintól.

Egyetlen másodpercet sem vesztegetve visszatértem a C kódomhoz, felkészülve egy újabb üzenet küldésére a fő VNC ablakba WM_SHOWWINDOW. Egy ciklusban. Örök. Szóval sok üzenet. WM_SHOWWINDOW, amit most tudtam, hogy a VNC megpróbálja teljesen figyelmen kívül hagyni... a veszedelmére.

Összeállítottam és lefuttattam 4 KB-ot életem leginkább szabadságszerető kódjából. Körülbelül három másodperc múlva a Windows jelentette, hogy a folyamat vncserver.ехе nem válaszol, és tett egy ajánlatot, amit egyszerűen nem tudtam visszautasítani:

Szeretné befejezni ezt a folyamatot?

NANÁ!

Bevallom, hogy a nap hátralévő részében elviselhetetlenül elégedett voltam magammal.

Az új szupererőm megemésztésével töltött néhány óra után eldöntöttem, hogyan fogom használni. Túl könnyű volt megölni az ülést közvetlenül előtte. Volt egy jobb ötletem – teljesen eltűnni.

Után tűzkeresztség aljzatprogramozással Rájöttem, hogy tudok olyan kódot írni, amely két dologra képes. Először az újonnan felszabadult 5900-as TCP-portot fogja elfoglalni, amelyet korábban a tanácstalan VNC-kiszolgáló folyamat foglalt el. Ezután új TCP-kapcsolatot hoz létre a megadott gép VNC-kiszolgálójával. A kód egyszerűen proxyként kezeli az összes adatot a két socket között, és Columbo azt hiszi, hogy hozzám csatlakozik, miközben valójában egy teljesen más VNC-kiszolgálóhoz csatlakozik.

A kódom titkos hídként fog működni köztem és egy másik általam választott szegény lélek között. Csodálatos volt.

Azonnal elkezdtem írni a hamis VNC hídomat. Columbo többször kapcsolódott hozzám, de én továbbra is előtte programoztam. Arra a következtetésre jutottam, hogy fogalma sincs, mit csinálok, pedig nyilvánvaló dolgokat írtam, például portszámokat és megjegyzéseket, mint pl. // Прощай, жуткий шпион VNC.

Néhány nap múlva nem tudtam megfelelően működésre bírni a kódot. A helyzetet rontotta, hogy szinte folyamatosan dolgoztam a fekete VNC ikonnal a tálcán. Amíg csatlakoztatva volt, nem tudtam felszabadítani a portot a kód teszteléséhez.

Ha akkor tudtam volna netcat!

A végén az idegeim feladtak, elvégre türelmetlen, 17 éves srác voltam. Amikor a fehér VNC-szerver ikonja ismét feketévé vált, kiakadtam, kinyitottam az üzenetsort feltöltő eredeti kódot, és lefuttattam a szeme láttára. Még vártam is pár másodpercet, mielőtt kattintottam volna End Process, csak hogy megbizonyosodjon róla, hogy látta.

Ha ennek a gombnak a megnyomása nem győzött meg teljesen arról, hogy megéri, akkor ő kiugrott a monitorok erődítménye mögül, hogy gyorsan közelítsen hozzám, és kikísérjen a szobából.

Ennek eredményeként két hétre kitiltottak a hálózatról. Igazságos büntetés, gondoltam. Körülbelül három hét elteltével a VNC-kiszolgáló eltűnt a rendszerindító szkriptekből, és soha máshol nem jelent meg. Soha nem tudtam, hogy az esetem szerepet játszott-e ebben vagy sem, de teljesen tönkretette azt a tervemet, hogy mesésen meggazdagodjak azzal, hogy eladtam VNC-fegyverem depressziós hallgatóknak az egyetemek számítógéptermeiben szerte az országban.

Forrás: will.com

Hozzászólás