Кодер шайқасы: Мен сол VNC жігітіне қарсы

В осы блог Бірнеше бағдарламашы ертегілері жарияланды. Мен бұрынғы ақымақ нәрселерімді еске түсіргенді ұнатамын. Міне, осындай тағы бір оқиға.

Мен компьютерге, әсіресе бағдарламалауға алғаш рет 11 жасымда қызыға бастадым. Орта мектептің басында боМен бос уақытымның көп бөлігін C64-пен айналысуға және BASIC жазуға, содан кейін қайшымен нашар кодты кесуге жұмсадым. Мен қалжыңдап тұрған жоқпын, қайшы.

Мектептен кейін (шамамен 16 жаста) британдық балалар әдетте колледжге барады, онда олар университетке барар алдында үш немесе төрт пәнді оқуды таңдайды. Үйдегі бежевый қорап пен магнитофонға деген сүйіспеншілігімді ескере отырып, мен колледжде «информатиканы» оқу дұрыс таңдау деп шештім.

Маған курс күткеннен де көбірек ұнады; Мен Паскаль мен Дельфиді алғаш рет сонда кездестірдім.

Сабақ арасындағы үзіліс кезінде студенттер компьютер бөлмесіндегі кез келген тегін машинада жұмыс істей алады. Елестетіп көріңізші: жүзге жуық адамға арналған үлкен бөлме, жүйелік блокта монитор тұрған сияқты машиналарға толы үстелдер бар. Жанкүйерлер үнемі гуілдеді, тінтуірдің шарлары бір секундқа тоқтамай, үстелдерде ызылдайды. 50-100 гормоналды жасөспірімдер жүздеген Pentium III чиптерін салқындату үшін мезгіл-мезгіл өзгеріп жатқандай, ауада біртүрлі иіс бар.

Денсаулыққа қауіп төніп тұрғанына қарамастан, мен бос минут болған кезде компьютерде отыруды ұнататынмын.

Бөлмедегі кезекші админ қысқа бойлы, орта бойлы адам еді, ол зұлым диктатор болғысы келгендіктен бұл рөлге таңдалды. Мен солай деп ойлаймын. Кезекшілік - бұл аз, жігіт өз жұмысын шынымен жақсы көретін. Оған мектеп компьютерін ешбір орынсыз нәрсеге пайдаланбау үшін тәртіпті сақтау тапсырылды.

Осы уақытқа дейін менің түйсігім әкімшінің бонусы оның қолынан ұстап, компьютер бөлмесінен шығарып салған студенттердің санына тікелей байланысты екенін айтады. Мен бұл жігіттің ипотекасын ерте төлегеніне сенімдімін.

Ол компьютер бөлмесінің алыс бұрышындағы бұрыштағы үстелге отырды. Оның құнарлылығын бақылаушылары әсерлі қысқа жүктілік мерзімімен ұрпақты болу жолын тапты деп болжауға болады, олардың саны өте көп болды. Олардың барлығын қадағалап отыруға оның шынымен уақыты болды ма деп ойлауға болады. Әрине, қалжыңдап тұрмын... мен оның жұмысына үлкен жауапкершілікпен қарайтынын айттым ба?

Ол кезде компьютерлік желіде Windows 2000 жұмыс істеп тұрған. Мен жүйеге кірген сайын жұмыс үстеліне қашықтан қол жеткізу үшін әкімші тіркелгісінен VNC серверін іске қосуды көрсететін сценарий іске қосылатынын көп ұзамай білдім. Бұл жігіт сізді аңдығысы келгенде, ол сіздің құрылғыңызға тікелей қосылып, бақылайтын. Бұл қорқынышты болды, енді мен бұл туралы ойласам, заңсыз шығар.

BASIC және C64 тілдерінде тістерімді кесіп алғаннан кейін мен қазір C тілінде және тіпті аздап C++ тілінде жаздым. Ол кезде мен С++ тілінің кейбір кемшіліктерін түзететін D тіліне әлі де қатты қызығатынмын, сол кезде көргенімдей.

Мен компьютер бөлмесіне D-де жаңа бірдеңе оқу немесе Digital Mars D компиляторымен ойнау үшін кіретінмін.Кейде мен D-тің болашағы туралы ойлаудан алшақтап, басқа Win32 бағдарламаларын терезе арқылы бұзу үшін С кодын жаздым. тұтқалар.

Win32 бағдарламалаудың жақсы күндерінде терезе тұтқасын табу басқа бағдарламаларды бұзудың ең оңай әдісі болды. Windows жүйесіндегі барлық GUI бағдарламаларының экранда көрінбесе де терезесі болғаны анық. Басқа процеске дескрипторды (негізінен оған сілтеме) алу үшін бағдарламаны жазу арқылы сіз оған хабарламалар жібере аласыз. Бұл бағдарлама терезесін жасыру/көрсету сияқты кейбір негізгі операцияларға, сондай-ақ процесті оның жад кеңістігіне ерікті DLL жүктеуге және кодты орындауды бастауға мәжбүрлеу сияқты керемет нәрселерге мүмкіндік берді. DLL инъекциясынан кейін қызық басталды.

Алғашқы бір жарым айда бұл детектив мені көп алаңдатпады, ол менің машинамдағы VNC серверіне бір-екі рет қосылды. Бірақ белгілі бір сессия оның қызығушылығын тудыруы мүмкін. Мен сыныпта ойнауды жеңілдету үшін Minesweeper терезелерін жасыру үшін (оларды жаппай) кейбір C кодын жазып жатыр едім, жүйелік науадағы ақ VNC белгішесі қара болып кеткенін байқадым. Бұл оның қазір мені бақылап тұрғанын білдірді.

Мен оны елемеуге тырысып, әдеттегідей кодтауды жалғастырдым. Осы уақытта аппарат бөлменің бұрышындағы сансыз мониторлардың біріне максималды кадр жиілігін беруге тырысып баяулай бастады. Windows дерлік жауап беруді тоқтатты, шыдамым таусылғанда, мен жүйеден шығып, бір күнді аяқтадым.

Компьютер бөлмесіне келесі барған кезде, Коломбо әр уақытта дерлік менің не істеп жатқаныма қатты қызығушылық танытты. Шамамен төртінші рет кейін мен шештім: бұл туралы бірдеңе істеу керек.

Мойындаймын, парасатты, парасатты адам бұл мәселені тікелей өзімен немесе бастығымен ғана көтере алар еді. Дегенмен, мен әрқашан азғыруларға берілдім және тез арада мүлдем басқа стратегияны қабылдауға тырыстым.

- Бұл VNC серверінсіз ештеңе істей алмайсыз! — Мен өз-өзіме бірнеше рет байсалды және батыл айттым.

VNC өлтіру керек болды.

Мен студенттердің үлкен топтарымен компьютер бөлмесіне кіріп, мониторлармен бұрыштан алысырақ отыра бастадым. Бұл біраз уақыт жұмыс істеді және идеяларды сынауға біраз уақыт берді.

Менің бірінші әрекетім, сіз келісесіз деп ойлаймын, өте әлсіз болды. Жүйелік науадағы VNC белгішесін тінтуірдің оң жақ түймешігімен басу арқылы мен EXIT сиқырлы әріптері бар мәзірді көрдім. Өкінішке орай, әріптер сұр контурлық мәтінмен жазылған. Әкімші топтық саясат редакторы арқылы «Шығу» мәзір элементін өшірді. Мен Тапсырмалар реттеушісінен процесті жоюға тырыстым, бірақ, әрине, ол маған көрінбейтін болды, себебі ол басқа, артықшылықты тіркелгімен жұмыс істейді. Бұл нәтиже бермеді.

VNC сервері TCP 5900 портында жұмыс істейді, есімде. Менің келесі жоспарым бүлінген пакеттерді осы портқа оны бұзу үшін жіберу болды.

Мен кем дегенде бірнеше күн хаттамамен айналысып, 5900 портына жақсы құрылымдалған сұмдықтың әртүрлі формаларын жібердім және ол бұзылады деп үміттендім. Ақырында бұл да жұмыс істемеді.

Мен бұл нәрседен құтыла алмаймын деп ойлай бастадым, кенет маған таң қалды: бұл жерде терезе болуы керек! Біз оны көрсетуіміз керек. Мүмкін оның жақсы шырынды «Дыбысты өшіру» түймесі болады, мен оны жақсы пайдалана аламын!

Мен басқа процестің негізгі терезесінің тұтқасын табу үшін қазір тамаша дерлік C кодын іске қостым - және сенімді түрде VNC табылды. Саусақтарым терген кезде шабыттандым WM_SHOWWINDOW. Менің алдымда не көргенімді болжап көріңізші?

Ештеңе жоқ!

Енді мен қызық болдым... оның терезесі бар еді, бірақ ол менің хабарламаларымды елемейді. Мен оның жұмыс істейтініне көз жеткізу үшін кодты екі рет тексердім. Оны бірнеше басқа процестерде сынап көрдім және ол тамаша жұмыс істеді. Мен VNC терезесіне басқа хабарларды жіберуге тырыстым, бірақ ештеңе болмады.

Содан кейін маған тағы да таң қалды!

Өте қалыңға рахмет кітап Чарльз Петцольд Мен Win32 процестерінің жүйеде қалай жұмыс істейтінін мұқият зерттедім. Әрбір Win32 қолданбасында терезе және «хабарлама кезегі» бар. Пайдаланушы әрекеті арқылы іске қосылған хабарламалар, сондай-ақ Windows өзі жіберген хабарламалар кезекке келеді және оларды өңдеу жолын қолданбаның өзі шешеді.

Өз алдына онша қызық емес. Бірақ мен жеткілікті үлкен өңделмеген хабарлама кезегі Window Process Manager ілулі процеске араласу үшін эвристикалық рөл атқаратынын түсінгенде, мен таза серотонинді терлей бастадым.

Бір секундты босқа өткізбей, мен негізгі VNC терезесіне басқа хабарлама жіберуге дайындалып, C кодыма оралдым. WM_SHOWWINDOW. Циклда. Мәңгілік. Сонымен, хабарламалар көп. WM_SHOWWINDOW, мен қазір VNC оны елемеуге тырысатынын білетінмін ... оның қауіпі бар.

Мен өмірімдегі ең еркіндікті ұнататын 4Кбайт кодты құрастырдым және іске қостым. Шамамен үш секундтан кейін Windows бұл процесс туралы хабарлады vncserver.ехе жауап бермейді және мен бас тарта алмайтын ұсыныс жасады:

Бұл процесті аяқтағыңыз келе ме?

ӘРИНЕ!

Мойындауға рұқсат етіңізші, қалған күні мен өзіме риза болдым.

Бірнеше сағаттан кейін жаңа күшімді қорытуға жұмсадым, мен оны қалай қолданатынымды шештім. Сеансты оның көзінше өлтіру тым оңай болды. Менде жақсы идея болды - мүлдем жоғалып кету.

кейін розеткалық бағдарламалау арқылы отқа шомылдыру рәсімі Мен екі нәрсені жасайтын кодты жаза алатынымды түсіндім. Ол алдымен жаңадан босатылған 5900 TCP портын алады, бұрын түсініксіз VNC сервер процесі. Содан кейін ол көрсетілген машинаның VNC серверіне жаңа TCP қосылымын жасайды. Код екі розетка арасындағы барлық деректерді прокси етіп жібереді, ал Колумбо маған қосылып жатыр деп ойлайды, ал шын мәнінде ол мүлдем басқа VNC серверіне қосылатын болады.

Менің кодым мен және мен таңдаған басқа бейшара жан арасындағы құпия көпір болады. Бұл керемет болды.

Мен бірден жалған VNC көпірім жаза бастадым. Колумб маған бірнеше рет қосылды, бірақ мен оның алдында бағдарламалауды жалғастырдым. Мен порт нөмірлері және сияқты түсініктемелер сияқты анық нәрселерді жазғаныма қарамастан, ол менің не істеп жатқанымды білмейді деген қорытындыға келдім. // Прощай, жуткий шпион VNC.

Бірнеше күннен кейін кодты дұрыс жұмыс істей алмадым. Нашарлау үшін, мен жүйелік науадағы қара VNC белгішесімен үздіксіз дерлік жұмыс істедім. Ол қосылған кезде, мен кодты тексеру үшін портты боса алмадым.

Сол кезде білгенімде netcat!

Ақырында жүйкем басылды, мен шыдамсыз 17 жастағы жігіт едім. VNC серверінің ақ белгішесінің қайтадан қара болып кеткенін көріп, мен шошып кеттім, хабарлама кезегін толтырған бастапқы кодты ашып, оны оның көз алдында жүгірттім. Мен басқанша бірнеше секунд күттім End Process, оның көргеніне сенімді болу үшін.

Егер бұл түймені басу бұл маған тұрарлық екеніне толықтай сендіре алмаса, онда ол мониторлар бекінісінің артынан секіріп, маған тез жақындап, мені бөлмеден шығарып жіберді.

Нәтижесінде мені екі аптаға желіге қосуға тыйым салды. Әділ жаза, деп ойладым. Шамамен үш аптадан кейін VNC сервері жүктеу сценарийлерінен жоғалып кетті және ешқашан басқа жерде пайда болмады. Мен бұл оқиғада қандай да бір рөл атқарғанын білмедім, бірақ бұл менің VNC қаруымды бүкіл елдегі колледждің компьютерлік залдарында депрессияға ұшыраған студенттерге сату арқылы керемет бай болу жоспарымды толығымен бұзды.

Ақпарат көзі: www.habr.com

пікір қалдыру