Кодер битка: Јас против тој VNC дечко

В овој блог Објавени се доста програмерски приказни. Сакам да се присетувам на моите стари глупави работи. Па, еве уште една таква приказна.

Првпат се заинтересирав за компјутери, особено за програмирање, кога имав околу 11 години. На почетокот на средното училиште боПоголемиот дел од слободното време го поминував чепкајќи со мојот C64 и пишувајќи BASIC, а потоа отсекувајќи го лошиот код со ножици. Не се шегувам, ножици.

По училиште (околу 16-годишна возраст), британските деца обично одат на колеџ, каде што избираат да учат три или четири предмети пред да одат на универзитет. Со оглед на мојата љубов кон беж кутијата и магнетофонот дома, решив дека студирањето „компјутерски науки“ на факултет е вистинскиот избор.

Уживав на курсот повеќе отколку што очекував; таму првпат ги запознав Паскал и Делфи.

За време на паузите помеѓу часовите, учениците можеа да работат на која било бесплатна машина во компјутерската сала. Замислете: огромна просторија, наменета за околу сто луѓе, со редови на маси полни со машини, како оние каде што мониторот стои на системската единица. Навивачите постојано потпевнуваат, на масите зујат топчиња од глувчето, не запирајќи ниту секунда. Во воздухот се чувствува чуден мирис, како 50-100 хормонални тинејџери периодично да се менуваат за да ладат стотици чипови Pentium III.

И покрај здравствените ризици, сакав да седам на компјутер кога имав слободна минута.

Дежурниот админ во собата беше низок, средовечен маж кој беше избран за оваа улога поради неговата ненаситна желба да стане злобен диктатор. Претпоставувам така. Дежурството е потценување; момчето навистина ја сакаше својата работа. Тој имал задача да го одржува редот, така што никој не го користи училишниот компјутер за нешто несоодветно.

До денес, мојата интуиција ми кажува дека бонусот на администраторот директно зависел од бројот на студенти што ги фатил за рака и ги извел од компјутерската соба. Прилично сум сигурен дека овој човек предвреме си ја плати хипотеката.

Седеше во далечниот агол на компјутерската соба на аголна маса. И беше безбедно да се претпостави дека неговите монитори за плодност нашле начин да се репродуцираат со импресивно краток период на бременост, ги имаше толку многу. Може само да се запрашаме дали навистина имал време да ги следи сите. Се разбира, се шегувам... дали спомнав дека многу сериозно си ја сфати работата?

Во тоа време, компјутерската мрежа работеше со Windows 2000. Наскоро открив дека секој пат кога се најавував на системот, беше лансирана скрипта што го наведе стартувањето на VNC серверот од администраторската сметка за далечински пристап до работната површина. Секогаш кога овој човек сакаше да ве шпионира, тој директно се поврзуваше со вашата машина и гледаше. Беше морничаво, а сега кога ќе размислам, веројатно нелегално.

Откако ги исеков забите на BASIC и C64, сега напишав во C, па дури и малку C++. Во тоа време, сè уште бев многу заинтересиран за јазикот Д, кој коригираше некои од недостатоците на C++, како што го видов тогаш.

Влегував во компјутерската соба за да прочитам нешто ново на D или играм со компајлерот Digital Mars D. Понекогаш, додека бев одвлечен од размислувањето за големата иднина на D, пишував C код за да ги хакира другите програми на Win32 преку нивниот прозорец рачки.

Во старите добри времиња на програмирањето Win32, наоѓањето рачка за прозорец беше најлесниот метод за хакирање на други програми. Очигледно, сите GUI програми на Windows имаа прозорец, дури и ако не се појавуваше на екранот. Со пишување програма за враќање на рачката до друг процес (во суштина врска до него), можете да испраќате пораки до него. Ова овозможи некои основни операции како криење/прикажување програмски прозорец, како и навистина интересни работи како принудување на процес да вчита произволен DLL во неговиот мемориски простор и да започне со извршување на кодот. По инјектирањето на DLL, забавата започна.

Во првиот месец и половина, овој детектив не ми пречеше многу, се поврзуваше со VNC серверот на мојата машина само еднаш или двапати. Но, една конкретна сесија можеби го разбудила неговиот интерес. Пишував некој C код за да ги сокријам прозорците на Minesweeper (без да ги затворам) за полесно да се игра на час, кога забележав дека белата икона VNC во системската лента стана црна. Ова значеше дека тој сега ме гледаше.

Продолжив со кодирање како и обично, обидувајќи се да го игнорирам. Во меѓувреме, машината почна да забавува, обидувајќи се да ја пренесе максималната стапка на слики на еден од безбројните монитори во аголот на собата. Виндоус речиси престана да реагира, кога трпението ми се снема, се одјавив и го завршив тој ден.

При последователните посети на компјутерската соба, Коломбо се интересираше за она што го правам речиси секој пат. По околу четврти пат, решив: Треба да направам нешто околу ова.

Признавам дека разумен, рационален човек можел едноставно да го покрене ова прашање директно со него или со неговиот шеф. Сепак, секогаш се предавав на искушението и брзо зборував себеси да усвојам сосема поинаква стратегија.

- Не можете да направите ништо без овој VNC сервер! — Смирено и одлучно си реков неколку пати.

Беше неопходно да се убие ВНЦ.

Почнав да влегувам во компјутерската соба со големи групи студенти и да седам што подалеку од аголот со мониторите. Ова работеше некое време и ми даде малку време да тестирам идеи.

Мојот прв обид, мислам дека ќе се согласите, беше прилично слаб. Со десен клик на иконата VNC во системската лента, видов мени со магичните букви EXIT. За жал, буквите беа напишани во сив контури на текстот. Администраторот ја оневозможи ставката од менито „Излез“ преку уредникот на групната политика. Се обидов да го убијам процесот од Task Manager, но, се разбира, тој беше невидлив за мене бидејќи работеше под друга, попривилегирана сметка. Не успеа.

Се сетив серверот VNC работи на TCP порта 5900. Мојот следен план беше да испратам оштетени пакети до оваа порта со цел да го срушам.

Поминав барем неколку дена чепкајќи го протоколот, испраќајќи различни форми на добро структурирани глупости до портата 5900 и надевајќи се дека ќе се скрши. На крајот, ниту тоа не успеа.

Веќе почнав да мислам дека нема да можам да се ослободам од оваа работа, кога одеднаш ме осамна: мора да има прозорец! Треба да го прикажеме. Можеби ќе има убаво сочно копче „Исклучи“ што можам одлично да го искористам!

Го истрчав мојот сега скоро совршен C код за да ја најдам рачката до главниот прозорец на друг процес - и сигурно, VNC беше пронајден. Се чувствував инспириран кога ми пишуваа прстите WM_SHOWWINDOW. Обидете се да погодите што видов пред мене?

Ништо

Сега бев љубопитен... имаше прозорец, но ги игнорираше моите пораки. Го проверив двапати мојот код за да се уверам дека работи. Го тестирав на неколку други процеси и работеше одлично. Се обидов да испратам други пораки до прозорецот VNC, но сепак ништо.

И тогаш повторно ми осамна!

Благодарение на многу густата книгата Чарлс Пецолд Внимателно проучував како функционираат процесите на Win32 во системот. Секоја апликација Win32 има прозорец како и „редица за пораки“. Пораките предизвикани од интеракцијата на корисниците, како и пораките испратени од самиот Windows, пристигнуваат во редица, а самата апликација одлучува како да ги обработи.

Само по себе не е многу интересно. Но, кога сфатив дека доволно голема необработена редица пораки делуваше како хеуристика за Window 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 на депресивни студенти во компјутерските сали низ целата земја.

Извор: www.habr.com

Додадете коментар