Կոդերի ճակատամարտ. ես ընդդեմ այդ VNC տղայի

В այս բլոգը Հրապարակվել են բավականին ծրագրավորող հեքիաթներ։ Ես սիրում եմ վերհիշել իմ հին հիմարությունները: Դե, ահա ևս մեկ նման պատմություն.

Համակարգչով, հատկապես ծրագրավորմամբ, առաջին անգամ հետաքրքրվեցի մոտ 11 տարեկանում։ Ավագ դպրոցի սկզբում բоԵս իմ ազատ ժամանակի մեծ մասն անցկացնում էի իմ C64-ի վրա և գրում էի BASIC-ը, այնուհետև մկրատով կտրում էի վատ կոդը: Չեմ կատակում, մկրատ.

Դպրոցից հետո (մոտ 16 տարեկան), բրիտանացի երեխաները սովորաբար գնում են քոլեջ, որտեղ նրանք ընտրում են երեք կամ չորս առարկա սովորել նախքան համալսարան գնալը: Հաշվի առնելով իմ սերը տան բեժ տուփի և մագնիտոֆոնի նկատմամբ՝ ես որոշեցի, որ քոլեջում «համակարգչային գիտություն» սովորելը ճիշտ ընտրություն է:

Ինձ դուր եկավ դասընթացը, քան ես սպասում էի. այնտեղ ես առաջին անգամ հանդիպեցի Պասկալին և Դելֆիին:

Դասընթացների միջև ընդմիջումների ժամանակ ուսանողները կարող էին աշխատել համակարգչային սենյակի ցանկացած անվճար մեքենայի վրա: Պատկերացրեք՝ հսկայական սենյակ, որը նախատեսված է մոտ հարյուր մարդու համար, մեքենաներով լցված սեղանների շարքերով, ինչպես նրանք, որտեղ մոնիտորը կանգնած է համակարգի միավորի վրա: Երկրպագուներն անընդհատ բզզում են, սեղանների վրա մկան գնդակներ են բզզում, ոչ մի վայրկյան կանգ չեն առնում։ Օդում տարօրինակ հոտ է գալիս, կարծես 50-100 հորմոնալ դեռահասներ պարբերաբար փոխվում են հարյուրավոր Pentium III չիպերի սառեցման համար։

Չնայած առողջական վտանգներին, ես սիրում էի նստել համակարգչի մոտ, երբ ազատ րոպե ունեի։

Սենյակի հերթապահ ադմինը կարճահասակ, միջին տարիքի մի տղամարդ էր, ով ընտրվել էր այս դերի համար՝ չար դիկտատոր դառնալու անհագ ցանկության պատճառով։ Ենթադրում եմ, որ այդպես է։ Հերթապահությունը թերագնահատված է, տղան իսկապես սիրում էր իր աշխատանքը: Նրան հանձնարարվել էր կարգուկանոն պահպանել, որպեսզի ոչ ոք չօգտագործի դպրոցի համակարգիչը ոչ պատշաճ բանի համար:

Մինչ օրս իմ ինտուիցիան ասում է, որ ադմինիստրատորի բոնուսը ուղղակիորեն կախված է այն ուսանողների թվից, որոնց նա ձեռքից բռնել և դուրս է բերել համակարգչային սենյակից: Համոզված եմ, որ այս տղան վաղաժամկետ մարեց իր հիփոթեքը:

Նա նստեց համակարգչային սենյակի հեռավոր անկյունում՝ անկյունային սեղանի մոտ։ Եվ կարելի էր վստահորեն ենթադրել, որ նրա պտղաբերության մոնիտորները գտել էին տպավորիչ կարճ հղիության ժամանակ վերարտադրվելու միջոց, քանի որ դրանք այնքան շատ էին: Կարելի էր միայն մտածել, թե արդյոք նա իսկապես ժամանակ ուներ այդ բոլորին հետևելու համար։ Իհարկե, կատակում եմ... նշեցի, որ նա շատ լուրջ է վերաբերվել իր աշխատանքին։

Այդ ժամանակ համակարգչային ցանցը աշխատում էր Windows 2000-ով: Շուտով ես հայտնաբերեցի, որ ամեն անգամ, երբ ես մուտք էի գործում համակարգ, գործարկվում էր մի սկրիպտ, որը նշում էր VNC սերվերի գործարկումը ադմինիստրատորի հաշվից՝ աշխատասեղանին հեռավոր մուտք գործելու համար: Երբ այս տղան ուզում էր լրտեսել ձեզ, նա անմիջապես միանում էր ձեր սարքին և դիտում: Սարսափելի էր, և հիմա, երբ մտածում եմ դրա մասին, հավանաբար անօրինական է:

Կտրելով ատամներս BASIC-ի և C64-ի վրա՝ ես հիմա գրեցի C-ով և նույնիսկ մի փոքր C++-ով: Այն ժամանակ ինձ դեռ շատ էր հետաքրքրում D լեզուն, որը ուղղում էր C++-ի որոշ թերություններ, ինչպես այն ժամանակ տեսա։

Ես գնում էի համակարգչային սենյակ՝ D-ում նոր բան կարդալու կամ Digital Mars D կոմպիլյատորով խաղալու համար: Երբեմն, երբ ես շեղվում էի D-ի մեծ ապագայի մասին մտածելուց, ես գրում էի C կոդ՝ Win32 այլ ծրագրերը կոտրելու համար նրանց պատուհանի միջոցով: բռնակներ.

Win32 ծրագրավորման հին լավ ժամանակներում պատուհանի բռնակ գտնելը ամենահեշտ մեթոդն էր այլ ծրագրերը կոտրելու համար: Ակնհայտ է, որ Windows-ի բոլոր GUI ծրագրերն ունեին պատուհան, նույնիսկ եթե այն չէր երևում էկրանին: Ծրագիր գրելով մեկ այլ գործընթացի բռնակ ստանալու համար (հիմնականում դրա հղումը), դուք կարող եք հաղորդագրություններ ուղարկել դրան: Սա թույլ տվեց մի քանի հիմնական գործողություններ, ինչպիսիք են ծրագրի պատուհանը թաքցնելը/ցուցադրելը, ինչպես նաև իսկապես հիանալի բաներ, ինչպիսիք են ստիպել գործընթացին կամայական DLL բեռնել իր հիշողության տարածքում և սկսել կոդի գործարկումը: DLL ներարկումից հետո սկսվեց զվարճանքը:

Առաջին մեկուկես ամսվա ընթացքում այս դետեկտիվն ինձ այնքան էլ չէր անհանգստացնում, այն միայն մեկ-երկու անգամ միացավ իմ մեքենայի VNC սերվերին: Բայց մի կոնկրետ նիստ կարող է առաջացնել նրա հետաքրքրությունը: Ես գրում էի մի քանի C կոդ, որպեսզի թաքցնեմ Minesweeper-ի պատուհանները (առանց փակելու), որպեսզի հեշտացնեմ դասում խաղալը, երբ նկատեցի, որ համակարգի սկուտեղի սպիտակ VNC պատկերակը սևացել է։ Սա նշանակում էր, որ նա հիմա ինձ էր նայում։

Ես սովորականի պես շարունակեցի կոդավորումը՝ փորձելով անտեսել նրան: Այդ ընթացքում մեքենան սկսեց դանդաղեցնել՝ փորձելով առավելագույն կադրերի արագությունը փոխանցել սենյակի անկյունում գտնվող անթիվ մոնիտորներից մեկին։ Windows-ը գրեթե դադարեց արձագանքել, երբ համբերությունս սպառվեց, ես դուրս եկա և ավարտեցի օրը:

Հետագա այցելությունների ժամանակ համակարգչային սենյակ, Կոլոմբոն մեծ հետաքրքրություն էր ցուցաբերում այն ​​ամենի նկատմամբ, ինչ ես անում էի գրեթե ամեն անգամ: Մոտավորապես չորրորդ անգամից հետո ես որոշեցի. ես պետք է ինչ-որ բան անեմ այս հարցում:

Ես ընդունում եմ, որ ողջամիտ, ռացիոնալ մարդը կարող էր ուղղակի այս հարցը բարձրացնել իր կամ իր ղեկավարի մոտ: Այնուամենայնիվ, ես միշտ տրվել էի գայթակղությանը և արագորեն սկսեցի ինքս ինձ ընդունել բոլորովին այլ ռազմավարություն:

- Դուք ոչինչ չեք կարող անել առանց այս VNC սերվերի: — Ես մի քանի անգամ հանգիստ ու վճռական ասացի ինքս ինձ.

Պետք էր սպանել VNC-ին.

Ուսանողների մեծ խմբերով սկսեցի մտնել համակարգչային սենյակ և մոնիտորներով հնարավորինս հեռու նստել անկյունից։ Սա որոշ ժամանակ աշխատեց և ինձ որոշ ժամանակ տվեց գաղափարները փորձարկելու համար:

Իմ առաջին փորձը, կարծում եմ, կհամաձայնեք, բավականին թույլ էր: Համակարգի սկուտեղի VNC պատկերակի վրա աջ սեղմելով՝ ես տեսա մի ընտրացանկ՝ EXIT կախարդական տառերով: Ցավոք, տառերը գրված էին մոխրագույն ուրվագծային տեքստով: Ադմինիստրատորն անջատել է «Ելք» ընտրացանկի տարրը Խմբային քաղաքականության խմբագրիչի միջոցով: Ես փորձեցի ոչնչացնել գործընթացը Task Manager-ից, բայց, իհարկե, այն ինձ համար անտեսանելի էր, քանի որ այն աշխատում էր այլ, ավելի արտոնյալ հաշվի ներքո: Չստացվեց:

VNC սերվերն աշխատում է TCP պորտով 5900, հիշեցի: Իմ հաջորդ պլանն էր կոռումպացված փաթեթներ ուղարկել այս նավահանգիստ՝ այն խափանելու համար:

Ես առնվազն մի քանի օր անցկացրեցի արձանագրության հետ աշխատելու համար՝ ուղարկելով տարբեր ձևեր լավ կառուցվածքային ապուշների պորտ 5900 և հուսալով, որ այն կխախտվի: Ի վերջո, դա էլ չստացվեց։

Ես արդեն սկսում էի մտածել, որ չեմ կարողանա ազատվել այս բանից, երբ հանկարծ իմ գլխի ընկավ. այնտեղ պետք է պատուհան լինի: Մենք պետք է ցուցադրենք այն: Միգուցե այն կունենա գեղեցիկ հյութալի «Խլացնել» կոճակը, որը ես կարող եմ մեծապես օգտագործել:

Ես գործարկեցի իմ այժմ գրեթե կատարյալ C կոդը՝ մեկ այլ գործընթացի հիմնական պատուհանի բռնակը գտնելու համար, և, իհարկե, VNC-ն գտնվեց: Ես ոգեշնչված զգացի, երբ մատներս մուտքագրեցին WM_SHOWWINDOW. Փորձե՞ք գուշակել, թե ինչ եմ տեսել իմ առջև:

Ոչինչ!

Հիմա ինձ հետաքրքիր էր... այն ուներ պատուհան, բայց անտեսում էր իմ հաղորդագրությունները։ Ես կրկնակի ստուգեցի իմ կոդը՝ համոզվելու համար, որ այն աշխատում է: Փորձարկվեց այն մի քանի այլ գործընթացների վրա և այն հիանալի աշխատեց: Ես փորձեցի այլ հաղորդագրություններ ուղարկել VNC պատուհանին, բայց դեռ ոչինչ:

Եվ հետո նորից լուսացավ ինձ վրա:

Շնորհիվ շատ հաստ գիրքը Չարլզ Փեթզոլդ Ես ուշադիր ուսումնասիրեցի, թե ինչպես են Win32 գործընթացները աշխատում համակարգի ներսում: Յուրաքանչյուր Win32 հավելված ունի պատուհան, ինչպես նաև «հաղորդագրությունների հերթ»: Օգտատիրոջ փոխազդեցությունից առաջացած հաղորդագրությունները, ինչպես նաև հենց Windows-ի կողմից ուղարկված հաղորդագրությունները հերթ են գալիս, և հավելվածն ինքն է որոշում, թե ինչպես մշակել դրանք:

Ինքնին շատ հետաքրքիր չէ։ Բայց երբ ես հասկացա, որ բավական մեծ չմշակված հաղորդագրությունների հերթը գործում էր որպես «Wdown Process Manager»-ի էվրիստիկա՝ կախված գործընթացին միջամտելու համար, ես սկսեցի քրտնել մաքուր սերոտոնինը:

Առանց վայրկյան կորցնելու, ես վերադարձա իմ C կոդը՝ պատրաստվելով մեկ այլ հաղորդագրություն ուղարկել գլխավոր VNC պատուհանին WM_SHOWWINDOW. Ցիկլի մեջ. Հավերժական. Այսպիսով, շատ հաղորդագրություններ: WM_SHOWWINDOW, որը ես հիմա գիտեի, որ VNC-ն կփորձի ամբողջությամբ անտեսել... իր վտանգի տակ:

Ես հավաքեցի և գործարկեցի իմ կյանքի ամենաազատասեր ծածկագիրը 4KB: Մոտ երեք վայրկյան հետո Windows-ը հայտնեց, որ գործընթացը vncserver.ехе չի պատասխանում և առաջարկ է արել, որից ես ուղղակի չէի կարող հրաժարվել.

Ցանկանու՞մ եք ավարտել այս գործընթացը:

ԴԺՈԽՔ ԱՅՈ!

Թույլ տվեք խոստովանել, որ մնացած օրվա ընթացքում ես անտանելի գոհ էի ինձնից։

Իմ նոր գերհզորությունը մարսելու վրա ծախսած մի քանի ժամից հետո ես որոշեցի, թե ինչպես կօգտագործեմ այն: Չափազանց հեշտ էր պարզապես սպանել նիստը հենց նրա աչքի առաջ: Ես ավելի լավ գաղափար ունեի՝ ամբողջովին անհետանալ։

Այն բանից հետո կրակի մկրտություն վարդակից ծրագրավորմամբ Ես հասկացա, որ կարող եմ գրել կոդ, որը կկատարի երկու բան. Այն նախ կզբաղեցնի նոր ազատված TCP 5900 նավահանգիստը, որը նախկինում զբաղված էր անգիտակից VNC սերվերի գործընթացով: Այնուհետև այն կստեղծի նոր TCP կապ նշված մեքենայի VNC սերվերին: Կոդը պարզապես կփոխանցի բոլոր տվյալները երկու վարդակների միջև, և Կոլումբոն կմտածի, որ միանում է ինձ, մինչդեռ իրականում նա միանալու է բոլորովին այլ VNC սերվերի:

Իմ կոդը կգործի որպես գաղտնի կամուրջ իմ և իմ ընտրած մեկ այլ խեղճ հոգու միջև: Հրաշալի էր։

Ես անմիջապես սկսեցի գրել իմ կեղծ VNC կամուրջը։ Կոլումբոն մի քանի անգամ կապվեց ինձ հետ, բայց ես շարունակեցի ծրագրավորել նրա աչքի առաջ։ Ես եկել եմ այն ​​եզրակացության, որ նա չգիտեր, թե ինչ եմ անում, չնայած ես գրել եմ ակնհայտ բաներ, ինչպիսիք են նավահանգիստների համարները և մեկնաբանությունները, ինչպիսիք են. // Прощай, жуткий шпион VNC.

Մի երկու օր հետո ես չկարողացա ստանալ կոդը ճիշտ աշխատելու համար: Իրավիճակն ավելի վատթարացնելու համար ես գրեթե անընդհատ աշխատում էի համակարգի սկուտեղի սև VNC պատկերակի հետ: Մինչ այն միացված էր, ես չկարողացա բացել պորտը՝ իմ կոդը փորձարկելու համար:

Եթե ​​ես այն ժամանակ իմանայի netcat!

Ի վերջո նյարդերս տեղի տվեցին, չէ՞ որ ես 17 տարեկան անհամբեր տղա էի։ Դիտելով սպիտակ VNC սերվերի պատկերակը կրկին սևանում է, ես սարսափեցի, բացեցի բնօրինակ կոդը, որը լրացնում էր հաղորդագրությունների հերթը և այն անցկացրեցի նրա աչքի առաջ: Ես նույնիսկ մի քանի վայրկյան սպասեցի մինչև սեղմելը End Process, պարզապես համոզվելու համար, որ նա տեսել է դա:

Եթե ​​այդ կոճակը սեղմելը ինձ լիովին չհամոզեց, որ արժեր, ապա նա, ցատկելով իր մոնիտորների ամրոցի հետևից, արագ մոտենալով ինձ և դուրս հանեց սենյակից, անշուշտ համոզվեց:

Արդյունքում երկու շաբաթով ինձ զրկեցին ցանցից։ Արդար պատիժ, մտածեցի ես։ Մոտ երեք շաբաթ անց VNC սերվերն անհետացավ բեռնման սկրիպտներից և երբեք այլ տեղ չհայտնվեց: Ես երբեք չգիտեի՝ իմ միջադեպը որևէ դեր խաղաց այս հարցում, թե ոչ, բայց այն ամբողջովին փչացրեց առասպելական հարստանալու իմ ծրագիրը՝ վաճառելով իմ VNC ատրճանակը դեպրեսիվ ուսանողներին քոլեջի համակարգչային սրահներում ամբողջ երկրում:

Source: www.habr.com

Добавить комментарий