Koderkamp: mig imod den fyr med VNC

I denne blog Der er blevet offentliggjort mange programmeringshistorier. Jeg kan godt lide at mindes mine gamle dumheder. Nå, her er endnu en sådan historie.

Jeg blev først interesseret i computere, især programmering, da jeg var omkring 11 år gammel. I starten af ​​mellemskolen brugte jegfleste afdet meste af min fritid på at lege med min C64 og skrive i BASIC, og så klippede jeg dårlig kode ud med saks. Jeg spøger ikke, med saks..

Efter skolen (i alderen omkring 16 år) går britiske børn normalt på college, hvor de vælger tre til fire fag at studere, inden de går på universitetet. Givet min kærlighed til den beige kasse og båndoptageren derhjemme, besluttede jeg, at 'informatik' i college var det rigtige valg.

Kursus var sjovere, end jeg havde forventet; der introducerede jeg for første gang Pascal og Delphi.

I pauserne mellem lektionerne kunne studerende arbejde ved enhver ledig maskine i computerhallen. Forestil dig: et kæmpe rum, der var designet til omkring hundrede personer, med rækker af borde dækket med maskiner, som dem, hvor skærmen står oven på systemboksen. Den konstante summen af blæsere, musens kugler der ruller over bordene, uden pause. Luften havde en mærkelig lugt, som om 50-100 hormonudskillende teenagere skiftedes til at køle hundrede Pentium III chips.

På trods af sundhedsrisiciene kunne jeg godt lide at sidde ved computeren, når der endelig var et minut ledigt.

Der var en administrator tilstede, en lav mellemaldrene mand, der var blevet valgt til denne rolle på grund af sin ukuelige trang til at blive en ond diktator. Det mener jeg. Tilstedeværende er næsten en underdrivelse, fyren elskede virkelig sit arbejde. Han havde ansvaret for at sørge for, at ingen brugte undervisningscomputeren til noget upassende.

Og selv i dag fortæller min intuition mig, at administratorens bonus direkte afhænger af antallet af studerende, han fanger og smider ud af computerhallen. Jeg er næsten sikker på, at denne fyr forhåndsbetalte sit realkreditlån.

Han sad i det fjerne hjørne af computerlaben ved et hjørnebord. Og man kunne med sikkerhed antage, at hans frugtbare skærme havde fundet en måde at reproducere sig på med en imponerende kort graviditetsperiode — der var så mange af dem. Det var kun tilbage at gætte på, om han virkelig kunne følge med dem alle. Selvfølgelig, jeg spøger... nævnte jeg ikke, at han tog sit arbejde meget alvorligt?

På det tidspunkt kørte computerens netværk under Windows 2000. Snart opdagede jeg, at der blev kørt et script ved hver indlogning, som startede VNC-serveren med administratorkontoen til fjernadgang til skrivebordet. Hver gang denne fyr ville holde øje med dig, tilsluttede han sig direkte til din maskine og observerede. Det var creepy, og hvis man tænker over det nu, var det nok ulovligt.

Efter at have skærpet mine færdigheder på Basic og C64, skrev jeg nu i C og endda lidt i C++. På det tidspunkt var jeg også meget begejstret for D-sproget, som rettede nogle af C++’s mangler, som jeg så dem dengang.

Jeg besøgte normalt computerlabben for at læse noget nyt om D eller lege med Digital Mars D-kompilatoren. Nogle gange, når jeg blev distraheret fra tankerne om D's store fremtid, skrev jeg kode i C for at hacke andre Win32-programmer via deres vinduesbeskrivelser.

I de gode gamle dage med programmering i Win32 var det at finde vinduesbeskrivelsen den nemmeste metode til at hacke andre programmer. Ganske vist havde alle programmer med grafisk brugerflade i Windows et vindue, selvom det ikke blev vist på skærmen. Ved at skrive et program til at udtrække beskrivelsen af en anden proces (i bund og grund en reference til den) kunne du sende den beskeder. Det gjorde det muligt at udføre nogle grundlæggende operationer, som at skjule/udvise et programvindue, samt virkelig seje ting, som at få processen til at indlæse en vilkårlig DLL i dens hukommelsesrum og begynde at køre kode. Efter DLL-injektionen begyndte det virkelig spændende.

I de første halvanden måned voldte denne detektiv mig ikke særligt mange problemer, han tilsluttede sig VNC-serveren på min maskine kun en eller to gange. Men en bestemt session vækkede sandsynligvis hans interesse. Jeg skrev noget kode i C for at skjule vinduerne i Minesweeper (uden at lukke dem), så det ville være lettere at spille i klassen, og pludselig bemærkede jeg, at det hvide VNC-ikon i systembakken var blevet sort. Det betød, at han nu overvågede mig.

Jeg fortsatte med at kode som sædvanligt og prøvede at ignorere ham. Imens begyndte maskinen at hakke helt vildt, mens den forsøgte at sende den maksimale billedfrekvens til en af de utallige skærme i hjørnet af rummet. Windows reagerede næsten ikke, og da min tålmodighed brast, loggede jeg ud og afsluttede for dagen.

Under de følgende besøg i computerlabben viste Columbo næsten hver gang levende interesse for, hvad jeg lavede. Omkring fjerde gang besluttede jeg, at der måtte gøres noget ved det.

Jeg forestiller mig, at en fornuftig og rationel person kunne have rejst dette spørgsmål direkte med ham eller hans chef. Men jeg gav altid efter for fristelsen og hurtigt overbeviste mig selv om at vælge en helt anden strategi.

"Du kan ikke gøre noget uden denne VNC-server!" sagde jeg koldt og beslutsomt til mig selv flere gange.

Jeg var nødt til at dræbe VNC.

Jeg begyndte at gå ind i computerlabben med store grupper af studerende og satte mig så langt væk fra hjørnet med skærmene som muligt. I noget tid fungerede det, og det gav mig lidt tid til at teste mine idéer.

Mit første forsøg, vil jeg mene, var rimeligt svagt. Jeg højreklikkede på VNC-ikonet i systembakken og så en menu med de magiske bogstaver E-X-I-T. Desværre var bogstaverne skrevet i grå konturstil. Administratoren havde deaktiveret "Log ud"-menuen gennem gruppepolitikseditoren. Jeg forsøgte at dræbe processen fra Jobliste, men selvfølgelig var den usynlig for mig, da den kørte under en anden, mere privilegeret konto. Intet fungerede.

VNC-serveren kører på TCP-port 5900, mindedes jeg. Min næste plan var at sende korrupte pakker til denne port for at få den til at hænge.

I spent at least a few days analyzing the protocol, sending various forms of well-structured data to port 5900 and hoping it would crash. In the end, that didn't work either.

I had already started to think that I wouldn't be able to get rid of this thing when it suddenly struck me: there must be a window! I need to display it. Maybe there will be a nice juicy 'Turn Off' button in there that I can put to good use!

I launched my nearly perfect C code to find the handle of the main window of another process — and I actually found VNC. I felt elated when my fingers typed WM_SHOWWINDOW. Can you guess what I saw in front of me?

Nothing!

Now I was curious… it had a window, but it ignored my messages. I double-checked my code to ensure it was working. I tested it on several other processes, and it worked great. I tried sending other messages to the VNC window, and still nothing.

And then it struck me again!

Thanks to the very thick the book Charles Petzold, I studied how Win32 processes work within the system. Every Win32 application has a window, as well as a 'message queue'. Messages triggered by user interactions, as well as messages sent by Windows itself, go into the queue, and the application decides how to handle them.

Not too interesting in itself. But when I realized that a sufficiently large unprocessed message queue serves as a heuristic for intervening in a hung process from the Window Process Manager, I was drenched in pure serotonin.

Without wasting a second, I returned to my C code, ready to send another message to the main VNC window WM_SHOWWINDOW. In a loop. Forever. So, many messages WM_SHOWWINDOW, which I now knew would be completely ignored by VNC… at its own risk.

I compiled and ran 4 KB of the most freedom-loving code of my life. About three seconds later, Windows reported that the process vncserver.exe was not responding, and made a suggestion I simply couldn't refuse:

Do you want to end this process?

Hell yes, I do!

Let me confess, I was insufferably pleased with myself for the rest of the day.

Efter flere timers bearbejdning af min nye superkraft besluttede jeg, hvordan jeg ville bruge den. Bare at dræbe sessionen lige foran ham var for let. Jeg havde en bedre idé – at forsvinde helt.

Efter kampe med socket-programmering Jeg indså, at jeg kunne skrive kode, der ville gøre to ting. Først ville den tage en nyligt frigivet TCP-port 5900, der tidligere var optaget af en uvidende VNC-serverproces. Derefter ville den oprette en ny TCP-forbindelse til VNC-serveren på den givne maskine. Koden ville blot proxy alle data mellem de to sockets, og Columbo ville tro, at han forbindelse til mig, mens han i virkeligheden ville forbinde til en helt anden VNC-server.

Min kode ville fungere som en hemmelig bro mellem mig og en anden stakkels sjæl, jeg valgte. Det var vidunderligt.

Jeg begyndte straks at skrive min falske VNC-bro. Columbo tilsluttede sig mig flere gange, men jeg fortsatte med at programmere foran ham. Jeg kom til den konklusion, at han overhovedet ikke havde nogen anelse om mine handlinger, selvom jeg skrev åbenlyse ting som portnumre og kommentarer som // Прощай, жуткий шпион VNC.

Efter et par dage kunne jeg på ingen måde få koden til at fungere korrekt. Hvad værre var, jeg arbejdede næsten uafbrudt med det sorte VNC-ikon i systembakken. Så længe det var tilsluttet, kunne jeg ikke frigive porten for at teste min kode.

Hvis jeg dengang havde kendt om netcat!

Til sidst fik mine nerver ikke, jeg var trods alt en utålmodig 17-årig dreng. Mens jeg igen så, hvordan det hvide VNC-serverikon blev sort, blev jeg frustreret, åbnede den oprindelige kode, der fyldte meddelelsesqueue, og kørte den foran ham. Jeg ventede endda et par sekunder, før jeg trykkede End Process, bare for at sikre mig, at han så det.

Hvis trykningen på denne knap ikke allerede havde fået mig til at føle, at det var det værd, så var hans spring fra sin kraftige monitor for hurtigt at komme hen til mig og smide mig ud af rummet, bestemt det værd.

Til slut blev jeg nægtet adgang til nettet i to uger. Et retfærdigt straf, tænkte jeg. Cirka tre uger senere forsvandt VNC-serveren fra opstartsskripterne og dukkede aldrig op igen. Jeg fandt aldrig ud af, om min hændelse spillede nogen rolle i dette eller ej, men den ødelagde fuldstændigt min plan om eventyrlig berigelse ved at sælge min VNC-pistol til undertrykte studerende i computerlab i hele landet.

Kilde: habr.com

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster