Kodētāju cīņa: Es pret Å”o VNC puisi

Š’ Å”is emuārs Ir publicēts diezgan daudz programmētāju pasaku. Man patÄ«k atcerēties savas vecās stulbās lietas. Nu, lÅ«k, vēl viens Ŕāds stāsts.

Pirmo reizi par datoriem, Ä«paÅ”i programmēŔanu, interesējos apmēram 11 gadu vecumā. Vidusskolas sākumā bоLielāko daļu sava brÄ«vā laika pavadÄ«ju, čalojoties ar savu C64 un rakstot BASIC, pēc tam ar Ŕķērēm izgriežot slikto kodu. Es nejokoju, Ŕķēres.

Pēc skolas (apmēram 16 gadu vecumā) britu bērni parasti dodas uz koledžu, kur izvēlas apgÅ«t trÄ«s vai četrus priekÅ”metus pirms iestāŔanās universitātē. Ņemot vērā manu mÄ«lestÄ«bu pret smilÅ”krāsas kastÄ«ti un magnetofonu mājās, es nolēmu, ka studēt ā€œdatorzinātnesā€ koledžā bija pareizā izvēle.

Kurss man patika vairāk, nekā biju gaidījis; tur es pirmo reizi satiku Paskālu un Delfu.

Stundu starpbrīžos skolēni varēja strādāt pie jebkuras brÄ«vas datorklases iekārtas. Iedomājieties: milzÄ«ga telpa, kas paredzēta apmēram simts cilvēku, ar galdu rindām, kas piepildÄ«tas ar maŔīnām, piemēram, tām, kur monitors stāv uz sistēmas bloka. Fani nemitÄ«gi dungojas, uz galdiem dÅ«c peļu bumbiņas, neapstājoties ne uz sekundi. Gaisā jÅ«tama dÄ«vaina smaka, it kā 50-100 hormonālie pusaudži periodiski mainÄ«tos, lai atdzesētu simtiem Pentium III mikroshēmu.

Neskatoties uz veselības apdraudējumiem, man patika sēdēt pie datora, kad bija brīva minūte.

Telpā dežurēja admins maza auguma, pusmūža vÄ«rietis, kurÅ” Å”ai lomai tika izvēlēts viņa neremdināmās vēlmes dēļ kļūt par ļaunu diktatoru. Es domāju, ka tā. Dežūras ir par zemu; puisis patieŔām mÄ«lēja savu darbu. Viņam tika uzdots uzturēt kārtÄ«bu, lai neviens neizmantotu skolas datoru kaut kam nepiemērotam.

LÄ«dz pat Å”ai dienai mana intuÄ«cija man saka, ka administratora bonuss bija tieÅ”i atkarÄ«gs no skolēnu skaita, ko viņŔ noķēra aiz rokas un pavadÄ«ja no datorklases. Esmu diezgan pārliecināts, ka Å”is puisis agri samaksāja savu hipotēku.

ViņŔ sēdēja datorklases tālākajā stÅ«rÄ« pie stÅ«ra galda. Un varēja droÅ”i pieņemt, ka viņa auglÄ«bas monitori bija atraduÅ”i veidu, kā vairoties ar iespaidÄ«gi Ä«su grÅ«snÄ«bas periodu, to bija tik daudz. Varēja tikai brÄ«nÄ«ties, vai viņam tieŔām bija laiks tiem visiem izsekot. Es, protams, jokoju... vai es pieminēju, ka viņŔ savu darbu uztvēra ļoti nopietni?

TobrÄ«d datortÄ«klā darbojās operētājsistēma Windows 2000. DrÄ«z vien atklāju, ka katru reizi, piesakoties sistēmā, tika palaists skripts, kas noteica VNC servera startēŔanu no administratora konta attālinātai piekļuvei darbvirsmai. Ikreiz, kad Å”is puisis gribēja jÅ«s izspiegot, viņŔ pieslēdzās tieÅ”i jÅ«su maŔīnai un skatÄ«jās. Tas bija rāpojoÅ”i, un tagad, padomājot par to, iespējams, nelikumÄ«gi.

Izgriezis zobus uz BASIC un C64, tagad rakstīju C un pat nedaudz C++. Toreiz mani vēl ļoti interesēja D valoda, kas izlaboja dažus C++ trūkumus, kā toreiz redzēju.

Es mēdzu iet uz datoru istabu, lai lasītu kaut ko jaunu uz D vai spēlētu ar Digital Mars D kompilatoru. Dažreiz, kamēr es biju atrauts no domām par lielo D nākotni, es uzrakstīju C kodu, lai uzlauztu citas Win32 programmas caur to logu. rokturi.

Vecajos labajos Win32 programmēŔanas laikos loga roktura atraÅ”ana bija vienkārŔākais veids, kā uzlauzt citas programmas. AcÄ«mredzot visām GUI programmām operētājsistēmā Windows bija logs, pat ja tas neparādās ekrānā. Rakstot programmu cita procesa roktura izgūŔanai (bÅ«tÄ«bā saiti uz to), varat tam nosÅ«tÄ«t ziņojumus. Tas ļāva veikt dažas pamata darbÄ«bas, piemēram, paslēpt/parādÄ«t programmas logu, kā arÄ« veikt patieŔām lieliskas lietas, piemēram, piespiest procesu ielādēt patvaļīgu DLL savā atmiņas vietā un sākt izpildÄ«t kodu. Pēc DLL injekcijas sākās jautrÄ«ba.

Pirmajā pusotra mēnesÄ« Å”is detektÄ«vs mani Ä«paÅ”i netraucēja, tikai vienu vai divas reizes tas pieslēdzās manas maŔīnas VNC serverim. Bet viena konkrēta sesija, iespējams, izraisÄ«ja viņa interesi. RakstÄ«ju kaut kādu C kodu, lai paslēptu Minesweeper logus (neaizverot tos), lai bÅ«tu vieglāk spēlēt klasē, kad pamanÄ«ju, ka sistēmas teknē baltā VNC ikona ir kļuvusi melna. Tas nozÄ«mēja, ka viņŔ tagad mani vēro.

Es turpināju kodēt kā parasti, cenÅ”oties viņu ignorēt. Tikmēr maŔīna sāka palēnināties, cenÅ”oties pārraidÄ«t maksimālo kadru ātrumu vienam no neskaitāmajiem monitoriem istabas stÅ«rÄ«. Windows gandrÄ«z pārstāja reaģēt, kad mana pacietÄ«ba beidzās, es atteicos un pabeidzu dienu.

Nākamajos datorklases apmeklējumos Kolombo gandrīz katru reizi izrādīja lielu interesi par to, ko es daru. Pēc apmēram ceturtās reizes es nolēmu: man kaut kas jādara lietas labā.

Pieļauju, ka saprātÄ«gs, racionāls cilvēks varēja vienkārÅ”i izvirzÄ«t Å”o jautājumu tieÅ”i viņam vai savam priekÅ”niekam. Tomēr es vienmēr ļāvos kārdinājumam un ātri pierunāju sevi pieņemt pavisam citu stratēģiju.

- Bez Ŕī VNC servera neko nevar izdarÄ«t! — vairākas reizes mierÄ«gi un izlēmÄ«gi sev teicu.

Vajadzēja nogalināt VNC.

Sāku iet datorklasē ar lielām skolēnu grupām un sēdēt pēc iespējas tālāk no stūra ar monitoriem. Tas kādu laiku darbojās un deva man laiku ideju pārbaudei.

Mans pirmais mēģinājums, es domāju, ka jÅ«s piekrÄ«tat, bija diezgan vājÅ”. Ar peles labo pogu noklikŔķinot uz VNC ikonas sistēmas teknē, es ieraudzÄ«ju izvēlni ar burvju burtiem EXIT. Diemžēl burti bija rakstÄ«ti pelēkā kontÅ«ras tekstā. Administrators ir atspējojis izvēlnes vienumu "Iziet", izmantojot grupas politikas redaktoru. Es mēģināju apturēt procesu, izmantojot uzdevumu pārvaldnieku, taču, protams, tas man bija neredzams, jo tas darbojās ar citu, priviliģētāku kontu. Tas neizdevās.

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

Es pavadīju vismaz dažas dienas, strādājot pie protokola, sūtot dažādas labi strukturētas muļķības uz portu 5900 un cerot, ka tas sabojāsies. Beigās arī tas neizdevās.

Es jau sāku domāt, ka nevarēŔu no Ŕīs lietas tikt vaļā, kad pēkŔņi man ieŔāvās prātā: tur taču ir jābÅ«t logam! Mums tas ir jāparāda. VarbÅ«t tai bÅ«s jauka sulÄ«ga poga ā€œIzslēgt skaņuā€, ko varēŔu lieliski izmantot!

Palaidu savu tagad gandrÄ«z ideālo C kodu, lai atrastu cita procesa galvenā loga rokturi — un, protams, VNC tika atrasts. Es jutos iedvesmots, kad ar pirkstiem rakstÄ«ju WM_SHOWWINDOW. Mēģiniet uzminēt, ko es redzēju sev priekŔā?

Nekas!

Tagad es biju ziņkārīgs... tam bija logs, bet tas ignorēja manus ziņojumus. Es vēlreiz pārbaudīju savu kodu, lai pārliecinātos, ka tas darbojas. To pārbaudīja vairākos citos procesos, un tas darbojās lieliski. Es mēģināju nosūtīt citus ziņojumus uz VNC logu, bet joprojām nekas.

Un tad tas man atkal atausa!

Pateicoties ļoti biezajam grāmata Čārlzs Petzolds Es rÅ«pÄ«gi izpētÄ«ju, kā sistēmā darbojas Win32 procesi. Katrai Win32 lietojumprogrammai ir logs, kā arÄ« "ziņojumu rinda". Ziņojumi, ko aktivizē lietotāja mijiedarbÄ«ba, kā arÄ« paÅ”as Windows nosÅ«tÄ«tie ziņojumi nonāk rindā, un pati lietojumprogramma izlemj, kā tos apstrādāt.

Pats par sevi nav Ä«paÅ”i interesanti. Bet, kad sapratu, ka pietiekami liela neapstrādātu ziņojumu rinda darbojās kā heiristisks lÄ«dzeklis, lai Window Process Manager varētu iejaukties nokarenā procesā, es sāku svÄ«st tÄ«ra serotonÄ«na.

Netērējot ne mirkli, es atgriezos pie sava C koda, gatavojoties nosūtīt vēl vienu ziņojumu galvenajam VNC logam WM_SHOWWINDOW. Ciklā. Mūžīgs. Tātad, daudz ziņojumu. WM_SHOWWINDOW, ko es tagad zināju, ka VNC mēģinās pilnībā ignorēt... uz savām briesmām.

Es apkopoju un palaidu 4 KB sava mūža visvairāk brÄ«vÄ«bu mÄ«loŔā koda. Pēc aptuveni trim sekundēm Windows ziņoja, ka process vncserver.ехе neatbild un izteica piedāvājumu, no kura vienkārÅ”i nevarēju atteikties:

Vai vēlaties pabeigt Å”o procesu?

ELLĒ JĀ!

Ļaujiet man atzīt, ka atlikuŔo dienas daļu es biju necieŔami apmierināts ar sevi.

Pēc dažām stundām, kas pavadÄ«tas, gremojot savu jauno lielvaru, es nolēmu, kā es to izmantoÅ”u. Bija pārāk viegli vienkārÅ”i nogalināt sesiju tieÅ”i viņa acu priekŔā. Man bija labāka doma – pazust pavisam.

Pēc ugunskristÄ«bas ar ligzdas programmēŔanu Es sapratu, ka varu uzrakstÄ«t kodu, kas darÄ«tu divas lietas. Vispirms tas aizņems tikko atbrÄ«voto TCP portu 5900, ko iepriekÅ” aizņēma bezjēdzÄ«gais VNC servera process. Pēc tam tas izveidos jaunu TCP savienojumu ar norādÄ«tās maŔīnas VNC serveri. Kods vienkārÅ”i pārsÅ«tÄ«s visus datus starp abām ligzdām, un Kolumbo domās, ka viņŔ izveido savienojumu ar mani, lai gan patiesÄ«bā viņŔ izveidos savienojumu ar pilnÄ«gi citu VNC serveri.

Mans kods darbosies kā slepens tilts starp mani un kādu citu manu izvēlētu nabaga dvēseli. Tas bija brÄ«niŔķīgi.

Es uzreiz sāku rakstÄ«t savu viltoto VNC tiltu. Kolumbo pieslēdzās man vairākas reizes, bet es turpināju programmēt viņa priekŔā. Es nonācu pie secinājuma, ka viņam nav ne jausmas, ko es daru, 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 nevarēju panākt, lai kods darbotos pareizi. Lai situāciju padarītu vēl ļaunāku, es gandrīz nepārtraukti strādāju ar melno VNC ikonu sistēmas teknē. Kamēr tas bija savienots, es nevarēju atbrīvot portu, lai pārbaudītu savu kodu.

Ja es toreiz būtu zinājis netcat!

Beigās mani nervi padevās, galu galā es biju nepacietÄ«gs 17 gadus vecs puisis. Vērojot, kā baltā VNC servera ikona atkal kļūst melna, es satrÅ«kos, atvēru sākotnējo kodu, kas aizpildÄ«ja ziņojumu rindu, un paskrēju to viņa acu priekŔā. Es pat nogaidÄ«ju dažas sekundes, pirms noklikŔķināju End Process, lai pārliecinātos, ka viņŔ to redzēja.

Ja Ŕīs pogas nospieÅ”ana mani pilnÄ«bā nepārliecināja, ka tas ir tā vērts, tad viņŔ, kurÅ” izlēca no sava monitoru cietokŔņa, ātri pietuvojās man un izved mani no istabas.

Tā rezultātā man uz divām nedēļām tika aizliegts izmantot tÄ«klu. TaisnÄ«gs sods, es domāju. Pēc aptuveni trim nedēļām VNC serveris pazuda no sāknēŔanas skriptiem un nekad netika parādÄ«ts nekur citur. Es nekad nezināju, vai manam incidentam bija kāda nozÄ«me Å”ajā jautājumā, bet tas pilnÄ«bā izjauca manu plānu kļūt pasakaini bagātam, pārdodot savu VNC ieroci depresÄ«viem studentiem koledžas datorzālēs visā valstÄ«.

Avots: www.habr.com

Pievieno komentāru