Coder Battle: Me vs. Dy VNC Guy

В dizze blog Hiel wat programmeurferhalen binne publisearre. Ik mei graach oantinken oan myn âlde domme dingen. No, hjir is noch sa'n ferhaal.

Ik waard earst ynteressearre yn kompjûters, benammen programmearring, doe't ik sawat 11 jier âld wie. Oan it begjin fan de middelbere skoalle bоIk brocht it measte fan myn frije tiid troch oan myn C64 te tinken en BASIC te skriuwen, en dan de minne koade út te snijen mei in skjirre. Ik meitsje gjin grapke, skjirre.

Nei skoalle (om de leeftiid fan 16 hinne) geane Britske bern meastentiids nei it kolleezje, dêr't se der foar kieze om trije of fjouwer fakken te studearjen foardat se nei de universiteit geane. Sjoen myn leafde foar de beige doaze en taperecorder thús, besleat ik dat it studearjen fan "kompjûterwittenskip" op 'e kolleezje de goede kar wie.

Ik genoaten fan de kursus mear as ik ferwachte; dêr moete ik Pascal en Delphi foar it earst.

Yn de pauzes tusken de lessen koene learlingen op elke frije masine yn de kompjûterkeamer wurkje. Stel jo foar: in enoarme keamer, ûntwurpen foar sa'n hûndert minsken, mei rigen tafels fol mei masines, lykas dy wêr't de monitor op 'e systeemienheid stiet. De fans bromje hieltyd, mûzeballen sûze op 'e tafels, stopje gjin sekonde. D'r is in frjemde geur yn 'e loft, as soe 50-100 hormonale teenagers periodyk feroarje om hûnderten Pentium III-chips te koelen.

Nettsjinsteande de sûnensrisiko's siet ik graach achter de kompjûter as ik in frije minút hie.

De tsjinstbehearder yn 'e keamer wie in koarte man fan middelbere leeftyd dy't foar dizze rol keazen waard fanwegen syn ûnfoldwaande winsk om in kweade diktator te wurden. Ik tink it. Op plicht is in understatement; de man hâldde echt fan syn baan. Hy krige de opdracht om de oarder te hâlden sadat gjinien de skoalkompjûter brûkte foar wat net geskikt is.

Oant hjoed de dei fertelt myn yntuysje my dat de bonus fan 'e admin direkt ôfhinklik wie fan it oantal studinten dat hy mei de hân fong en út' e kompjûterkeamer begeliede. Ik bin der wis fan dat dizze keardel syn hypoteek betiid betelle hat.

Hy siet yn de fierste hoeke fan de kompjûterkeamer oan in hoektafel. En it wie feilich om oan te nimmen dat syn fruchtberensmonitors in manier fûn hienen om te reprodusearjen mei in yndrukwekkend koarte draachtiid, d'r wiene safolle fan har. Men koe him mar ôffreegje oft er echt tiid hie om se allegearre by te hâlden. Fansels, ik meitsje in grapke... hie ik al sein dat er syn wurk tige serieus naam?

Op dat stuit wie it kompjûternetwurk Windows 2000. Ik ûntduts al gau dat elke kear as ik ynlogd op it systeem, in skript waard lansearre dat spesifisearre begjint de VNC tsjinner fan de administrator account foar tagong op ôfstân ta it buroblêd. Elke kear as dizze keardel jo woe bispiede, soe hy direkt ferbine mei jo masine en sjen. It wie griezelig, en no't ik der oer tink, wierskynlik yllegaal.

Nei't ik myn tosken snije op BASIC en C64, skreau ik no yn C en sels in bytsje C ++. Ik wie doe noch tige ynteressearre yn 'e D-taal, dy't guon fan 'e tekoarten fan C++, sa't ik it doe seach, korrizjearre.

Ik gie eartiids de kompjûterkeamer yn om wat nijs te lêzen op D of boartsje mei de kompilator fan Digital Mars D. Soms, wylst ik ôfleid waard fan it tinken oer de grutte takomst fan D, skreau ik C-koade om oare Win32-programma's fia har finster te hacken hânfetten.

Yn 'e goede âlde dagen fan Win32-programmearring wie it finen fan in finsterhandgreep de maklikste metoade om oare programma's te hacken. Fansels hiene alle GUI-programma's op Windows in finster, sels as it net op it skerm ferskynde. Troch in programma te skriuwen om in handgreep werom te heljen nei in oar proses (yn essinsje in keppeling nei it), kinne jo berjochten nei it stjoere. Dit koe guon basisoperaasjes mooglik meitsje lykas ferbergjen / sjen litte fan in programmafinster, lykas ek echt coole dingen lykas it twingen fan in proses om in willekeurige DLL yn syn ûnthâldromte te laden en koade te begjinnen. Nei de DLL-ynjeksje begon de wille.

Yn 'e earste en in heale moanne hindere dizze detektive my net folle; hy ferbûn mar ien of twa kear mei de VNC-tsjinner op myn masine. Mar ien bepaalde sesje kin syn belangstelling hawwe wekker. Ik skreau wat C-koade om Minesweeper-finsters te ferbergjen (sûnder se te sluten) om it makliker te meitsjen om te spyljen yn 'e klasse, doe't ik fernaam dat it wite VNC-ikoan yn it systeemfak swart waard. Dit betsjutte dat hy my no seach.

Ik bleau kodearjen lykas gewoanlik, besykje him te negearjen. Underwilens begon de masine te fertrage, besykje de maksimale framerate te stjoeren nei ien fan 'e ûntelbere monitors yn' e hoeke fan 'e keamer. Windows stoppe hast te reagearjen, doe't myn geduld oprûn, haw ik my útlogd en klear foar de dei.

By de folgjende besites oan de kompjûterkeamer hie Colombo hast alle kearen belangstelling foar wat ik die. Nei sawat de fjirde kear besleat ik: hjir moat ik wat oan dwaan.

Ik jou ta dat in ridlike, rasjonele persoan dizze kwestje gewoan direkt mei him of syn baas koe oproppe. Ik joech lykwols altyd ta oan ferlieding en spruts mysels gau oer in folslein oare strategy oan te nimmen.

- Jo kinne neat dwaan sûnder dizze VNC-tsjinner! - Ik fertelde mysels in pear kear kalm en beslissend.

It wie nedich om VNC te deadzjen.

Ik begon mei grutte groepen studinten de kompjûterkeamer yn te gean en sa fier mooglik fan 'e hoeke te sitten mei de monitors. Dit wurke in skoft en joech my wat tiid om ideeën te testen.

Myn earste poging, ik tink dat jo it iens binne, wie frij swak. Rjochts-klikke op it VNC ikoan yn it systeemfak, Ik seach in menu mei de magyske letters EXIT. Spitigernôch waarden de brieven skreaun yn grize omtrektekst. De behearder hat it menu-item "Exit" útskeakele fia de Group Policy Editor. Ik besocht te deadzjen it proses fan de Task Manager, mar fansels wie it ûnsichtber foar my omdat it rûn ûnder in oare, mear befoarrjochte account. It slagge net.

De VNC-tsjinner rint op TCP-poarte 5900, tink ik. Myn folgjende plan wie om beskeadige pakketten nei dizze poarte te stjoeren om it te crashen.

Ik brocht op syn minst in pear dagen mei it protokol oan it tinken, en stjoerde ferskate foarmen fan goed strukturearre crap nei haven 5900 en hope dat it soe brekke. Dat slagge úteinlik ek net.

Ik bigoun al to tinken, dat ik dit ding net kwyt kinne soe, doe't it my ynienen trochgie: dêr moat in rút wêze! Wy moatte it sjen litte. Miskien sil it in moaie sappige "Mute" knop hawwe dy't ik goed brûke kin!

Ik rûn myn no hast perfekte C-koade om de handgreep te finen nei it haadfinster fan in oar proses - en wis genôch, VNC waard fûn. Ik fielde my ynspirearre doe't myn fingers typten WM_SHOWWINDOW. Besykje te rieden wat ik foar my seach?

Niets

No wie ik nijsgjirrich ... it hie in finster, mar it negearre myn berjochten. Ik haw myn koade dûbel kontrolearre om te soargjen dat it wurket. Testte it op ferskate oare prosessen en it wurke geweldich. Ik besocht in ferstjoere oare berjochten nei de VNC finster, en noch altyd neat.

En doe kaam it my wer troch!

Mei tank oan de hiel dik it boek Charles Petzold I studearre soarchfâldich hoe't Win32-prosessen yn it systeem wurkje. Elke Win32-applikaasje hat in finster en ek in "berjochtwachtrige". Berjochten trigger troch brûkersynteraksje, lykas berjochten ferstjoerd troch Windows sels, komme yn in wachtrige, en de applikaasje sels beslút hoe't se se ferwurkje.

Net hiel nijsgjirrich op himsels. Mar doe't ik realisearre dat in grut genôch net-ferwurke berjochtwachtrige fungearre as in heuristyk foar Window Process Manager om yn te gripen yn in hingproses, begon ik suver serotonine te switten.

Sûnder in sekonde te fergriemen, kaam ik werom nei myn C-koade, taret my op om in oar berjocht nei it haad VNC-finster te stjoeren WM_SHOWWINDOW. Yn in syklus. Ivich. Dus, in protte berjochten. WM_SHOWWINDOW, dy't ik no wist dat VNC soe besykje folslein te negearjen ... op syn gefaar.

Ik kompilearre en rûn 4KB fan 'e meast frijheidsleafde koade fan myn libben. Nei sawat trije sekonden rapportearre Windows dat it proses vncserver.ехе antwurdet net, en makke in oanbod dat ik gewoan net koe wegerje:

Wolle jo dit proses foltôgje?

HEL JA!

Lit my tajaan dat ik de rest fan de dei net tefreden wie mei mysels.

Nei in pear oeren bestege oan it fertarren fan myn nije superpower, besleat ik hoe't ik it soe brûke. It wie te maklik om de sesje krekt foar him te deadzjen. Ik hie in better idee - folslein ferdwine.

neidat fjoerdoop mei socket programmearring Ik realisearre dat ik koe skriuwe koade dat soe dwaan twa dingen. It sil earst de nij befrijde TCP-poarte 5900 besette, earder beset troch it clueless VNC-tsjinnerproses. Dan sil it in nije TCP-ferbining meitsje mei de VNC-tsjinner fan 'e oantsjutte masine. De koade sil gewoan proxy alle gegevens tusken de twa sockets, en Columbo sil tinke dat er ferbine mei my, doe't yn feite hy sil ferbine mei in folslein oare VNC tsjinner.

Myn koade sil fungearje as in geheime brêge tusken my en in oare earme siel fan myn kar. It wie prachtich.

Ik begon fuortendaliks myn falske VNC-brêge te skriuwen. Columbo ferbûn ferskate kearen mei my, mar ik bleau te programmearjen foar him. Ik kaam ta de konklúzje dat hy gjin idee hie wat ik die, ek al skreau ik fanselssprekkende dingen lykas havennûmers en opmerkings lykas // Прощай, жуткий шпион VNC.

Nei in pear dagen koe ik de koade net goed wurkje. Om dingen slimmer te meitsjen, wurke ik hast kontinu mei it swarte VNC-ikoan yn it systeemfak. Wylst it ferbûn wie, koe ik de haven net loslitte om myn koade te testen.

As ik it doe wist netcat!

Op it lêst joegen myn senuwen wei; ik wie ommers in ûngeduldige 17-jierrige man. Watching de wite VNC tsjinner ikoan draaie swart wer, Ik freaked út, iepene de orizjinele koade dy't befolke de berjocht wachtrige, en rûn it foar syn eagen. Ik wachte sels in pear sekonden foardat ik klikte End Process, krekt om te soargjen dat er it seach.

As it drukken op dy knop my net folslein oertsjûge dat it it wurdich wie, dan sprong er fan efter syn festing fan monitors om my gau te benaderjen en my de keamer út te lieden.

As gefolch, ik waard ferbean út it netwurk foar twa wiken. In earlike straf, tocht ik. Nei sawat trije wiken ferdwûn de VNC-tsjinner út bootskripts en ferskynde noait earne oars. Ik wist noait oft myn ynsidint hjirby in rol spile of net, mar it ferneatige myn plan om fabulously ryk te wurden troch myn VNC-pistoal te ferkeapjen oan depressive studinten yn kolleezje-kompjûtersalen yn it heule lân.

Boarne: www.habr.com

Add a comment