Битка кодера: Ја против тог ВНЦ типа

В овај блог Објављено је доста прича о програмерима. Волим да се присећам својих старих глупости. Е, ево још једне такве приче.

Први пут сам се заинтересовао за рачунаре, посебно за програмирање, када сам имао око 11 година. На почетку средње школе боВећину свог слободног времена провео сам петљајући по свом Ц64 и пишући БАСИЦ, а затим маказама исекао лош код. Не шалим се, маказе.

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

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

У паузама између часова ученици су могли да раде на било којој слободној машини у кабинету рачунара. Замислите: огромну просторију, дизајнирану за око стотину људи, са редовима столова испуњених машинама, попут оних на којима монитор стоји на системској јединици. Навијачи непрестано брујају, лоптице миша зује по столовима, не престају ни на секунд. У ваздуху се осећа чудан мирис, као да се 50-100 хормоналних тинејџера повремено мења да хлади стотине Пентиум ИИИ чипова.

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

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

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

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

У то време, рачунарска мрежа је радила под оперативним системом Виндовс 2000. Убрзо сам открио да је сваки пут када сам се пријавио на систем покренута скрипта која је специфицирала покретање ВНЦ сервера са администраторског налога за даљински приступ радној површини. Кад год је овај тип хтео да вас шпијунира, он би се директно повезао са вашом машином и гледао. Било је језиво, а сада када размислим, вероватно противзаконито.

Пошто сам се пресекао на БАСИЦ-у и Ц64, сада сам писао на Ц-у, па чак и на Ц++-у. У то време још сам био веома заинтересован за језик Д, који је исправио неке недостатке Ц++-а, како сам га тада видео.

Улазио сам у компјутерску собу да прочитам нешто ново о Д или се играм са компајлером Дигитал Марс Д. Понекад, док сам био ометен од размишљања о великој будућности Д, писао сам Ц код за хаковање других Вин32 програма кроз њихов прозор ручке.

У стара добра времена Вин32 програмирања, проналажење ручке прозора је био најлакши метод за хаковање других програма. Очигледно је да су сви ГУИ програми на Виндовс-у имали прозор, чак и ако се није појавио на екрану. Писањем програма за преузимање ручке другог процеса (у суштини везе до њега), можете му слати поруке. Ово је омогућило неке основне операције као што је скривање/приказивање прозора програма, као и заиста цоол ствари као што је присиљавање процеса да учита произвољни ДЛЛ у свој меморијски простор и почне да извршава код. Након ДЛЛ ињекције, забава је почела.

У првих месец и по дана овај детектив ми није много сметао, повезао се са ВНЦ сервером на мојој машини само једном или два пута. Али једна посебна сесија је можда изазвала његово интересовање. Писао сам неки Ц код да сакријем прозоре Миноловаца (без да их затварам) да бих олакшао играње на часу, када сам приметио да је бела ВНЦ икона у системској палети постала црна. То је значило да ме сада посматра.

Наставио сам да кодирам као и обично, покушавајући да га игноришем. У међувремену, машина је почела да успорава, покушавајући да пренесе максималну брзину кадрова на један од безбројних монитора у углу собе. Виндовс је скоро престао да реагује, када ми је понестало стрпљења, одјавио сам се и завршио за тај дан.

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

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

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

Било је неопходно убити ВНЦ.

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

Мој први покушај, сложићете се, био је прилично слаб. Десним кликом на ВНЦ икону у системској палети, видео сам мени са магичним словима ЕКСИТ. Нажалост, писма су исписана сивим оквиром текста. Администратор је онемогућио ставку менија „Излаз“ преко уређивача смерница групе. Покушао сам да убијем процес из менаџера задатака, али ми је, наравно, био невидљив јер је радио под другим, привилегованијим налогом. Није ишло.

ВНЦ сервер ради на ТЦП порту 5900, сетио сам се. Мој следећи план је био да пошаљем оштећене пакете на овај порт како бих га срушио.

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

Већ сам почео да мислим да нећу моћи да се отарасим ове ствари, када ми је одједном синуло: тамо мора да постоји прозор! Морамо да га прикажемо. Можда ће имати лепо сочно дугме „Искључи звук“ које могу одлично искористити!

Покренуо сам свој сада скоро савршен Ц код да пронађем ручицу главног прозора другог процеса - и сасвим сигурно, ВНЦ је пронађен. Осећао сам инспирацију када су ми прсти куцали WM_SHOWWINDOW. Покушај да погодиш шта сам видео испред себе?

Ништа

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

А онда ми је опет синуло!

Захваљујући веома густом књига Цхарлес Петзолд Пажљиво сам проучавао како Вин32 процеси функционишу унутар система. Свака Вин32 апликација има прозор као и „ред порука“. Поруке покренуте интеракцијом корисника, као и поруке које шаље сам Виндовс, стижу у ред, а апликација сама одлучује како ће их обрадити.

Није баш занимљиво само по себи. Али када сам схватио да је довољно велики ред необрађених порука деловао као хеуристика да менаџер процеса прозора интервенише у закаченом процесу, почео сам да се знојим од чистог серотонина.

Без губљења секунде, вратио сам се свом Ц коду, припремајући се да пошаљем још једну поруку у главни ВНЦ прозор WM_SHOWWINDOW. У циклусу. Етернал. Дакле, пуно порука. WM_SHOWWINDOW, за који сам сада знао да ће ВНЦ покушати да потпуно игнорише... на своју опасност.

Саставио сам и покренуо 4КБ кода који највише воли слободу у свом животу. Након отприлике три секунде, Виндовс је пријавио да је процес vncserver.ехе не одговара, и дао сам понуду коју једноставно нисам могао да одбијем:

Да ли желите да завршите овај процес?

НЕГО ШТА!

Дозволите ми да признам да сам остатак дана био неподношљиво задовољан собом.

Након неколико сати проведених у варењу моје нове супермоћи, одлучио сам како ћу је искористити. Било је сувише лако једноставно убити сесију пред њим. Имао сам бољу идеју – да потпуно нестанем.

После ватрено крштење са програмирањем утичнице Схватио сам да могу да напишем код који би радио две ствари. Прво ће заузети новоослобођени ТЦП порт 5900, који је претходно био заузет процесом ВНЦ сервера без знања. Затим ће креирати нову ТЦП везу са ВНЦ сервером наведене машине. Код ће једноставно заменити све податке између два сокета, а Колумбо ће мислити да се повезује са мном, а у ствари ће се повезивати на потпуно другачији ВНЦ сервер.

Мој код ће деловати као тајни мост између мене и неке друге јадне душе коју одаберем. Било је дивно.

Одмах сам почео да пишем свој лажни ВНЦ мост. Колумбо ми се повезао неколико пута, али сам наставио да програмирам испред њега. Дошао сам до закључка да он нема појма шта радим, иако сам написао очигледне ствари као што су бројеви портова и коментари попут // Прощай, жуткий шпион VNC.

После неколико дана нисам могао да натерам код да ради исправно. Да ствар буде гора, радио сам скоро непрекидно са црном ВНЦ иконом у системској палети. Док је био повезан, нисам могао да отпустим порт да тестирам свој код.

Да сам тада знао netcat!

На крају су ми попустили живци, ипак сам био нестрпљив момак од 17 година. Гледајући како бела икона ВНЦ сервера поново постаје црна, избезумио сам се, отворио оригинални код који је попуњавао ред порука и покренуо га пред његовим очима. Чак сам чекао неколико секунди пре него што сам кликнуо End Process, само да се увери да је видео.

Ако ме притисак на то дугме није у потпуности уверио да вреди, онда је он искочио иза своје тврђаве монитора да ми брзо приђе и изведе ме из собе.

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

Извор: ввв.хабр.цом

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