Kodçular mübarizəsi: Mən VNC ilə o uşağa qarşı

İ bu blogda bir çox proqramçı hekayələri yayımlanıb. Köhnə axmaqlıqlarımı xatırlamağı sevirəm. Beləliklə, budur bir hekayə daha.

Mən kompüterlərə, xüsusən də proqramlaşdırmaya 11 yaşımda maraqlandıram. Orta məktəbin başlanğıcındadırboş vaxtımın əksər hissəsini C64 istifadə edərək keçirirdim və Basic dilində yazırdım, sonra isə pis kodları qayçı ilə kəsirdim. Şaka etmirəm, qayçı ilə.

Məktəbdən sonra (16 yaşımda) britaniyalı uşaqlar adətən kollecə gedirlər, orada təhsil alacaqları üç-dörd fənn seçirlər, sonra universitetə daxil olurlar. Evdəki bej rəngli qutuya və kaset çalara olan sevgimi nəzərə alaraq, kollec boyunca "İnformatika" öyrənməyin düzgün seçim olacağına qərar verdim.

Kurs, gözlədiyimdən daha çox xoşuma gəldi; orada ilk dəfə Pascal və Delphi ilə tanış oldum.

Dərslər arasında tələbələr komputer zalında olan istənilən boş kompüterdə işləyə bilirdilər. Təsəvvür edin: təxminən yüz nəfərlik oturacaqlı, masaların sıralandığı böyük bir otaq — monitorun sistem blokunun üstündə olduğu yerlər. Ventilyatorların davamlı cızırtısı, oynaqlar masalarda səs salaraq hər an işlətdirilir. Havadakı qəribə qoxu, sanki 50-100 hormon ifraz edən yeniyetmə mütəmadi olaraq yüz Pentium III çipini soyutmaq üçün dəyişir.

Sağlamlıq risklərinə baxmayaraq, boş bir anım olduqda kompüterin arxasında oturmağı sevirdim.

Otaqda bir admin vardı, orta yaşlı, orta boylu bir kişi, bu rola dözüm sürən pislik diktatoru olmaq əzmindən seçilmişdi. Düşünürəm ki, bu, kifayət deyil. O, işini sevir, həqiqətən də öz işinə bağlı idi. Ona təhsil kompüterlərini yaramazlığa istifadə etməmək üçün nəzarət etmək tapşırılmışdı.

Hələ də hiss edirəm ki, adminin mükafatı tutduğu tələbələrin sayından asılı idi. Tələbələri əllərində tutub kompüter zalından çıxartdığına görə. Mən əminəm ki, bu oğlan ipoteka kreditini vaxtından əvvəl bağlayıb.

O, kompüter zalının kənarında yerləşən, künc masasında oturmuşdu. Və inamla demək olar ki, onun məhsuldar monitorları, həyəcan verici qısa hamiləlik dövrü ilə çoxalmayı bacardı - çünki onların sayı həddindən artıq çox idi. Yalnız düşünmək qalırdı, görəsən, hamısına vaxt ayıra bilirmi. Təbii ki, zarafatləyirəm... mən onun işə çox ciddi yanaşdığını qeyd etmişdimmi?

O vaxtlar kompüter şəbəkəsi Windows 2000 sistemi altında işləyirdi. Tezliklə mən kəşf etdim ki, hər dəfə sistemə daxil olanda, admin hesabından masaüstünə uzaqdan çıxış üçün VNC serverini işə salan bir skript işlədilir. Hər dəfə bu oğlan sizin üzərinizdə nəzarət etmək istədikdə, birbaşa sizin maşınıza qoşulurdu və müşahidə edirdi. Bu, dəhşətli idi, indi düşündükdə isə bunun çox güman ki, qanunsuz olduğunu deyə bilərik.

Basic və C64 üzərində təcrübə qazandıqdan sonra, indi C-də və hətta bir qədər C++-da yazırdım. O vaxtlar mən D dilini də çox bəyəndim, çünki onun C++-ın bəzi çatışmazlıqlarını düzəltdiyini düşünürdüm.

Adətən, kompüter zalına girib D haqqında yenilikləri oxumaq və ya Digital Mars D kompilyatoru ilə oynamaq üçün gedirdim. Bəzən D-nin böyük gələcəyi barədə fikirlərimdən yayınıb, Win32-dəki digər proqramları pəncərələrinin descriptorları vasitəsilə hack etmək üçün C-də kod yazırdım.

Win32 proqramlaşdırma dövründə, digər proqramların pəncərə descriptorunu tapmaq ən sadə hack üsulu idi. Aydındır ki, Windows-da qrafik interfeysi olan bütün proqramlı bir pəncərə var idi, hətta ekranınızda görünməsə belə. Başqa bir prosesin descriptorunu (əsasən, ona bir link) çıxarmaq üçün bir proqram yazaraq, ona mesaj göndərə bilərdiniz. Bu, bəzi əsas əməliyyatlar, məsələn, proqram pəncərəsini gizlətmək/aydınlaşdırmaq və hətta prosesi öz yaddaş mühitində təsadüfi bir DLL yükləməyə və kodu işlətməyə məcbur etmək kimi maraqlı şeylər etməyə imkan tanıyırdı. DLL-in inyeksiyası ilə ən maraqlı şeylər başladı.

İlk bir buçuk ay boyunca bu dedektif beni pek rahatsız etmedi, yalnızca benim makinemdeki VNC sunucusuna bir ya da iki kez bağlandı. Ancak belirli bir oturum, muhtemelen onun ilgisini uyandırdı. Bir ders sırasında, Minesweeper pencerelerini kapatmadan saklamak için C diliyle biraz kod yazıyordum ve o anda sistem tepsisindeki beyaz VNC simgesinin siyaha döndüğünü fark ettim. Bu, artık beni izlediği anlamına geliyordu.

Ben de alıştığım gibi kodlamaya devam ettim, ona dikkat etmemeye çalışarak. Bu arada, makine, odanın köşesindeki sayısız monitöre maksimum kare hızını aktarmaya çalışırken yavaşlamaya başladı. Windows neredeyse yanıt vermeyi bıraktı, sabrım tükendiğinde sistemden çıktım ve günümü kapattım.

Sonraki bilgisayar salonu ziyaretlerimde Kolombo hemen hemen her seferinde yaptıklarıma canlı bir ilgi gösterdi. Dördüncü ziyaretten sonra bununla ilgili bir şeyler yapmam gerektiğine karar verdim.

Mantıklı, akılcı bir insanın bu sorunu doğrudan onunla veya müdürüyle gündeme getirebileceğini kabul ediyorum. Ancak ben her zaman bu tür bir cazibeye kapıldım ve kendimi tamamen farklı bir strateji seçme konusunda hızla ikna ettim.

— Bu VNC sunucusu olmadan hiçbir şey yapamazsın! — kendime birkaç kez soğukkanlılıkla karar verdim.

VNC'yi devre dışı bırakmak gerekiyordu.

Bilgisayar salonuna büyük öğrenci gruplarıyla girmeye başladım ve monitörlerin köşesinden mümkün olduğunca uzak oturdum. Bir süre bu işe yaradı ve fikirlerimi gözden geçirmek için biraz zaman kazandım.

İlk denemem, sanırım kabul edersiniz ki, oldukça zayıftı. Sistem tepsisindeki VNC simgesine sağ tıklayınca, E-X-I-T harflerini içeren bir menü gördüm. Ne yazık ki, harfler gri kontur metniyle yazılmıştı. Yönetici, grup politikası düzenleyicisi aracılığıyla 'Çıkış' menü maddesini devre dışı bırakmıştı. Görev Yöneticisi'nden süreci sonlandırmayı denedim ama elbette, başka, daha ayrıcalıklı bir hesabın altında çalıştığı için gözümden kaybolmuştu. Hiçbir şey olmadı.

VNC sunucusu TCP 5900 portu üzerinde çalışıyor, diye hatırladım. Bir sonraki planım, bu porta bozulmuş paketler göndermeyi içermekteydi, böylece onu askıya almayı amaçlıyordum.

Ən azı bir neçə gün protokolu araşdırırdım, 5900-cü porta düzgün strukturlaşdırılmış cürbəcür mesajlar göndərərək onu qıra biləcəyimi ümid edirdim. Nəticədə, bu da işləmedi.

Artıq bu şeydən qurtula bilməyəcəyimi düşünməyə başlamışdım, anidən mənə bir fikir gəldi: orada bir pəncərə olmalı idi! Onu göstərmək lazımdır. Bəlkə, orada gözəl, şirəli "Bağla" düyməsi var, onu mükəmməl istifadə edəcəyəm!

Başqa bir prosesin əsas pəncərə tanımını tapmaq üçün demək olar ki, mükəmməl C kodumu işə saldım - və həqiqətən də VNC-ni tapdım. Barmaqlarımın WM_SHOWWINDOWyazdığını görəndə şadlandım. Təhmin edin, nəyə baxırdım?

Heç bir şey!

İndi maraqlı oldum... onun pəncərəsi var idi, amma mənim mesajlarımı saymamışdı. Kodumu iki dəfə yoxladım ki, bunun işlədiyinə əmin olum. Onu bir neçə digər prosesdə test etdim və yaxşı işlədi. VNC pəncərəsinə başqa mesajlar göndərməyə çalışdım, amma yenə də heç bir şey olmadı.

Və burada yenidən bir fikir gəldi!

Çox qalın kitab Charles Petzolddan Win32 proseslərinin sistemin daxilində necə işlədiyini diqqətlə öyrənirdim. Hər Win32 tətbiqinin bir pəncərəsi və "mesajlar növbəsi" var. İstifadəçi qarşılıqlı əlaqəsi ilə yaranan mesajlar və eyni zamanda Windows-un göndərdiyi mesajlar növbəyə daxil olur, və tətbiq özü onları necə emal edəcəyinə qərar verir.

Öz-özlüyündə çox da maraqlı deyil. Amma başa düşdüm ki, əhəmiyyətli dərəcədə böyük bir emal edilməmiş mesaj növbəsi Window Process Manager-ın donmuş prosesi müdaxilə etməsi üçün bir göstəricidir, təmiz serotoninlə tərledim.

Bir an da itirmədən, VNC-nin əsas pəncərəsinə bir daha mesaj göndərmək üçün C koduma qayıtdım WM_SHOWWINDOW. Dövrü. Əbədi. Beləliklə, çoxlu mesajlar WM_SHOWWINDOW, VNC-nin tamamilə nəzərə almayacağını artıq bildiyim... öz riskinə.

Həyatımda ən sərbəst ruhlu 4 KB kodu yığdım və işə saldım. Təxminən üç saniyə sonra Windows bildirdi ki, vncserver.exe cavab vermir və məndən imtina edə bilməyəcəyim bir təklif etdi:

"Bu prosesi bitirmək istəyirsiniz?"

İlan, BƏƏ!

Gün ərzində qalan vaxtımı özümə təsəlli verici etdim.

Bir neçə saatlıq yeni super gücümü düşünməkdən sonra, onu necə istifadə edəcəyimə qərar verdim. Həmin sessiyanı onun gözləri qabağında öldürmək çox asan olardı. Mənim daha yaxşı bir fikrim var idi – tamamilə yoxa çıxmaq.

Sonra soket proqramlaşdırma ilə döyüş batirimi Mən başa düşdüm ki, iki şeyi yerinə yetirəcək bir kod yaza bilərəm. Əvvəlcə, vəziyyətdən azad edilmiş TCP 5900 portunu, əvvəllər VNC serverinin qəti bir prosesinin tutduğu portu tutacaq. Sonra müəyyən bir maşının VNC serveri ilə yeni bir TCP əlaqəsi yaradacaq. Kod, iki soket arasında bütün məlumatları proxy edəcək, Kolombo mənə qoşulduğunu düşünəcək, əslində isə tamamilə fərqli bir VNC serverinə qoşulacaq.

Mənim kodum mənim və seçdiyim başqa bir bədbəxt ruh arasında gizli bir körpü rolunu oynayacaq. Bu möcüzəvi idi.

Mən dərhal saxta VNC körpümü yazmağa başladım. Kolombo bir neçə dəfə mənə qoşulmuşdu, amma mən onun gözləri qarşısında proqramlaşdırmağa davam etdim. Mən onun heç bir şeydən xəbəri olmadığını başa düşdüm, baxmayaraq ki, mən aydın şeylər, məsələn, port nömrələri və " // Прощай, жуткий шпион VNC.

Bir neçə gün ərzində kodun düzgün işləməsini təmin edə bilmədim. Ən dəhşətlisi, mən demək olar ki, aramsız olaraq sistem treyindəki qara VNC simvolu ilə işləyirdim. O qoşularkən portu azad edə bilmirəm ki, kodumu yoxlayım.

O vaxt bunu bilsəydim netcat!

Nəhayət, nervlərim dözmədi, axırda mən dözümsüz 17 yaşlı bir oğlan idim. Yenə ağ VNC server simvolunun qara olmasını seyr edərkən, hiddətləndim, ilk kodu açdım ki, mesajlar sırasını doldururdum, və onun gözü qarşısında başladım. Mən hətta basmadan əvvəl bir neçə saniyə gözlədim. End Process, sadəcə onu gördüyümü təsdiqləmək üçün.

Əgər bu düyməyə basmaq mənə hələ də tam razılıq verməsəydi ki, buna dəyərdi, o zaman monitorların möhkəmliliyindən atlayaraq yanımda getməsi və məni otaqdan qovması, mütləq buna dəyərdi.

Nəticədə, mənim internetə daxil olmağım iki həftəlik qadağan edildi. Ədalətli cəza, düşündüm. Təxminən üç həftədən sonra VNC serveri yükləmə skriptlərindən itdi və artıq heç bir yerdə görünmədi. Mən heç vaxt bilmədim, bu hadisə bununla bağlı olub-olmadığını, amma o, bütün planımı dağıtdı — ölkə üzrə kollec kompüter zallarında əzilmiş tələbələrə VNC silahımı satmaqla nağd pul qazanmaq planını.

Mənbə: habr.com

DDoS qoruması olan saytlara etibarlı hosting satın alın, VPS VDS serverlər 🔥 DDoS qoruması olan saytlara etibarlı hosting satın alın, VPS VDS serverlər | ProHoster