Koderu cīņa: es pret to puisi ar VNC

No Å”ajā emuārā ir publicēti daudzi programmētāju stāsti. Man patÄ«k atcerēties savas vecās muļķības. Nu, Å”eit ir vēl viena tāda stāsta.

Es pirmo reizi ieinteresējos datoros, it Ä«paÅ”i programmēŔanā, kad man bija ap 11 gadiem. Pirmajā vidusskolas gadāolielāko daļu brÄ«vā laika es pavadÄ«ju ar savu C64, rakstot kodu Bāzē un vēlāk ar Ŕķērēm izgriežot sliktu kodu. Es nerunāju pa jokam, ar Ŕķērēm..

Pēc skolas (apmēram 16 gadu vecumā) britu bērni parasti dodas uz koledžu, kur izvēlas trÄ«s lÄ«dz četrus priekÅ”metus pirms uzņemÅ”anas universitātē. Ņemot vērā manu mÄ«lestÄ«bu pret bezkrāsainā kastes un magnetofona mājās, es nolēmu, ka studēt "Datorzinātnes" koledžā ir pareizā izvēle.

Kurss patika man vairāk, nekā es gaidīju; tur es pirmo reizi iepazinos ar Paskalu un Delfi.

Starplaikos starp nodarbÄ«bām studentiem bija iespēja strādāt pie jebkura brÄ«vā datora datoru zālē. Iedomājieties: milzÄ«ga telpa, kas paredzēta aptuveni simtam cilvēku, ar rindām galdu, pie kuriem ir datori - tādi, kur monitora atrodas uz sistēmas blokiem. PastāvÄ«gs ventilatoru ŔņākÅ”ana, peles bumbiņas bumbule pa galdiem, nepārtraucoties nevienā brÄ«dÄ«. Gaisā dÄ«vaina smarža, it kā 50-100 hormonālu pusaudžu periodiski pārmaiņus atdzesē simtiem Pentium III čipu.

Neskatoties uz veselības riskiem, man patika pasēdēt pie datora, kad izdevās brīva minūte.

Telpā dežurēja admins, vidēja auguma vÄ«rietis, kuru izvēlējās Å”ai lomai tādēļ, ka viņam bija neapdomÄ«ga vēlēŔanās kļūt par ļauno diktatoru. Es tā domāju. Dežurēt ir vājÅ” teikums, puisis tieŔām mÄ«lēja savu darbu. Viņam bija uzdots uzraudzÄ«t kārtÄ«bu, lai neviens nelietotu mācÄ«bu datoru kaut kam nevietā.

Un lÄ«dz Å”odienai man intuitÄ«vi Ŕķiet, ka admina prēmija tieÅ”i atkarÄ«ga no studentu skaita, kurus viņŔ pieÄ·ers un izsÅ«tÄ«s no datoru zāles. Esmu praktiski pārliecināts, ka Å”is puisis ātrāk atmaksāja savu hipotēku.

ViņŔ sēdēja tālākajā stÅ«rÄ« datora zālē pie stÅ«ra galda. Un varēja droÅ”i pieņemt, ka viņa auglÄ«gie monitori ir atraduÅ”i veidu vairoties ar apbrÄ«nojami Ä«su grÅ«tniecÄ«bas periodu — tik daudz viņu bija. Palika vienÄ«gi minēt, vai viņŔ tieŔām spēj sekot tiem visiem. Protams, es jokoju… es taču pieminēju, ka viņŔ ļoti nopietni izturas pret darbu?

Tajā laikā datora tÄ«kls strādāja ar Windows 2000. DrÄ«z es atklāju, ka katru reizi piesakoties sistēmā, palaižas skripts, kurā ir norādÄ«ts VNC servera palaiÅ”ana ar administratora kontu attālinātai piekļuvei darbvirsmai. Katra reize, kad Å”is čalis vēlējās sekot jums, viņŔ pieslēdzās tieÅ”i jÅ«su datoram un vēroja. Tas bija Å”ausmÄ«gi un, domājot par to tagad, visticamāk, pat nelikumÄ«gi.

Asinot zobus uz Basic un C64, tagad es rakstīju C un pat nedaudz C++. Tajā laikā es vēl biju ļoti aizrāvies ar D valodu, kas, manuprāt, laboja dažas C++ nepilnības.

Es parasti apmeklēju datora zāli, lai izlasītu kaut ko jaunu par D vai spēlētos ar Digital Mars D kompilatoru. Dažreiz atslēdzoties no domām par lielo D nākotni, es rakstīju kodu C, lai lauztu citas Win32 programmas, izmantojot to logu aprakstītājus.

Senajos laikos programmēŔanā Win32 loga aprakstÄ«tāja meklēŔana bija vissimplākais veids, kā lauzt citas programmas. AcÄ«mredzot visām programmām ar grafisko saskarni Windows bija logs, pat ja tas nebija redzams ekrānā. Uzrakstot programmu, lai iegÅ«tu cita procesa aprakstÄ«tāju (principā, atsauci uz to), jÅ«s varējāt sÅ«tÄ«t tam ziņas. Tas ļāva veikt dažas pamata operācijas, piemēram, slēpt/rādÄ«t programmas logu, kā arÄ« patieŔām forÅ”as lietas, piemēram, likt procesam ielādēt nejauÅ”u DLL savā atmiņas telpā un sākt izpildÄ«t kodu. Pēc DLL injekcijas sākās viss interesantākais.

Pirmajās pusotrajās mēneÅ”os Å”is detektÄ«vs mani Ä«paÅ”i netraucēja, viņŔ pieslēdzās VNC serverim manā datorā tikai vienu vai divas reizes. Bet viens konkrēts seans, iespējams, pamodināja viņā interesi. Es rakstÄ«ju kādu kodu C valodā, lai slēptu Minesweeper logus (nerādot tos), lai bÅ«tu vieglāk spēlēt klasē, un tad pamanÄ«ju, ka baltais VNC ikona sistēmā ir pārvērtusies melnā. Tas nozÄ«mēja, ka viņŔ tagad mani novēro.

Es turpināju kodēt kā parasti, cenÅ”oties viņam nepievērst uzmanÄ«bu. Tikmēr dators sāka konkrēti palēnināties, cenÅ”oties nodot maksimālo kadru skaitu uz vienu no neskaitāmajiem monitoriem istabas stÅ«rÄ«. Windows gandrÄ«z vairs nereaģēja, kad mana pacietÄ«ba beidzās, es iznācu no sistēmas un pabeidzu Å”odienas darbus.

Nākamajos apmeklējumos datoru zālē Kolumbo gandrīz katru reizi izrādīja dzīvīgu interesi par to, ko es daru. Apmēram pēc ceturtā apmeklējuma es nolēmu: ar to kaut kas jādara.

AtzÄ«stu, ka saprātÄ«gs, racionāls cilvēks varēja vienkārÅ”i uzdot Å”o jautājumu tieÅ”i viņam vai viņa vadÄ«tājam. Tomēr es vienmēr biju pakļāvies kārdinājumam un ātri pārliecināju sevi izvēlēties pilnÄ«gi citu stratēģiju.

— Tu neko nespēsi izdarÄ«t bez Ŕī VNC servera! — mierÄ«gi un noteikti teicu sev vairākas reizes.

Vajadzēja nogalināt VNC.

Es sāku ienākt datoru zālē ar lielām studentu grupām un sēdēt pēc iespējas tālāk no stūra ar monitora. Kādu laiku tas strādāja un deva man nedaudz laika ideju pārbaudei.

Mana pirmā mēģinājums, es domāju, jÅ«s piekritÄ«siet, bija diezgan vāja. UzklikŔķinot ar peles labo pogu uz VNC ikonas sistēmā, es redzēju izvēlni ar burtiem E-X-I-T. Diemžēl burti bija uzrakstÄ«ti pelēkā kontÅ«ru tekstā. Administrators bija atslēdzis izvēlni 'Iziet' caur grupas politikas redaktoru. Es mēģināju nogalināt procesu no Uzdevumu pārvaldnieka, bet, protams, tas man bija neredzams, jo darbojās zem citas, privilēģētākas konta. Nekas nesanāca.

VNC serveris darbojas uz TCP porta 5900, es atcerējos. Mans nākamais plāns bija nosÅ«tÄ«t uz Å”o portu bojātas paketes, lai to saktu.

Vismaz dažas dienas es analizēju protokolu, sūtot uz portu 5900 dažādas pareizi strukturētas versijas, cerot, ka tas sabojāsies. Galu galā, tas arī neizdevās.

Es jau biju sācis domāt, ka nevarēŔu atbrÄ«voties no Ŕīs lietas, kad pēkŔņi mani izgaismoja: tur taču jābÅ«t logam! Jā, tas jāparāda. VarbÅ«t tajā bÅ«s laba, sulÄ«ga pogu "Izslēgt", ko es varētu izmantot!

Es palaižos savu gandrÄ«z pilnÄ«gi izstrādāto C kodu, lai atrastu cita procesa galvenā loga identificētāju — un tieŔām atradu VNC. Es jutos pacilāts, kad pirksti ierakstÄ«ja WM_SHOWWINDOW. Uzminiet, ko es redzēju priekŔā sev?

Neko!

Tagad man palika interesanti… tam bija logs, bet tas ignorēja manus ziņojumus. Es divreiz pārbaudÄ«ju savu kodu, lai pārliecinātos, ka tas darbojas. Es to pārbaudÄ«ju ar dažiem citiem procesiem, un tas strādāja lieliski. Es mēģināju sÅ«tÄ«t VNC logam citus ziņojumus, un joprojām nekas.

Un tad mani atkal izgaismoja!

Paldies ļoti resnajam grāmatā Čārlzam Petzoldam es rÅ«pÄ«gi izpētÄ«ju, kā Win32 procesi darbojas iekŔējos sistēmā. Katram Win32 lietojumprogrammai ir loga un "ziņojumu rinda". Lietotāja mijiedarbÄ«bas izsauktie ziņojumi, kā arÄ« ziņojumi, ko sÅ«ta pati Windows, nonāk rindā, un pati lietojumprogramma izlemj, kā tos apstrādāt.

Tas pats par sevi nav Ä«paÅ”i interesanti. Bet, kad es sapratu, ka pietiekami liela neapstrādātu ziņojumu rinda kalpo kā heuristika, lai iejauktos sasaluŔā procesā Windows Process Manager, es apdāvināju visu ar serotonu.

Nezaudējot nevienu sekundi, es atgriezos pie sava C koda, gatavojoties nosÅ«tÄ«t vēl vienu ziņojumu galvenajā VNC logā WM_SHOWWINDOW. Ciklā. Mūžībā. Tā kā daudzi ziņojumi WM_SHOWWINDOW, par kuriem es tagad zināju, VNC centÄ«sies pilnÄ«bā ignorēt… uz saviem riska.

Es sakompilēju un palaidu 4 KB visbrÄ«vākā koda manā dzÄ«vē. Aptuveni pēc trÄ«s sekundēm Windows paziņoja, ka process vncserver.exe neatbild, un izteica piedāvājumu, no kura es vienkārÅ”i nevarēju atteikties:

Vai vēlaties pabeigt Å”o procesu?

Pirdī, JĀ!

AtzīŔos, ka atlikuŔo dienu es biju pārāk apmierināts ar sevi.

Pēc vairāku stundu pārdomām par savu jauno superspēku, es nolēmu, kā to izmantot. VienkārÅ”i nogalināt sesiju viņa acu priekŔā bija pārāk vienkārÅ”i. Man bija labāka ideja — pilnÄ«bā izzust.

Pēc cīņā ar programmēŔanas soketiem es sapratu, ka varu uzrakstÄ«t kodu, kas darÄ«s divas lietas. Pirmkārt, tas aizņems nesen atbrÄ«voto TCP portu 5900, ko iepriekÅ” aizņēma neizglÄ«tota VNC servera procesa dēļ. Pēc tam tas izveidos jaunu TCP savienojumu ar norādÄ«tā datora VNC serveri. Kods vienkārÅ”i pārsÅ«tÄ«s visus datus starp diviem soketiem, un Kolumbo domās, ka pieslēdzas man, kamēr patiesÄ«bā pieslēgsies pilnÄ«gi citam VNC serverim.

Mans kods darbosies kā slepens tilts starp mani un kādu citu nabaga dvēseli pēc manas izvēles. Tas bija lieliski.

Es uzreiz sāku rakstÄ«t savu viltojoÅ”o VNC tiltu. Kolumbo vairākas reizes pieslēdzās man, bet es turpināju programmēt viņa acu priekŔā. Es nonācu pie secinājuma, ka viņam nav ne jausmas par manu rÄ«cÄ«bu, lai gan es rakstÄ«ju acÄ«mredzamas lietas, piemēram, portu numurus un komentārus, piemēram, // ŠŸŃ€Š¾Ń‰Š°Š¹, Š¶ŃƒŃ‚ŠŗŠøŠ¹ шпион VNC.

Pēc pāris dienām es nespēju panākt, lai kods darbotos pareizi. Vēl sliktāk, es praktiski nepārtraukti strādāju ar melno VNC symbolu uz sistēmas informācijas joslas. Kamēr tas bija pieslēgts, es nevarēju atbrīvot portu, lai pārbaudītu savu kodu.

Ja es tobrīd būtu zinājis par netcat!

Galu galā nervi neizturēja, es tomēr biju nepacietÄ«gs 17 gadus vecs puisis. Atkal vērojot, kā baltais VNC servera simbols kļūst melns, es apnikumu pilns atvēru sākotnējo kodu, kas aizpildÄ«ja ziņojumu rindu, un palaidu viņa acu priekŔā. Es pat uzgaidÄ«ju pāris sekundes pirms nospieÅ”anas End Process, vienkārÅ”i lai pārliecinātos, ka viņŔ to redzēja.

Ja nospiežot Å”o pogu vēl nebija pilnÄ«bā pārliecinājusi mani, ka tas bija tā vērts, tad viņa lēciens no saviem monitoriem, lai ātri pieietu pie manis un izvadÄ«tu mani no istabas, noteikti bija tā vērts.

Galu galā man tika aizliegts piekļūt tÄ«klam uz divām nedēļām. Es domāju, ka tas ir taisnÄ«gs sods. Aptuveni pēc trim nedēļām VNC serveris pazuda no startēŔanas skriptiem un vairs nekur nerādÄ«jās. Es nenoskaidroju, vai mans incidents spēlēja kādu lomu tajā, bet tas pilnÄ«bā sagrāva manu plānu par pasakainu bagātÄ«bu, pārdodot savu VNC ierÄ«ci apspiestiem studentiem visā valsts kolledžās.

Avots: habr.com

Iegādājieties uzticamu tÄ«mekļa hostingu ar DDoS aizsardzÄ«bu, VPS VDS serveriem šŸ”„ Iegādājieties uzticamu tÄ«mekļa hostingu ar DDoS aizsardzÄ«bu, VPS VDS serveriem | ProHoster