Kódolók csatája: én a VNC-s srác ellen

A blogunkban Számos programozói anekdota került már publikálásra. Szeretek visszaemlékezni régi butaságaimra. Nos, itt van még egy ilyen történet.

Először körülbelül 11 éves koromban kezdtem el érdeklődni a számítógépek, különösen a programozás iránt. Középiskola elején bóöcsém a szabadidőm jelentős részét a C64-emmel töltöttem, és Basicben írtam, majd ollóval vágtam ki a rossz kódokat. Nem viccelek, ollóval..

Iskola után (kb. 16 éves koromban) a brit gyerekek általában főiskolára mennek, ahol három-négy tantárgyat választanak, mielőtt egyetemre mennének. Figyelembe véve a bézs doboz és a magnó iránti szeretetemet otthon, úgy döntöttem, hogy a "számítástechnika" tanulmányozása a főiskolán a helyes választás.

A kurzus jobban tetszett nekem, mint amire számítottam; ott ismerkedtem meg először a Pascalal és a Delphi-vel.

Az órák közötti szünetekben a diákok bármely szabad gépnél dolgozhattak a számítógép teremben. Képzelje el: hatalmas terem, körülbelül száz főre tervezve, asztalok sorai gépekkel – olyasmi, ahol a monitor a számítógép házának tetején áll. Folyamatos ventilátorhűsítés zaját hallani, az egérlabdák pattogása a pulton nem áll meg egy pillanatra sem. A levegőben furcsa szag terjeng, mintha 50-100 tizenéves hormonjaitól feszülő fiatal időnként cserélnék, hogy lehűtsenek egy tucat Pentium III chipet.

Akkor is élveztem a számítógép előtt ülni, amikor akadt egy szabad perc, a egészségügyi kockázatok ellenére.

A teremben egy adminisztrátor volt, egy középkorú, alacsony férfi, akit azért választottak erre a szerepre, mert nem mindennapi vágya volt, hogy gonosz diktátor legyen. Gondolom. Az "őrség" szó enyhe kifejezés, a srác valóban szerette a munkáját. Az volt a feladata, hogy figyelje a rendet, hogy senki ne használja az oktatási számítógépet alkalmatlan dolgokra.

Ma is úgy érzem, hogy az admin prémiuma közvetlenül függött attól, hány diákot kap el és zavar el a számítógép teremből. Szinte biztos vagyok benne, hogy ez a srác korábban kifizette a jelzáloghitelét.

Az illető a számítógépes teremben ült, a sarokasztalnál. És biztosan feltételezhető volt, hogy a termékeny monitorjai hosszú terhességi időszak nélkül sokasodtak el — annyira sok volt belőlük. Csak találgatni lehetett, hogy valójában mindegyikre tud-e figyelni. Persze, viccelek… említettem, hogy ő nagyon komolyan vette a munkáját?

Abban az időben a számítógépes hálózat Windows 2000 alatt működött. Hamarosan felfedeztem, hogy minden bejelentkezésnél egy script futott, amely az admin fiókkal indította a VNC szervert a távoli asztal eléréséhez. Valahányszor ez a srác figyelni akart ránk, közvetlenül a gépünkhöz csatlakozott és megfigyelt. Ez hátborzongató volt, és ha most belegondolok, valószínűleg illegális is.

Miután belekóstoltam a Basicbe és a C64-be, most C nyelven írtam, sőt egy kicsit C++-on is. Akkoriban nagyon belemerültem a D nyelvbe, amely néhány hiányosságot javított a C++-ban, ahogy akkor láttam.

Általában úgy mentem a számítógépes terembe, hogy olvassak valami újat a D nyelvről, vagy játszadozzak a Digital Mars D fordítóval. Néha eltértem a D fényes jövőjével kapcsolatos gondolatoktól, és C nyelven írtam kódot más Win32 programok feltörésére az ablakkezelőik segítségével.

A jó öreg Win32 programozás napjaiban az ablakkezelő keresése volt a legegyszerűbb módszer más programok feltörésére. Nyilvánvaló, hogy minden grafikus felhasználói felülettel rendelkező Windows programnak volt ablaka, még akkor is, ha az nem volt látható a képernyőn. Ha írtál egy programot, amely képes volt kinyerni egy másik folyamat ablakkezelőjét (gyakorlatilag egy hivatkozást rá), üzeneteket küldhettél neki. Ez lehetővé tette néhány alapvető művelet végrehajtását, mint például az ablak elrejtése/megjelenítése, és nagyon érdekes dolgokat, például egy tetszőleges DLL betöltését a memóriájába és a kód végrehajtását. A DLL injektálása után kezdődött a legizgalmasabb rész.

Az első másfél hónapban ez a nyomozó különösebben nem zavart, csak egyszer vagy kétszer csatlakozott a gépem VNC-serveréhez. De egy adott munkamenet valószínűleg felkeltette az érdeklődését. C kódot írtam a Minesweeper ablakainak elrejtésére (anélkül, hogy bezárnám őket), hogy könnyebb legyen játszani az órán, és ekkor észrevettem, hogy a rendszer tálcán lévő fehér VNC ikon feketévé változott. Ez azt jelentette, hogy most figyel engem.

Továbbra is kódoltam, ahogy szoktam, próbálva figyelmen kívül hagyni őt. Közben a gépem egyre lassabb lett, miközben megpróbálta a maximális képkockát átkonvertálni az egyik, a szoba sarkában lévő számtalan monitorra. A Windows szinte teljesen reagálni is alig reagált, amikor a türelmem eltelt, kijelentkeztem és befejeztem a munkát aznapra.

A következő számítógépterem látogatások alkalmával Colombo szinte mindig élénk érdeklődést mutatott az iránt, amit csinálok. Körülbelül a negyedik alkalom után úgy döntöttem, hogy ezzel valamit kezdeni kell.

Elismerem, hogy egy értelmes, racionális ember egyszerűen felhozhatta volna ezt a kérdést közvetlenül neki vagy a főnökének. Azonban mindig is hajlamos voltam a kísértésre, és gyorsan meggyőztem magam, hogy egy teljesen más stratégiát válasszak.

— Nem tudsz semmit tenni ezen a VNC-server nélkül! — mondtam magamnak nyugodtan, határozottan többször is.

Meg kellett ölni a VNC-t.

Nagy csoportokkal kezdtem bemenni a számítógépterembe, és minél távolabb ülni a monitorok sarkától. Egy ideig működött, és adott egy kis időt az ötleteim áttekintésére.

Az első próbálkozásom, azt hiszem, egyetértene velem, elég gyenge volt. Jobb kattintva a rendszer tálcán lévő VNC ikonra, egy menüt láttam a varázslatos E-X-I-T betűkkel. Sajnos a betűk szürke körvonalas szöveggel voltak írva. Az adminisztrátor a csoportházirend szerkesztőn keresztül letiltotta a 'Kilépés' menüpontot. Megpróbáltam megölni a folyamatot a Feladatkezelőből, de természetesen nem láthattam, mivel egy másik, privilegáltabb fiók alatt futott. Semmi sem működött.

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

Legalább néhány napig elemeztem a protokollt, különböző módokon küldve a 5900-as portra helyesen strukturált hülyeségeket, és remélve, hogy összeroskad. Végül ez sem működött.

Már kezdtem azt hinni, hogy nem tudom megszabadítani ezt a dolgot, amikor hirtelen eszembe jutott: ott kell lennie egy ablaknak! Meg kell jeleníteni. Lehet, hogy lesz benne egy jó nagy "Kilépés" gomb, aminek tökéletes felhasználást találok!

Elindítottam a gyakorlatilag tökéletes C kódomat, hogy megtaláljam egy másik folyamat főablakának azonosítóját – és valóban megtaláltam a VNC-t. Szárnyakat kaptam, amikor az ujjaim begépeltek WM_SHOWWINDOW. Találd ki, mit láttam előttem?

Semmit!

Most kíváncsi lettem… volt ablaka, de figyelmen kívül hagyta az üzeneteimet. Kétszer ellenőriztem a kódomat, hogy megbizonyosodjak arról, hogy működik. Teszteltem más folyamatokon, és jól működött. Megpróbáltam más üzeneteket küldeni a VNC ablakába, de semmi.

Akkor újból rám jött a megvilágosodás!

Charles Petzold rendkívül vastag könyvének köszönhetően alaposan tanulmányoztam, hogyan működnek a Win32 folyamatok a rendszerben. Minden Win32 alkalmazásnak van egy ablaka, és van egy "üzenetsor". A felhasználói interakció által generált üzenetek, valamint a Windows által küldött üzenetek a sorba kerülnek, és az alkalmazás dönti el, hogyan dolgozza fel őket. könyvben Ez önmagában nem túl érdekes. De amikor rájöttem, hogy egy kellően nagy, feldolgozatlan üzenetsor a Window Process Manager intervenciójának heurisztikájaként működik a lefagyott folyamatban, tiszta szerotonin áradt el bennem.

Másodpercek alatt visszatértem a C kódomhoz, készülve, hogy egy újabb üzenetet küldjek a VNC főablakának

. Ciklusban. Örökké. Tehát sok üzenetet WM_SHOWWINDOW, amelyekről már tudtam, hogy a VNC teljesen figyelmen kívül fogja hagyni… a saját kockázatomra. WM_SHOWWINDOWÖsszeállítottam és elindítottam életem legszabadabb 4 kB kódját. Körülbelül három másodperc múlva a Windows azt jelezte, hogy a

vncserver.exe processz nem válaszol, és egy ajánlatot tett, aminek egyszerűen nem tudtam ellenállni: Meg akarja szüntetni ezt a folyamatot?

A francba, IGEN!

Engedje meg, hogy bevalljam, hogy a nap hátralévő részében elviselhetetlenül büszke voltam magamra.

Позвольте признаться, что остаток дня я был невыносимо доволен собой.

Miután néhány órát töltöttem az új szuperképességem feldolgozásával, eldöntöttem, hogyan szeretném azt kihasználni. Egyszerűen megölni a session-t a szeme láttára túl egyszerű lett volna. Volt egy jobb ötletem – teljesen eltűnni.

Után beavatkozás a socket programozás világába rájöttem, hogy tudok olyan kódot írni, ami két dolgot csinál. Először is, egy frissen felszabadult 5900-as TCP portot foglal le, ami korábban egy tudatlan VNC szerver folyamatot foglalt el. Aztán új TCP kapcsolatot létesít a megadott gép VNC szerverével. A kód egyszerűen proxyzálni fogja az adatokat a két socket között, és Colombo azt fogja gondolni, hogy hozzám csatlakozik, miközben valójában egy teljesen más VNC szerverhez csatlakozik.

A kód működése titkos híd lesz közöttem és egy másik áldozat között, akit kiválasztok. Ez csodálatos volt.

Azonnal elkezdtem írni a hamis VNC hidat. Colombo többször is csatlakozott hozzám, de én továbbra is programoztam a szeme láttára. Arra jutottam, hogy fogalma sincs a tevékenységeimről, pedig nyilvánvaló dolgokat, például a portszámokat és hasonló megjegyzéseket írtam. // Прощай, жуткий шпион VNC.

Néhány nap elteltével még mindig nem tudtam működésre bírni a kódot. Ami még rosszabb, szinte folyamatosan dolgoztam a VNC fekete ikonjával a rendszer tray-jében. Mialatt csatlakoztatva volt, nem tudtam felszabadítani a portot, hogy ellenőrizzem a kódomat.

Ha tudtam volna akkor, hogy netcat!

Végül a türelem feladta, hiszen türelmetlen 17 éves srác voltam. Miközben újra láttam, hogy a VNC szerver fehér ikonja feketévé vált, kiborultam, megnyitottam az eredeti kódot, ami a üzenetsorba töltött, és elindítottam a szeme láttára. Még vártam is néhány másodpercet, mielőtt megnyomtam a Processz lezárása, csak hogy megbizonyosodjak arról, hogy látta.

Ha ez a gomb megnyomása még nem győzött meg teljesen arról, hogy megérte, akkor az, ahogy ugrott a monitorok mögül, hogy gyorsan odajöjjön hozzám és kidobjon a szobából, határozottan megérte.

Végül két hétre megtiltották a hálózati hozzáférésemet. Igazságos büntetés, gondoltam. Körülbelül három hét múlva a VNC szerver eltűnt a boot szkriptekből, és többet nem is bukkant fel. Soha nem tudtam meg, hogy az incidensnek volt-e szerepe ebben, de teljesen tönkretette a VNC fegyverem eladására épített mesés meggazdagodási tervemet a középiskolák számítógép termében szenvedő diákoknak az ország egész területén.

Forrás: habr.com

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster