De strijd der coders: ik tegen de jongen met VNC

In deze blog Er zijn heel wat verhalen over programmeurs gepubliceerd. Ik herinner me graag mijn oude domheden. Nou, hier is weer zo'n verhaal.

Ik raakte voor het eerst geïnteresseerd in computers, vooral programmeren, toen ik ongeveer 11 jaar oud was. Aan het begin van de middelbare school bracht ik het grootste deel van mijn vrije tijd door met mijn C64 en schreef ik in BASIC, en daarna knipte ik slechte code met scharen.groter publiek.Ik maak geen grapje, met scharen. Na school (rond de 16 jaar) gaan Britse kinderen meestal naar de college, waar ze drie tot vier vakken kiezen om te studeren, voordat ze naar de universiteit gaan. Gezien mijn liefde voor de beige doos en de bandrecorder thuis, besloot ik dat het studeren van 'informatica' op het college de juiste keuze was..

De cursus beviel me meer dan ik had verwacht; daar maakte ik voor het eerst kennis met Pascal en Delphi.

Tijdens de pauzes konden studenten achter elke beschikbare computer in het computerlokaal werken. Stel je dit voor: een enorme kamer, ingericht voor ongeveer honderd personen, met rijen tafels vol machines, zoals die waarbij de monitor op de kast staat. Het constante gezoem van ventilatoren, muizenkogels die over de tafels ratelen, zonder een seconde stil te staan. Er hangt een vreemde geur in de lucht, alsof 50-100 pubers met hormonen af en toe afwisselend honderden Pentium III-chips koelen.

Hoewel er gezondheidsrisico's aan verbonden waren, vond ik het leuk om achter de computer te zitten als ik even de tijd had.

Er was een admin aanwezig, een kleine man van gemiddelde leeftijd, die voor deze rol was gekozen vanwege zijn onstuitbare verlangen om een kwaadaardige dictator te worden. Tenminste, dat denk ik. Het woord 'aanwezig' is zachtjes gezegd; de jongen hield echt van zijn werk. Hem was opgedragen om de orde te handhaven, zodat niemand de studiemachine voor ongeschikte doeleinden gebruikte.

Tot op de dag van vandaag geeft mijn intuïtie me het idee dat de premie van de admin rechtstreeks afhankelijk was van het aantal studenten dat hij betrapte en uit het computerlokaal zette. Ik ben er praktisch zeker van dat deze jongen zijn hypotheek vroegtijdig heeft afgelost.

En tot op de dag van vandaag geeft mijn intuïtie aan dat de premie van de admin rechtstreeks afhankelijk was van het aantal studenten dat hij op heterdaad betrapte en uit de computerzaal zette. Ik ben er bijna van overtuigd dat deze jongen zijn hypotheek vroegtijdig heeft afgelost.

Hij zat in de verre hoek van de computerzaal achter een hoektafel. En je kon met zekerheid aannemen dat zijn vruchtbare monitoren een manier hadden gevonden om zich met een indrukwekkend korte draagtijd voort te planten — er waren er zoveel. Het bleef alleen gissen of hij ze allemaal wel in de gaten kon houden. Natuurlijk, ik maak een grapje… heb ik al gezegd dat hij zijn werk heel serieus nam?

In die tijd werkte het computernetwerk onder Windows 2000. Al snel ontdekte ik dat bij elke aanmelding een script werd uitgevoerd dat de VNC-server opstartte met een beheerdersaccount voor externe toegang tot het bureaublad. Telkens als deze man je in de gaten wilde houden, maakte hij rechtstreeks verbinding met jouw machine en keek mee. Het was eng, en als ik er nuover nadenk, hoogstwaarschijnlijk illegaal.

Na mijn tanden te hebben geslepen op Basic en C64, schreef ik nu in C en zelfs een beetje in C++. In die tijd was ik ook erg enthousiast over de D-taal, die sommige tekortkomingen van C++ oploste, althans zo zag ik dat toen.

Ik ging meestal de computerzaal binnen om iets nieuws over D te lezen of te experimenteren met de Digital Mars D-compiler. Soms, afgeleid van mijn gedachten over de grote toekomst van D, schreef ik code in C om andere Win32-programma's te hacken via de descriptors van hun vensters.

In de goede oude tijd van Win32-programmeren was het zoeken naar een vensterdescriptor de eenvoudigste methode om andere programma's te hacken. Het is duidelijk dat alle grafische interfaceprogramma's in Windows een venster hadden, zelfs als het niet op het scherm werd weergegeven. Door een programma te schrijven om de descriptor van een ander proces (in wezen een verwijzing ernaar) te extraheren, kon je hem berichten sturen. Dit stelde je in staat om enkele basisbewerkingen uit te voeren, zoals het verbergen/tonen van het venster van het programma, evenals echt coole dingen, zoals het dwingen van het proces om een willekeurige DLL in zijn geheugenruimte te laden en code uit te voeren. Na de DLL-injectie begon het pas echt interessant te worden.

In de eerste anderhalve maand verstoorde deze detective me niet echt, hij heeft alleen één of twee keer verbinding gemaakt met de VNC-server op mijn machine. Maar een specifieke sessie wekte waarschijnlijk zijn interesse. Ik was wat C-code aan het schrijven om de vensters van Minesweeper te verbergen (zonder ze te sluiten), zodat het makkelijker werd om in de klas te spelen, en toen viel het me op dat het witte VNC-pictogram in het systeemvak zwart was geworden. Dat betekende dat hij me nu in de gaten hield.

Ik bleef gewoon coderen, probeerde hem te negeren. Ondertussen begon de machine behoorlijk te vertragen, terwijl hij probeerde de maximale framefrequentie naar een van de talloze monitoren in de hoek van de kamer te sturen. Windows reageerde bijna niet meer toen mijn geduld opraakte, dus logde ik uit en was voor vandaag klaar.

Tijdens de volgende bezoekjes aan het computerlokaal toonde Columbo bijna elke keer levendige interesse in wat ik deed. Na ongeveer de vierde keer besloot ik: hier moet iets mee gebeuren.

Ik geef toe dat een verstandig, rationeel persoon deze kwestie misschien direct met hem of zijn leidinggevende had kunnen bespreken. Maar ik viel altijd voor de verleiding en overtuigde mezelf snel om een heel andere strategie te kiezen.

— Je kunt niets doen zonder deze VNC-server! — zei ik een paar keer rustig tegen mezelf.

Ik moest VNC uitschakelen.

Ik begon met grote groepen studenten het computerlokaal binnen te gaan en zo ver mogelijk van de hoek met de monitoren te gaan zitten. Een tijdje werkte dit en gaf me wat tijd om ideeën na te gaan.

Mijn eerste poging, ik denk dat jullie het met me eens zijn, was behoorlijk zwak. Door met de rechtermuisknop op het VNC-pictogram in het systeemvak te klikken, zag ik een menu met de magische letters E-X-I-T. Helaas waren de letters in grijs omlijnd. De beheerder had het menu-item 'Afsluiten' via de groepsbeleid-editor uitgeschakeld. Ik probeerde het proces te beëindigen via Taakbeheer, maar natuurlijk was het voor mij onzichtbaar omdat het onder een andere, meer bevoegde account draaide. Niets werkte.

De VNC-server draait op poort TCP 5900, herinnerde ik me. Mijn volgende plan was om beschadigde pakketten naar deze poort te sturen om hem vast te laten lopen.

Gedurende minstens een paar dagen was ik bezig met het analyseren van het protocol, waarbij ik verschillende vormen van correct gestructureerde troep naar poort 5900 stuurde in de hoop dat het zou crashen. Uiteindelijk werkte dat ook niet.

Ik begon me al af te vragen of ik ooit vanaf deze ellende af zou kunnen komen, toen het me plotseling te binnen schoot: er moet een venster zijn! Ik moet het weergeven. Misschien zit daar wel een mooie, sappige knop 'Uitschakelen' op die ik goed kan gebruiken!

Ik startte mijn bijna perfecte C-code om het vensterhandle van een ander proces te vinden - en vond inderdaad VNC. Ik voelde me opgetogen toen mijn vingers "WM_SHOWWINDOW" intikten. Kun je raden wat ik voor me zag?Niets!

Nu werd ik nieuwsgierig... er was een venster, maar het negeerde mijn berichten. Ik controleerde mijn code nogmaals om er zeker van te zijn dat hij goed werkte. Ik testte het op een paar andere processen en het werkte perfect. Ik probeerde andere berichten naar het VNC-venster te sturen, maar weer, niets.

En toen kwam het weer bij me op!

Dankzij de zeer dikke

Charles Petzold had ik grondig bestudeerd hoe Win32-processen binnen het systeem werken. Elke Win32-toepassing heeft een venster en een 'berichtenwachtrij'. Berichten, die ontstaan door gebruikersinteractie evenals berichten die door Windows zelf worden verzonden, komen in de wachtrij terecht en de toepassing beslist zelf hoe ze deze verwerkt. boek Niet heel interessant op zichzelf. Maar toen ik me realiseerde dat een aanzienlijke ongewerkte berichtenwachtrij een heuristiek vormde voor inbreuk op een vastgelopen proces door de Window Process Manager, voelde ik me als opnieuw geboren.

Zonder een seconde te verliezen, keerde ik terug naar mijn C-code, klaar om nog een bericht naar het hoofdvenster van VNC te sturen.

In een cyclus. Een eeuwige. Dus, een heleboel berichten, Kun je raden wat ik voor me zag?die, zoals ik nu wist, VNC volledig zou proberen te negeren... op zijn eigen risico. Kun je raden wat ik voor me zag?Ik compileerde en startte de 4 KB van de vrijheidslievendste code in mijn leven. Ongeveer drie seconden later meldde Windows dat het proces

vncserver.exe niet reageert, en deed een aanbod dat ik gewoon niet kon weigeren: Wilt u dit proces beëindigen?

Verdomme, JA!

Laat me bekennen dat ik de rest van de dag onuitstaanbaar tevreden met mezelf was.

Laat me bekennen dat ik de rest van de dag ondraaglijk tevreden over mezelf was.

Na een paar uur het verwerken van mijn nieuwe superkracht, besloot ik hoe ik het zou gebruiken. Gewoon de sessie voor zijn ogen beëindigen was te gemakkelijk. Ik had een beter idee - gewoon helemaal verdwijnen.

Na de strijdseksel met socketprogrammering realiseerde ik me dat ik code kon schrijven die twee dingen zou doen. Eerst zou het de recent vrijgegeven TCP-poort 5900 innemen, die eerder door een onwetend VNC-serverproces werd gebruikt. Daarna zou het een nieuwe TCP-verbinding opzetten met de VNC-server van de opgegeven machine. De code zou simpelweg alle gegevens tussen de twee sockets doorsturen, en Columbo zou denken dat hij met mij verbinding maakte, terwijl hij in feite met een totaal andere VNC-server verbond.

Mijn code zou fungeren als een geheime brug tussen mij en een andere arme ziel naar keuze. Het was prachtig.

Ik begon meteen met het schrijven van mijn nepprogramma voor de VNC-brug. Columbo maakte een paar keer verbinding met mij, maar ik bleef programmeren voor zijn neus. Ik kwam tot de conclusie dat hij geen idee had van mijn acties, hoewel ik voor de hand liggende dingen schreef, zoals poortnummers en opmerkingen zoals // Прощай, жуткий шпион VNC.

Na een paar dagen kreeg ik de code maar niet goed aan de praat. Nog erger, ik werkte vrijwel continu met het zwarte VNC-pictogram in het systeemvak. Terwijl het verbonden was, kon ik de poort niet vrijmaken om mijn code te testen.

Als ik toen maar had geweten over netcat!

Uiteindelijk hielden mijn zenuwen het niet meer, ik was immers een ongeduldige 17-jarige jongen. Terwijl ik opnieuw zag hoe het witte VNC-serverpictogram zwart werd, raakte ik gefrustreerd, opende de oorspronkelijke code die de berichtenwachtrij vulde en startte deze voor zijn ogen. Ik wachtte zelfs een paar seconden voordat ik op de Eindprocesknop drukte, gewoon om zeker te zijn dat hij het zag.

Als het indrukken van deze knop me nog niet volledig overtuigde dat het de moeite waard was, dan was zijn sprongetje van zijn fortress van monitoren om snel naar me toe te komen en me de kamer uit te zetten, dat was het zeker waard.

Uiteindelijk werd mijn toegang tot het netwerk voor twee weken verboden. Een eerlijke straf, dacht ik. Ongeveer drie weken later verdween de VNC-server uit de opstartscripts en verscheen nergens meer. Ik heb nooit geweten of mijn incident daar een rol in heeft gespeeld of niet, maar het heeft mijn plan voor een sprookjesachtige verrijking door mijn VNC-wapen aan onderdrukte studenten in computerzalen van hogescholen in het hele land te verkopen volledig verwoest.

Bron: habr.com

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers 🔥 Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster