No 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. .
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 ÄÄ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 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
