Coder Battle: Me vs That VNC Guy

В hierdie blog Heelwat programmeerverhale is gepubliseer. Ek hou daarvan om oor my ou dom goed te dink. Wel, hier is nog so 'n storie.

Ek het die eerste keer in rekenaars, veral programmering, begin belangstel toe ek omtrent 11 jaar oud was. Aan die begin van hoërskool bоEk het die meeste van my vrye tyd spandeer om aan my C64 te peuter en BASIC te skryf, en dan die slegte kode met 'n skêr uit te knip. Ek maak nie 'n grap nie, skêr.

Ná skool (sowat die ouderdom van 16) gaan Britse kinders gewoonlik kollege toe, waar hulle kies om drie of vier vakke te studeer voordat hulle universiteit toe gaan. Gegewe my liefde vir die beige boks en bandopnemer by die huis, het ek besluit om "rekenaarwetenskap" op universiteit te studeer die regte keuse was.

Ek het die kursus meer geniet as wat ek verwag het; daar het ek Pascal en Delphi die eerste keer ontmoet.

Tydens pouses tussen klasse kon studente op enige gratis masjien in die rekenaarlokaal werk. Stel jou voor: 'n groot vertrek, ontwerp vir ongeveer honderd mense, met rye tafels gevul met masjiene, soos dié waar die monitor op die stelseleenheid staan. Die ondersteuners neurie gedurig, muisballe gons op die tafels, hou nie vir 'n sekonde op nie. Daar is 'n vreemde reuk in die lug, asof 50-100 hormonale tieners periodiek verander om honderde Pentium III-skyfies af te koel.

Ten spyte van die gesondheidsrisiko's, het ek daarvan gehou om by die rekenaar te sit wanneer ek 'n vrye minuut gehad het.

Die administrateur aan diens in die kamer was 'n kort, middeljarige man wat vir hierdie rol gekies is weens sy onversadigbare begeerte om 'n bose diktator te word. Ek glo so. Aan diens is 'n understatement; die ou was baie lief vir sy werk. Hy is getaak om orde te hou sodat niemand die skoolrekenaar vir enigiets onvanpas gebruik nie.

Tot vandag toe sê my intuïsie vir my dat die admin se bonus direk afgehang het van die aantal studente wat hy aan die hand gevang en uit die rekenaarkamer begelei het. Ek is redelik seker hierdie ou het sy verband vroeg afbetaal.

Hy het in die verste hoek van die rekenaarkamer by 'n hoektafel gesit. En dit was veilig om te aanvaar dat sy vrugbaarheidsmonitors 'n manier gevind het om voort te plant met 'n indrukwekkende kort dragtigheidsperiode, daar was so baie van hulle. ’n Mens kon net wonder of hy werklik tyd gehad het om hulle almal by te hou. Natuurlik, ek grap...het ek genoem dat hy sy werk baie ernstig opgeneem het?

Op daardie tydstip het die rekenaarnetwerk Windows 2000 laat loop. Ek het gou ontdek dat elke keer as ek by die stelsel aangemeld het, 'n skrip geloods is wat spesifiseer om die VNC-bediener vanaf die administrateurrekening te begin vir afstandtoegang tot die lessenaar. Wanneer hierdie ou op jou wou spioeneer, het hy direk aan jou masjien gekoppel en gekyk. Dit was creepy, en nou dat ek daaraan dink, waarskynlik onwettig.

Nadat ek my tande op BASIC en C64 gesny het, het ek nou in C geskryf en selfs 'n bietjie C++. Ek was toe nog baie geïnteresseerd in die D-taal, wat van die tekortkominge van C++, soos ek dit toe gesien het, reggestel het.

Ek het in die rekenaarkamer ingegaan om iets nuuts op D te lees of met die Digital Mars D-samesteller te speel. Soms, terwyl ek afgelei was van die dink aan die groot toekoms van D, het ek C-kode geskryf om ander Win32-programme deur hul venster te hack handvatsels.

In die goeie ou dae van Win32-programmering was die vind van 'n vensterhandvatsel die maklikste metode om ander programme te hack. Dit is duidelik dat alle GUI-programme op Windows 'n venster gehad het, selfs al het dit nie op die skerm verskyn nie. Deur 'n program te skryf om 'n handvatsel na 'n ander proses te herwin (in wese 'n skakel daarna), kan jy boodskappe daarna stuur. Dit het 'n paar basiese bewerkings moontlik gemaak soos om 'n programvenster weg te steek / te wys, sowel as baie oulike dinge soos om 'n proses te dwing om 'n arbitrêre DLL in sy geheuespasie te laai en kode te begin uitvoer. Na die DLL-inspuiting het die pret begin.

In die eerste maand en 'n half het hierdie speurder my nie veel gepla nie; dit het net een of twee keer aan die VNC-bediener op my masjien gekoppel. Maar een spesifieke sessie het waarskynlik sy belangstelling geprikkel. Ek was besig om 'n C-kode te skryf om Minesweeper-vensters te versteek (sonder om dit toe te maak) om dit makliker te maak om in die klas te speel, toe ek agterkom dat die wit VNC-ikoon in die system tray swart geword het. Dit het beteken dat hy my nou dophou.

Ek het soos gewoonlik aangehou om te kodeer en hom probeer ignoreer. Intussen het die masjien begin stadiger word en probeer om die maksimum raamtempo na een van die ontelbare monitors in die hoek van die kamer oor te dra. Windows het amper opgehou reageer, toe my geduld opraak, het ek afgemeld en klaargemaak vir die dag.

Met daaropvolgende besoeke aan die rekenaarlokaal het Colombo byna elke keer baie belanggestel in wat ek doen. Ná omtrent die vierde keer het ek besluit: Ek moet iets hieraan doen.

Ek gee toe dat 'n redelike, rasionele persoon hierdie kwessie eenvoudig direk met hom of sy baas kon geopper het. Ek het egter altyd aan die versoeking toegegee en myself vinnig oorgepraat om 'n heeltemal ander strategie aan te neem.

- Jy kan niks doen sonder hierdie VNC-bediener nie! — Ek het 'n paar keer kalm en beslis vir myself gesê.

Dit was nodig om VNC dood te maak.

Ek het met groot groepe studente in die rekenaarkamer begin ingaan en so ver as moontlik van die hoek af met die monitors gesit. Dit het vir 'n rukkie gewerk en het my tyd gegee om idees te toets.

My eerste poging, ek dink jy sal saamstem, was redelik swak. Deur met die rechtermuisknop op die VNC-ikoon in die system tray te klik, sien ek 'n spyskaart met die magiese letters EXIT. Ongelukkig is die briewe in grys buitelynteks geskryf. Die administrateur het die "Verlaat"-kieslys-item deur die Groepbeleidredigeerder gedeaktiveer. Ek het probeer om die proses van die Taakbestuurder dood te maak, maar dit was natuurlik vir my onsigbaar omdat dit onder 'n ander, meer bevoorregte rekening loop. Dit het nie uitgewerk nie.

Die VNC-bediener loop op TCP-poort 5900, het ek onthou. My volgende plan was om korrupte pakkies na hierdie poort te stuur om dit te laat crash.

Ek het ten minste 'n paar dae aan die protokol gepeuter, verskillende vorme van goed gestruktureerde snert na poort 5900 gestuur en gehoop dat dit sou breek. Op die ou end het dit ook nie gewerk nie.

Ek het al begin dink dat ek nie van hierdie ding ontslae sal kan raak nie, toe kom dit skielik tot my deur: daar moet 'n venster daar wees! Ons moet dit vertoon. Miskien sal dit 'n lekker sappige "Mute"-knoppie hê wat ek baie kan gebruik!

Ek het my nou amper perfekte C-kode gehardloop om die handvatsel na die hoofvenster van 'n ander proses te vind - en seker genoeg, VNC is gevind. Ek het geïnspireer gevoel toe my vingers getik het WM_SHOWWINDOW. Probeer raai wat ek voor my gesien het?

Niks!

Nou was ek nuuskierig ... dit het 'n venster gehad, maar dit ignoreer my boodskappe. Ek het my kode dubbel gekontroleer om seker te maak dit werk. Het dit op verskeie ander prosesse getoets en dit het uitstekend gewerk. Ek het probeer om ander boodskappe na die VNC-venster te stuur, en steeds niks.

En toe dring dit weer tot my deur!

Danksy die baie dik die boek Charles Petzold Ek het noukeurig bestudeer hoe Win32-prosesse binne die stelsel werk. Elke Win32-toepassing het 'n venster sowel as 'n "boodskap-tou". Boodskappe wat deur gebruikerinteraksie geaktiveer word, sowel as boodskappe wat deur Windows self gestuur word, kom in 'n tou aan, en die toepassing besluit self hoe om dit te verwerk.

Op sigself nie baie interessant nie. Maar toe ek besef dat 'n groot genoeg onverwerkte boodskapwaglys as 'n heuristiek opgetree het vir Window Process Manager om in te gryp in 'n hangproses, het ek suiwer serotonien begin sweet.

Sonder om 'n sekonde te mors, het ek na my C-kode teruggekeer en voorberei om nog 'n boodskap na die hoof-VNC-venster te stuur WM_SHOWWINDOW. In 'n siklus. Ewige. So, baie boodskappe. WM_SHOWWINDOW, wat ek nou geweet het VNC sou probeer om heeltemal te ignoreer ... op sy gevaar.

Ek het 4KB van die mees vryheid-liefhebbende kode van my lewe saamgestel en bestuur. Na ongeveer drie sekondes het Windows gerapporteer dat die proses vncserver.ехе antwoord nie, en het 'n aanbod gemaak wat ek eenvoudig nie kon weier nie:

Wil jy hierdie proses voltooi?

HEL JA!

Laat ek erken dat ek vir die res van die dag ondraaglik tevrede was met myself.

Nadat ek 'n paar uur spandeer het om my nuwe superkrag te verteer, het ek besluit hoe ek dit sou gebruik. Dit was te maklik om net die sessie reg voor hom dood te maak. Ek het 'n beter idee gehad - om heeltemal te verdwyn.

Na vuurdoop met sok-programmering Ek het besef dat ek kode kan skryf wat twee dinge sal doen. Dit sal eers die nuut vrygestelde TCP-poort 5900 beset, wat voorheen deur die ideelose VNC-bedienerproses beset is. Dan sal dit 'n nuwe TCP-verbinding met die VNC-bediener van die gespesifiseerde masjien skep. Die kode sal eenvoudig al die data tussen die twee voetstukke instaan, en Columbo sal dink dat hy aan my koppel, terwyl hy in werklikheid aan 'n heeltemal ander VNC-bediener sal koppel.

My kode sal dien as 'n geheime brug tussen my en 'n ander arm siel van my keuse. Dit was wonderlik.

Ek het dadelik my vals VNC-brug begin skryf. Columbo het verskeie kere met my geskakel, maar ek het aangehou om voor hom te programmeer. Ek het tot die gevolgtrekking gekom dat hy geen idee het wat ek doen nie, al het ek voor die hand liggende dinge soos poortnommers en opmerkings soos // Прощай, жуткий шпион VNC.

Na 'n paar dae kon ek nie die kode reg laat werk nie. Om sake te vererger, het ek amper aanhoudend gewerk met die swart VNC-ikoon in die system tray. Terwyl dit gekoppel was, kon ek nie die poort vrystel om my kode te toets nie.

As ek toe geweet het netcat!

Op die ou end het my senuwees meegegee; ek was immers 'n ongeduldige 17-jarige ou. Toe ek kyk hoe die wit VNC-bedienerikoon weer swart word, het ek geskrik, die oorspronklike kode oopgemaak wat die boodskapwaglys gevul het en dit voor sy oë laat loop. Ek het selfs 'n paar sekondes gewag voordat ek geklik het End Process, net om seker te maak hy het dit gesien.

As die druk van daardie knoppie my nie heeltemal oortuig het dat dit die moeite werd is nie, dan het hy wat van agter sy vesting van monitors gespring het om my vinnig te nader en my uit die kamer uit te lei beslis.

Gevolglik is ek vir twee weke uit die netwerk verban. ’n Regverdige straf, het ek gedink. Na ongeveer drie weke het die VNC-bediener van opstartskrifte verdwyn en het nooit nêrens anders verskyn nie. Ek het nooit geweet of my voorval enige rol hierin gespeel het of nie, maar dit het my plan om fantasties ryk te word heeltemal verwoes deur my VNC-geweer aan depressiewe studente in universiteitsrekenaarsale regoor die land te verkoop.

Bron: will.com

Voeg 'n opmerking