Coder Battle: Aniga vs. Guy VNC

Π’ blog this Waxoogaa sheeko-barnaamij ah ayaa la daabacay. Waxaan jeclahay in aan dib u xasuusto waxyaalihii hore ee nacasnimada ahaa. Hagaag, halkan waa sheeko kale oo noocaas ah.

Markii ugu horreysay waxaan xiiseeyay kombuyuutarrada, gaar ahaan barnaamijyada, anigoo abbaaraha 11 jir ah. Bilawga dugsiga sare bΠΎWaqtigeyga firaaqada badana waxaan ku qaatay in aan C64 ku tinkersado oo aan qoro AASAASIGA AH, ka dibna koodka xun maqas ku gooyay. Kaftan maayo maqasyo.

Iskuulka kadib (ilaa da'da 16), carruurta Ingiriis waxay badanaa aadaan kulliyad, halkaas oo ay doortaan inay bartaan saddex ama afar maado ka hor intaanay jaamacad tegin. Marka la eego jacaylka aan u qabo sanduuqa beige iyo cajalad duubista guriga, waxaan go'aansaday in barashada "sayniska kombiyuutarka" ee kulliyadda ay tahay doorashada saxda ah.

Waxaan koorsada uga helay wax ka badan intii aan filayay; halkaas ayaan markii ugu horreysay kula kulmay Pascal iyo Delphi.

Inta lagu jiro nasashada inta u dhaxaysa xiisadaha, ardaydu waxay ku shaqayn karaan mishiin kasta oo bilaash ah qolka kombayutarka. Bal qiyaas: qol aad u weyn, oo loogu talagalay ilaa boqol qof, oo leh safafka miisaska oo ay ka buuxaan mashiinno, sida kuwa uu kormeeruhu ku taagan yahay qaybta nidaamka. Taageerayaashu si joogto ah ayay u tumayaan, kubbadaha jiirka ayaa ka guuxaya miisaska, oo aan istaagin hal ilbiriqsi. Waxaa jira ur la yaab leh hawada, sida haddii 50-100 dhallinta hormoonnada ah ay si xilliyo ah isu beddelaan si ay u qaboojiyaan boqolaal chips Pentium III.

In kasta oo ay jiraan khataro caafimaad, waxaan jeclaa inaan fadhiisto kombayutarka markii aan helay daqiiqad bilaash ah.

Adminkii goobta joogay waxa uu ahaa nin gaaban oo da’ dhexaad ah, waxaana loo doortay xilkan, sababtoo ah rabitaankiisa aan la dhayalsan karin ee ah inuu noqdo kalitalis xun. Waxaan u malaynayaa. Shaqada ku jirta waa wax la dhayalsan karo; ninku runtii shaqadiisa wuu jeclaa. Waxaa loo xilsaaray ilaalinta nidaamka si aan qofna u isticmaalin kombiyuutarka dugsiga wax aan habboonayn.

Ilaa maanta, dareenkaygu wuxuu ii sheegayaa in gunnada maamuluhu ay si toos ah ugu xidhan tahay tirada ardayda uu gacanta ku qabtay oo uu ka soo saaray qolka kombayuutarka. Waxaan aad u hubaa in ninkani uu goor hore bixiyay amaahdii.

Waxa uu fadhiistay cidhifka fog ee qolka kombayuutarka oo miis gees ah. Waxayna ahayd ammaan in loo maleeyo in kormeerayaashiisa bacriminta ay heleen hab ay ku tarmaan muddo gaaban oo uur leh, waxaa jiray qaar badan oo iyaga ka mid ah. Waxaa la yaab leh oo kaliya inuu runtii waqti u helay si uu ula socdo dhammaantood. Dabcan, waan kaftamayaa... miyaan sheegay inuu shaqadiisa u qaatay si dhab ah?

Waqtigaas, shabakadda kombuyuutarku waxa ay shaqaynaysay Windows 2000. Isla markiiba waxaan ogaaday in mar kasta oo aan galo nidaamka, waxaa la bilaabay qoraal qeexan oo ka bilaabaya server-ka VNC ee koontada maamulka si fog loo galo desktop-ka. Mar kasta oo uu ninkani damco inuu ku basaasto, wuxuu si toos ah ugu xidhi jiray mashiinkaaga oo uu daawan jiray. Waxay ahayd mid naxdin leh, oo hadda markaan ka fekero, malaha sharci-darro.

Markii aan ilkahayga ka gooyay BASIC iyo C64, hadda waxaan ku qoray C iyo xitaa in yar oo C++ ah. Waqtigaas, waxaan weli aad u xiisayn jiray luqadda D, oo saxaysay qaar ka mid ah cilladaha C++, sida aan markaas arkay.

Waxa aan geli jiray qolka kombayutarka si aan wax cusub ugu akhriyo D ama aan la ciyaaro Digital Mars compiler-ka, mararka qaarkood, aniga oo ka mashquulay ka fikirida mustaqbalka weyn ee D, ayaan qoray C code si aan daaqaddooda uga jabsado barnaamijyada kale ee Win32. gacanqabsi

Waagii hore ee wanaagsanaa ee barnaamijka Win32, helitaanka gacanta daaqada waxay ahayd habka ugu fudud ee lagu jabsado barnaamijyada kale. Sida cad, dhammaan barnaamijyada GUI ee Windows waxay lahaayeen daaqad, xitaa haddii aysan ka muuqan shaashadda. Markaad qorto barnaamij si aad gacanta ugu soo saarto hab kale (asal ahaan xidhiidhinta), waxaad u diri kartaa fariimo. Tani waxay u ogolaatay qaar ka mid ah hawlgallada aasaasiga ah sida qarinta/muujinta daaqada barnaamijka, iyo sidoo kale waxyaabo aad u fiican sida ku qasbitaanka habka in lagu shubo DLL aan sabab lahayn oo loo galo goobta xusuusta oo uu bilaabo fulinta koodka. Ka dib duritaanka DLL, madadaalo ayaa bilaabatay.

Bishii ugu horreysay iyo badhkii, baarahani wax badan ima dhibin; waxa uu ku xidhay server-ka VNC mishiinkayga hal ama laba jeer oo keliya. Laakiin hal kulan oo gaar ah ayaa laga yaabaa in uu xiiseeyay. Waxaan qorayay qaar ka mid ah koodhka C si aan u qariyo daaqadaha Minesweeper (iyaga oo aan xidhin) si ay ugu fududaato in lagu ciyaaro fasalka, markii aan ogaaday in astaanta VNC ee cad ee saxanka nidaamka uu noqday madow. Taas macnaheedu waxa weeye in uu hadda i daawanayo.

Sidii caadada ii ahayd waan sii watay codaynta, anigoo isku dayaya inaan iska indho tiro. Dhanka kale, mishiinku wuxuu bilaabay inuu hoos u dhigo, isagoo isku dayaya inuu u gudbiyo heerka ugu sarreeya ee mid ka mid ah kormeerayaasha aan la tirin karin ee geeska qolka. Daaqadaha ayaa ku dhawaaday inay joojiyaan jawaab celintii, markii uu dulqaadkii iga dhamaaday, waxaan ka baxay oo dhameeyay maalintii.

Booqashooyinka xiga ee qolka kombayutarka, Colombo waxa uu aad u xiiseeyay waxa aan samaynayo ku dhawaad ​​wakhti kasta. Ka dib markii afraad, waxaan go'aansaday: Waxaan u baahanahay inaan wax ka qabto arrintan.

Waxaan qirayaa in qof caqli-gal ah, oo caqli-gal ah uu si fudud arrintan si toos ah ula soo hadal qaaday isaga ama madaxiisa. Si kastaba ha ahaatee, had iyo jeer waxaan u dhiibay jirrabaadda oo si degdeg ah naftayda ula hadlay inaan qaato xeelad gebi ahaanba ka duwan.

- Waxba ma samayn kartid server-kan VNC la'aanteed! - Si deggan oo go'aan leh ayaan naftayda ugu sheegay dhawr jeer.

Waxay ahayd lagama maarmaan in la dilo VNC.

Waxa aan bilaabay in aan galo qolka kombayuutarka oo ay ku jiraan kooxo badan oo arday ah waxaanan fadhiistay meel ka fog geesta koonaha oo ay la socdaan kormeerayaasha. Tani waxay shaqeysay muddo waxayna i siisay waqti aan ku tijaabiyo fikradaha.

Isku daygii ugu horreeyay, waxaan u maleynayaa inaad aqbali doonto, wuxuu ahaa mid daciif ah. Midig-gujinaya astaanta VNC ee saxaaradda nidaamka, waxaan arkay menu leh xarfaha sixirka EXIT. Nasiib darro, xarfaha waxay ku qornaayeen qoraal duleed cawlan. Maamuluhu waxa uu curyaamiyay shayga menu-ka ee "Exit" isaga oo u maraaya Tifaftiraha Siyaasadda Kooxda. Waxaan isku dayay inaan nidaamka ka dilo Maamulaha Hawsha, laakiin dabcan way ii muuqan weyday sababtoo ah waxay ku hoos socotaa xisaab kale, oo mudnaanta leh. Way shaqayn wayday.

Adeegga VNC wuxuu ku shaqeeyaa dekedda TCP 5900, waan xasuustay. Qorshahayga xiga waxa uu ahaa in aan u diro baakidh kharriban dekeddan si aan u burburo.

Waxaan ku qaatay ugu yaraan dhowr maalmood in aan la socdo borotokoolka, anigoo u diraya noocyo kala duwan oo si wanaagsan loo qaabeeyey dekedda 5900 oo rajeynaya inay jabin doonto. Ugu dambayntii, taasna ma shaqayn.

Waxaan mar hore bilaabay inaan ku fekero inaanan awoodin inaan ka takhaluso arrintan, markii ay si lama filaan ah iigu soo baxday: waa in ay jirto daaqad halkaas! Waxaan u baahanahay inaan soo bandhigno. Waxaa laga yaabaa inay lahaato badhan "Mute" oo casiir leh oo aan si fiican u isticmaali karo!

Waxaan ku orday koodka C-ga ee hadda ku dhow si aan u helo gacanta daaqadda ugu weyn ee hab kale - waana hubaal in ku filan, VNC waa la helay. Waxa aan dareemay waxyi markii ay farahaygu garaaceen WM_SHOWWINDOW. Isku day inaad qiyaasto waxa aan hortayda ku arkay?

Waxba!

Hadda waxaan ahaa mid xiiso leh... waxay lahayd daaqad, laakiin waxay iska indho tirtay fariimahayga. Laba jeer ayaan hubiyay koodkayga si aan u hubiyo inuu shaqeeyo. Waxay ku tijaabisay dhowr habab oo kale waxayna u shaqeysay si weyn. Waxaan isku dayay inaan fariimo kale u diro daaqada VNC, walina waxba.

Haddana mar kale ayay ii soo baxday!

Waad ku mahadsan tahay aadka u qaro weyn buugga Charles Petzold Waxaan si taxadar leh u bartay sida hababka Win32 ay uga shaqeeyaan nidaamka dhexdiisa. Codsi kasta oo Win32 ah wuxuu leeyahay daaqad iyo sidoo kale " safka fariimaha ". Farriimaha ay kiciyaan isdhexgalka isticmaalaha, iyo sidoo kale fariimaha ay soo diraan Windows lafteedu, waxay ku yimaadaan saf, arjiga laftiisa ayaa go'aaminaya sida loo habeeyo.

Ma aha mid aad u xiiso badan laftiisa. Laakiin markii aan ogaaday in safka farriinta ee ku filan ee aan la baarin ay u dhaqmeen sidii heuristic ee Maamulaha Nidaamka Daaqadda si uu u farageliyo habka suran, waxaan bilaabay inaan dhidid serotonin saafi ah.

Anigoon hal ilbiriqsi lumin, waxaan ku soo noqday C code-keygii, anigoo isku diyaarinaya inaan farriin kale u diro daaqadda VNC ee ugu weyn WM_SHOWWINDOW. In wareeg ah. Waara. Haddaba, fariimo badan. WM_SHOWWINDOW, taas oo aan hadda ogahay in VNC ay isku dayi doonto in ay gebi ahaanba iska indho tirto... marka ay khatarteeda leedahay.

Waxaan aruuriyay oo aan orday 4KB oo ah code-ka ugu xorriyadda jecel noloshayda. Qiyaastii saddex ilbiriqsi ka dib, Windows ayaa sheegay in habka vncserver.Π΅Ρ…Π΅ kama jawaabo, oo wuxuu sameeyay dalab aanan si fudud u diidi karin:

Ma doonaysaa inaad dhamaystirto hawshan?

HAA!

Aan qirto in maalinta inteeda kale aan si aan xamili karin ugu qanacsanahay naftayda.

Dhawr saacadood ka dib markii aan dheefshiiday awooddayda cusub, waxaan go'aansaday sida aan u isticmaali doono. Aad bay u fududayd in fadhiga hortiisa lagu dilo. Waxaan lahaa fikrad ka fiican - inaan gebi ahaanba baaba'o.

Ka dib baabtiiskii dabka oo leh barnaamij-socket Waxaan gartay in aan qori karo kood samayn kara laba shay. Waxay marka hore qabsan doontaa dekedda cusub ee TCP 5900, oo ay hore u qabsatay nidaamka server-ka VNC ee bilaa warha ah. Kadib waxay abuuri doontaa xiriir cusub oo TCP ah server-ka VNC ee mashiinka la cayimay. Koodhku wuxuu si fudud u matali doonaa dhammaan xogta u dhaxaysa labada saldhig, Columbo wuxuu u malayn doonaa inuu igu xidhayo, marka dhab ahaantii uu ku xidhmi doono server VNC gebi ahaanba ka duwan.

Xeerkaygu wuxuu u shaqayn doonaa sidii buundo qarsoodi ah oo noo dhexaysa aniga iyo naf kale oo miskiin ah oo aan doortay. Cajiib bay ahayd.

Isla markiiba waxaan bilaabay qorista buundada VNC ee beenta ah. Columbo dhawr jeer ayuu igu xidhay, laakiin hortiisa ayaan barnaamij ku sii waday. Waxaan u imid gabagabada in uusan wax fikrad ah ka haysan waxa aan sameynayo, inkastoo aan qoray waxyaabo muuqda sida lambarrada dekedda iyo faallooyinka sida // ΠŸΡ€ΠΎΡ‰Π°ΠΉ, ΠΆΡƒΡ‚ΠΊΠΈΠΉ шпион VNC.

Dhawr maalmood ka dib waxa aan kari waayay in koodku si sax ah u shaqeeyo. Si ay arrinta uga sii xumaato, waxaan si joogto ah ula shaqeynayay astaanta VNC ee madow ee saxanka nidaamka. Inta ay ku xiran tahay, ma sii dayn karin dekedda si aan u tijaabiyo koodkayga.

Haddaan garan lahaa markaa netcat!

Dhammaadkii, neerfayaashaydii way ii dhiibeen; ka dib, waxaan ahaa wiil 17 jir ah oo dulqaadan. Daawashada astaanta VNC-da cad oo mar kale madaw isu rogtay, waan ka naxay, oo furay koodkii asalka ahaa ee safka farriinta ka buuxay, oo indhihiisa hortooda ku orday. Xataa waxaan sugay dhowr ilbiriqsi ka hor intaanan gujin End Process, si uu u hubiyo in uu arkay.

Haddii aad riixdo badhanka in aanu si buuxda ii qancin in ay u qalantaa, ka dibna isaga booday ka gadaashiisa qalcaddii ee kormeerayaasha si degdeg ah ii soo dhawaado oo iga soo bixi qolka hubaal sameeyey.

Natiijo ahaan, waxaa la iga mamnuucay shabakada muddo laba toddobaad ah. Ciqaab cadaalad ah, ayaan mooday. Qiyaastii saddex toddobaad ka dib, server-ka VNC ayaa ka lumay qoraallada boot kamana muuqan meel kale. Marna maan ogayn in dhacdadaydu ay wax door ah ku leedahay tan iyo in kale, laakiin waxa ay gabi ahaanba burburisay qorshahaygii ahaa in aan aad u taajir noqdo aniga oo qoriga VNC ka iibinaya ardayda niyad jabsan ee jooga hoolalka kombiyuutarada ee dalka oo dhan.

Source: www.habr.com

Add a comment