Coder Battle: Me vs That VNC Guy

В am bloga seo Chaidh grunn sgeulachdan prògramadair fhoillseachadh. Is toil leam a bhith a’ cuimhneachadh air na seann rudan gòrach a th’ agam. Uill, seo sgeulachd eile mar sin.

Ghabh mi ùidh an toiseach ann an coimpiutairean, gu sònraichte prògramadh, nuair a bha mi mu 11 bliadhna a dh'aois. Aig toiseach na h-àrd-sgoile bоChuir mi seachad a’ mhòr-chuid den ùine shaor agam a’ tinkering leis an C64 agam agus a’ sgrìobhadh BASIC, an uairsin a’ gearradh a-mach an droch chòd le siosar. Chan eil mi a’ magadh, siosar.

Às deidh na sgoile (timcheall air aois 16), bidh clann Breatannach mar as trice a’ dol don cholaiste, far an roghnaich iad trì no ceithir cuspairean a sgrùdadh mus tèid iad dhan oilthigh. Leis gu bheil gaol agam air a’ bhogsa beige agus an inneal-teip aig an taigh, cho-dhùin mi gur e sgrùdadh “saidheans coimpiutaireachd” sa cholaiste an roghainn cheart.

Chòrd an cùrsa rium na bu mhotha na bha mi an dùil; an sin choinnich mi an toiseach ri Pascal agus Delphi.

Aig amannan fois eadar clasaichean, dh’ fhaodadh oileanaich obrachadh air inneal an-asgaidh sam bith anns an t-seòmar coimpiutair. Smaoinich: seòmar mòr, air a dhealbhadh airson timcheall air ceud neach, le sreathan de bhùird air an lìonadh le innealan, mar an fheadhainn far a bheil an monitor na sheasamh air aonad an t-siostaim. Bidh an luchd-leantainn an-còmhnaidh a’ crathadh, bidh bàlaichean luchag a’ sèideadh air na bùird, gun a bhith a’ stad airson diog. Tha fàileadh neònach san adhar, mar gum biodh deugairean hormonail 50-100 ag atharrachadh bho àm gu àm gus na ceudan de chips Pentium III a fhuarachadh.

A dh’aindeoin nan cunnartan slàinte, bu toil leam suidhe aig a’ choimpiutair nuair a bha mionaid an-asgaidh agam.

B’ e fear goirid, meadhan-aois a bh’ anns an rianaire a bha air dleasdanas san t-seòmar a chaidh a thaghadh airson na dreuchd seo air sgàth a mhiann neo-sheasmhach a bhith na dheachdaire olc. Tha mi creidsinn gu bheil. Is e fo-aithris a th’ ann an dleasdanas; chòrd an obair aige gu mòr ris a’ ghille. Bha e mar dhleastanas air òrdugh a chumail gus nach robh duine a’ cleachdadh coimpiutair na sgoile airson rud neo-iomchaidh.

Chun an latha an-diugh, tha an intuition agam ag innse dhomh gu robh bònas an rianaire gu dìreach an urra ris an àireamh de dh’ oileanaich a ghlac e leis an làimh agus a thug e a-mach às an t-seòmar coimpiutair. Tha mi gu math cinnteach gun do phàigh am fear seo dheth a mhorgaids tràth.

Shuidh e anns an oisean as fhaide air falbh den t-seòmar coimpiutaireachd aig bòrd oisean. Agus bha e sàbhailte a bhith den bheachd gu robh na sgrùdairean torachais aige air dòigh a lorg airson ath-riochdachadh le ùine gluasad gu math goirid, bha uimhir dhiubh ann. Cha b’ urrainn dha ach faighneachd an robh tìde aige sùil a chumail orra uile. Gu dearbh, tha mi a’ magadh... an tug mi iomradh air gun tug e aire dha-rìribh don obair aige?

Aig an àm sin, bha an lìonra coimpiutair a 'ruith Windows 2000. Cha b 'fhada gus an d' fhuair mi a-mach gun deach sgriobt a chuir air bhog a h-uile uair a rinn mi logadh a-steach don t-siostam a bha a 'sònrachadh tòiseachadh air an fhrithealaiche VNC bhon chunntas rianadair airson ruigsinneachd iomallach air an deasg. Nuair a bha an duine seo airson brath a ghabhail ort, cheangail e gu dìreach ris an inneal agad agus faire. Bha e eagallach, agus a-nis gu bheil mi a’ smaoineachadh mu dheidhinn, is dòcha mì-laghail.

An dèidh m ’fhiaclan a ghearradh air BASIC agus C64, sgrìobh mi a-nis ann an C agus eadhon beagan C ++. Aig an àm sin, bha ùidh mhòr agam fhathast anns a’ chànan D, a cheartaich cuid de na h-easbhaidhean aig C ++, mar a chunnaic mi an uairsin.

B’ àbhaist dhomh a dhol a-steach don t-seòmar coimpiutair gus rudeigin ùr a leughadh air D no cluich leis an inneal-cruinneachaidh Digital Mars D. Aig amannan, fhad ‘s a bha mi air mo tharraing bho bhith a’ smaoineachadh mu àm ri teachd D, sgrìobh mi còd C gus prògraman Win32 eile a sheacadh tron ​​​​uinneig aca làmhan.

Anns na seann làithean de phrògramadh Win32, b’ e lorg làmh uinneig an dòigh as fhasa air prògraman eile a sheacadh. Gu follaiseach, bha uinneag aig a h-uile prògram GUI air Windows, eadhon ged nach do nochd e air an sgrion. Le bhith a’ sgrìobhadh prògram gus làmh fhaighinn air ais gu pròiseas eile (gu dearbh ceangal ris), dh’ fhaodadh tu teachdaireachdan a chuir thuige. Leig seo le cuid de dh’ obraichean bunaiteach leithid a bhith a’ falach / a’ sealltainn uinneag prògram, a bharrachd air rudan fìor fhionnar mar a bhith a’ toirt air pròiseas DLL neo-riaghailteach a luchdachadh a-steach don àite cuimhne aige agus tòiseachadh air còd a chuir an gnìomh. Às deidh an in-stealladh DLL, thòisich an spòrs.

Anns a ’chiad mhìos gu leth, cha do chuir an lorgaire seo mòran dragh orm; cha do cheangail e ris an t-seirbheisiche VNC air an inneal agam ach uair no dhà. Ach is dòcha gu bheil aon seisean sònraichte air ùidh a thogail. Bha mi a’ sgrìobhadh cuid de chòd C gus uinneagan Minesweeper fhalach (gun a bhith gan dùnadh) gus a dhèanamh nas fhasa a chluich sa chlas, nuair a mhothaich mi gu robh an ìomhaigh geal VNC ann an treidhe an t-siostaim air tionndadh dubh. Bha seo a 'ciallachadh gun robh e a-nis a' coimhead orm.

Lean mi a’ còdadh mar as àbhaist, a’ feuchainn ri dearmad a dhèanamh air. Aig an aon àm, thòisich an inneal a 'fàs nas slaodaiche, a' feuchainn ris an ìre frèam as àirde a ghluasad gu aon de na sgrùdairean gun àireamh ann an oisean an t-seòmair. Cha mhòr nach do sguir Windows a bhith a’ freagairt, nuair a ruith m’ fhoighidinn a-mach, rinn mi logadh a-mach agus chrìochnaich mi airson an latha.

Nuair a thadhail e air an t-seòmar coimpiutair, ghabh Colombo ùidh mhòr anns na bha mi a’ dèanamh cha mhòr a h-uile turas. Às deidh timcheall air a’ cheathramh uair, cho-dhùin mi: feumaidh mi rudeigin a dhèanamh mu dheidhinn seo.

Tha mi ag aideachadh gum faodadh neach reusanta, reusanta a bhith air a’ chùis seo a thogail gu dìreach leis fhèin no ris a’ cheannard aige. Ach, bha mi an-còmhnaidh a’ toirt a-steach buaireadh agus gu sgiobalta bhruidhinn mi mu bhith a’ gabhail ri ro-innleachd gu tur eadar-dhealaichte.

- Chan urrainn dhut dad a dhèanamh às aonais an t-seirbheisiche VNC seo! - Dh'innis mi dhomh fhìn grunn thursan gu socair agus gu cinnteach.

Bha e riatanach VNC a mharbhadh.

Thòisich mi a’ dol a-steach don t-seòmar coimpiutair le buidhnean mòra de dh’ oileanaich agus a’ suidhe cho fada air falbh bhon oisean leis na sgrùdairean sa ghabhas. Dh’obraich seo airson greis agus thug e beagan ùine dhomh airson beachdan fheuchainn.

Bha a’ chiad oidhirp agam, tha mi a’ smaoineachadh gun aontaich thu, gu math lag. Le briogadh deas air an ìomhaigh VNC ann an treidhe an t-siostaim, chunnaic mi clàr leis na litrichean draoidheachd EXIT. Gu mì-fhortanach, chaidh na litrichean a sgrìobhadh ann an teacsa glas. Tha an rianaire air an nì clàr-taice “Fach a-mach” a chiorramachadh tro Dheasaiche Poileasaidh na Buidhne. Dh'fheuch mi ris a 'phròiseas a mharbhadh bhon Mhanaidsear Gnìomha, ach gu dearbh bha e do-fhaicsinneach dhomh oir bha e a' ruith fo chunntas eadar-dhealaichte, le barrachd sochair. Cha do dh'obraich e a-mach.

Bidh am frithealaiche VNC a’ ruith air port TCP 5900, chuimhnich mi. B’ e an ath phlana a bh’ agam pacaidean truaillidh a chuir chun phort seo gus an tuit iad.

Chuir mi seachad co-dhiù beagan làithean a’ tinkering leis a’ phròtacal, a’ cur diofar sheòrsan crap le deagh structar gu port 5900 agus an dòchas gum briseadh e. Aig a’ cheann thall, cha do dh’obraich sin idir.

Bha mi mar-thà a 'tòiseachadh a' smaoineachadh nach b 'urrainn dhomh faighinn cuidhteas an rud seo, nuair a thàinig e gu h-obann orm: feumaidh uinneag a bhith ann! Feumaidh sinn a thaisbeanadh. Is dòcha gum bi putan snog “Mute” ann as urrainn dhomh a chuir gu feum!

Ruith mi an còd C a bha cha mhòr foirfe agam gus an làmh a lorg gu prìomh uinneag pròiseas eile - agus cinnteach gu leòr, chaidh VNC a lorg. Bha mi a’ faireachdainn brosnachail nuair a bha mo chorragan a’ taipeadh WM_SHOWWINDOW. Feuch ri tomhas dè a chunnaic mi romham?

Gun dad!

A-nis bha mi fiosrach ... bha uinneag ann, ach bha e a’ seachnadh mo theachdaireachdan. Rinn mi sgrùdadh dùbailte air a’ chòd agam gus dèanamh cinnteach gu bheil e ag obair. Rinn mi deuchainn air grunn phròiseasan eile agus dh’ obraich e gu math. Dh’ fheuch mi ri teachdaireachdan eile a chuir gu uinneag VNC, agus gun dad fhathast.

Agus an uairsin dh'èirich e orm a-rithist!

Mòran taing dha tiugh an leabhar Teàrlach Petzold Rinn mi sgrùdadh gu faiceallach air mar a tha pròiseasan Win32 ag obair taobh a-staigh an t-siostaim. Tha uinneag aig a h-uile tagradh Win32 a bharrachd air “ciudha teachdaireachd”. Bidh teachdaireachdan air an adhbhrachadh le eadar-obrachadh luchd-cleachdaidh, a bharrachd air teachdaireachdan a chuir Windows fhèin a-steach, a’ ruighinn ciudha, agus bidh an aplacaid fhèin a’ co-dhùnadh mar a làimhsicheas tu iad.

Chan eil e gu math inntinneach ann fhèin. Ach nuair a thuig mi gu robh ciudha teachdaireachd mòr gu leòr gun phròiseas ag obair mar heuristic airson Manaidsear Pròiseas uinneig a dhol an sàs ann am pròiseas crochte, thòisich mi a’ fallas serotonin fìor-ghlan.

Gun a bhith a’ caitheamh diog, thill mi chun chòd C agam, ag ullachadh airson teachdaireachd eile a chuir gu prìomh uinneag VNC WM_SHOWWINDOW. Ann an cearcall. sìorraidh. Mar sin, tòrr teachdaireachdan. WM_SHOWWINDOW, rud a bha fios agam a-nis gum feuchadh VNC ri dearmad gu tur... ann an cunnart.

Chuir mi ri chèile agus ruith mi 4KB den chòd as gràdhaiche de mo bheatha. Às deidh timcheall air trì diogan, dh ’innis Windows gun robh am pròiseas vncserver.ехе nach freagair, agus rinn mi tairgse nach b’urrainn mi a dhiùltadh:

A bheil thu airson am pròiseas seo a chrìochnachadh?

EILEAN THA!

Leig leam aideachadh gun robh mi mì-fhulangach toilichte leam fhìn airson a 'chòrr den latha.

Às deidh beagan uairean a thìde a chuir seachad a’ cnàmhadh mo chumhachd mòr ùr, cho-dhùin mi mar a chleachdas mi e. Bha e ro fhurasta an seisean a mharbhadh dìreach air a bheulaibh. Bha beachd nas fheàrr agam - a dhol à sealladh gu tur.

an dèidh baisteadh teine ​​le prògramadh socaid Thuig mi gum b’ urrainn dhomh còd a sgrìobhadh a dhèanadh dà rud. Gabhaidh e a-steach an toiseach am port TCP 5900 a chaidh a shaoradh às ùr, a bha roimhe seo leis a’ phròiseas frithealaiche VNC gun chiall. An uairsin cruthaichidh e ceangal TCP ùr ri frithealaiche VNC an inneil ainmichte. Bidh an còd dìreach a’ proxy an dàta gu lèir eadar an dà socaid, agus bidh Columbo a’ smaoineachadh gu bheil e a’ ceangal rium, nuair a bhios e gu dearbh a’ ceangal ri frithealaiche VNC gu tur eadar-dhealaichte.

Bidh mo chòd mar dhrochaid dhìomhair eadar mise agus anam bochd eile a thagh mi. Bha e mìorbhaileach.

Thòisich mi sa bhad a’ sgrìobhadh mo dhrochaid VNC meallta. Cheangail Columbo rium grunn thursan, ach lean mi a’ prògramadh air a bheulaibh. Thàinig mi chun cho-dhùnadh nach robh fios aige dè bha mi a’ dèanamh, eadhon ged a sgrìobh mi rudan follaiseach leithid àireamhan puirt agus beachdan mar // Прощай, жуткий шпион VNC.

Às deidh latha no dhà cha b’ urrainn dhomh an còd fhaighinn airson obrachadh ceart. Gus cùisean a dhèanamh nas miosa, bha mi ag obair cha mhòr leantainneach leis an ìomhaigh dubh VNC ann an treidhe an t-siostaim. Fhad ‘s a bha e ceangailte, cha b’ urrainn dhomh am port a leigeil ma sgaoil gus mo chòd fheuchainn.

Nam biodh fios agam an uairsin netcat!

Mu dheireadh, leig mo nerves seachad; às deidh a h-uile càil, bha mi nam ghille mì-fhoighidneach 17-bliadhna. A’ coimhead air ìomhaigh an t-seirbheisiche VNC geal a’ tionndadh dubh a-rithist, dh’ fhuasgail mi a-mach, dh’ fhosgail mi an còd tùsail anns an robh ciudha na teachdaireachd, agus ruith mi air beulaibh a shùilean. Dh'fheitheamh mi fiù 's diog no dhà mus cliog mi End Process, dìreach airson dèanamh cinnteach gum faca e e.

Mura tug putadh air a’ phutan sin làn chreidsinn dhomh gum b’ fhiach e, leum e bho chùl a dhaingneach sgrùdairean gus a thighinn thugam gu sgiobalta agus mo thoirt a-mach às an t-seòmar gu cinnteach.

Mar thoradh air an sin, chaidh mo thoirmeasg bhon lìonra airson dà sheachdain. Peanas cothromach, shaoil ​​​​mi. Às deidh timcheall air trì seachdainean, chaidh am frithealaiche VNC à sealladh bho sgriobtaichean bròg agus cha do nochd e a-riamh an àite sam bith eile. Cha robh fios agam a-riamh an robh pàirt sam bith aig an tachartas agam ann an seo no nach robh, ach mhill e gu tur mo phlana airson a bhith beairteach le bhith a’ reic mo ghunna VNC ri oileanaich dubhach ann an tallaichean coimpiutair colaiste air feadh na dùthcha.

Source: www.habr.com

Cuir beachd ann