Koder Döyüşü: Mən O VNC Adamına qarşı

В bu blog Bir neçə proqramçı nağılları nəşr olundu. Köhnə axmaq şeylərimi xatırlamağı xoşlayıram. Yaxşı, belə bir hekayə daha var.

Təxminən 11 yaşım olanda ilk dəfə kompüterlərə, xüsusən də proqramlaşdırmaya maraq göstərdim. Orta məktəbin əvvəlində bоBoş vaxtımın çox hissəsini C64-lə məşğul olmağa və BASIC yazmağa, sonra qayçı ilə pis kodu kəsməyə sərf etdim. Mən zarafat etmirəm, qayçı.

Məktəbdən sonra (təxminən 16 yaş) Britaniyalı uşaqlar adətən kollecə gedirlər və burada universitetə ​​getməzdən əvvəl üç və ya dörd fənni öyrənməyi seçirlər. Evdəki bej qutuya və maqnitofona olan sevgimi nəzərə alaraq qərara aldım ki, kollecdə “kompüter elmləri” öyrənmək düzgün seçimdir.

Kursdan gözlədiyimdən çox həzz aldım; Paskal və Delfi ilə ilk dəfə orada tanış oldum.

Dərslər arası fasilələr zamanı tələbələr kompüter otağında istənilən pulsuz maşında işləyə bilərdilər. Təsəvvür edin: təxminən yüz nəfər üçün nəzərdə tutulmuş nəhəng bir otaq, sistem blokunda monitorun dayandığı kimi maşınlarla dolu masalar. Azarkeşlər daim zümzümə edir, siçan topları masalarda vızıldayır, bir saniyə belə dayanmır. Havada qəribə bir qoxu var, sanki 50-100 hormonal yeniyetmə yüzlərlə Pentium III çipini soyutmaq üçün vaxtaşırı dəyişir.

Səhhətimlə bağlı risklərə baxmayaraq, boş dəqiqə vaxtım olanda kompüter arxasında oturmağı xoşlayırdım.

Otaqdakı növbətçi admin qısaboylu, orta yaşlı bir kişi idi, onu şər diktator olmaq arzusundan dolayı bu rola seçmişdilər. güman edirəm ki. Növbətçi bir ifadədir; oğlan həqiqətən işini sevirdi. Ona asayişi qorumaq tapşırılmışdı ki, heç kim məktəb kompüterindən uyğun olmayan bir şey üçün istifadə etməsin.

Bu günə qədər intuisiyam mənə deyir ki, admin bonusu birbaşa onun əlindən tutub kompüter otağından çıxardığı tələbələrin sayından asılıdır. Əminəm ki, bu adam ipotekanı vaxtından əvvəl ödəyib.

O, kompüter otağının uzaq küncündə bir künc masasında oturdu. Və güman etmək təhlükəsiz idi ki, onun məhsuldarlıq nəzarətçiləri təsirli bir şəkildə qısa bir hamiləlik dövrü ilə çoxalmaq üçün bir yol tapdılar, onların çoxu var idi. Yalnız onun həqiqətən hamısını izləməyə vaxtı olub-olmadığını düşünmək olardı. Təbii ki, zarafat edirəm... işinə çox ciddi yanaşdığını demişəm?

O zaman kompüter şəbəkəsi Windows 2000 ilə işləyirdi. Tezliklə aşkar etdim ki, mən sistemə hər dəfə daxil olanda masaüstünə uzaqdan daxil olmaq üçün idarəçi hesabından VNC serverinin işə salınmasını təyin edən skript işə salınıb. Bu oğlan nə vaxt sizə casusluq etmək istəsə, o, birbaşa maşınınıza qoşulub baxırdı. Bu ürpertici idi və indi bu barədə düşünəndə, yəqin ki, qanunsuzdur.

BASIC və C64-də dişlərimi kəsərək indi C və hətta bir az C++ da yazdım. O vaxtlar C++ dilinin bəzi çatışmazlıqlarını düzəldən D dili ilə hələ çox maraqlanırdım, necə ki, o vaxt gördüm.

D-də yeni bir şey oxumaq və ya Digital Mars D kompilyatoru ilə oynamaq üçün kompüter otağına girirdim.Bəzən, D-nin böyük gələcəyi haqqında düşünməkdən yayındığım halda, digər Win32 proqramlarını onların pəncərəsindən sındırmaq üçün C kodunu yazdım. tutacaqlar.

Win32 proqramlaşdırmasının yaxşı köhnə günlərində pəncərə tutacağı tapmaq digər proqramları sındırmaq üçün ən asan üsul idi. Aydındır ki, Windows-dakı bütün GUI proqramları ekranda görünməsə belə, bir pəncərəyə sahib idi. Başqa bir prosesə (əsasən ona bir keçid) tutacaq əldə etmək üçün proqram yazmaqla siz ona mesaj göndərə bilərsiniz. Bu, proqram pəncərəsini gizlətmək/göstərmək kimi bəzi əsas əməliyyatlara, eləcə də prosesi öz yaddaş sahəsinə ixtiyari DLL yükləməyə və kodu icra etməyə məcbur etmək kimi çox gözəl şeylərə imkan verdi. DLL inyeksiyasından sonra əyləncə başladı.

İlk ay yarımda bu detektiv məni çox narahat etmədi, o, mənim maşınımdakı VNC serverinə cəmi bir və ya iki dəfə qoşuldu. Ancaq bir seans onun marağına səbəb ola bilər. Sinifdə oynamağı asanlaşdırmaq üçün Minesweeper pəncərələrini gizlətmək üçün (onları bağlamadan) bəzi C kodu yazırdım, sistem tepsisindəki ağ VNC işarəsinin qara rəngə çevrildiyini gördüm. Bu o demək idi ki, o, indi məni izləyir.

Mən ona məhəl qoymamağa çalışaraq həmişəki kimi kodlamağa davam etdim. Bu vaxt maşın maksimum kadr sürətini otağın küncündəki saysız-hesabsız monitorlardan birinə ötürməyə çalışaraq yavaşlamağa başladı. Windows demək olar ki, cavab verməyi dayandırdı, səbrim tükəndikdə mən sistemdən çıxdım və günü bitirdim.

Kompüter otağına sonrakı səfərlərində Kolombo demək olar ki, hər dəfə etdiyim işlərlə çox maraqlanırdı. Təxminən dördüncü dəfədən sonra qərara gəldim: bununla bağlı nəsə etməliyəm.

Etiraf edirəm ki, ağlabatan, rasional insan bu məsələni birbaşa onun və ya müdirinin qarşısında qaldıra bilərdi. Bununla belə, mən həmişə şirnikləndiricilərə təslim oldum və tez bir zamanda tamamilə fərqli bir strategiya qəbul etmək üçün özümü danışdım.

- Bu VNC server olmadan heç nə edə bilməzsiniz! – Özümə bir neçə dəfə sakit və qətiyyətlə dedim.

VNC-ni öldürmək lazım idi.

Böyük tələbə qrupları ilə kompüter otağına girməyə və monitorlarla küncdən mümkün qədər uzaqda oturmağa başladım. Bu bir müddət işlədi və fikirlərimi sınamaq üçün mənə bir az vaxt verdi.

İlk cəhdim, məncə, razılaşarsınız, olduqca zəif oldu. Sistem tepsisindəki VNC işarəsinə sağ tıklayarak EXIT sehrli hərfləri olan bir menyu gördüm. Təəssüf ki, hərflər boz kontur mətnlə yazılmışdır. Administrator Qrup Siyasəti Redaktoru vasitəsilə "Çıxış" menyu elementini deaktiv etdi. Prosesi Tapşırıq Menecerindən öldürməyə çalışdım, lakin təbii ki, bu, mənim üçün görünməz idi, çünki o, fərqli, daha imtiyazlı hesab altında işləyirdi. Bu alınmadı.

VNC serveri TCP 5900 portunda işləyir, xatırladım. Növbəti planım bu portu məhv etmək üçün xarab paketləri göndərmək idi.

Ən azı bir neçə gün protokolla məşğul oldum, 5900-cü porta müxtəlif formalarda yaxşı qurulmuş axmaqlıqlar göndərdim və onun pozulacağına ümid etdim. Sonda bu da işə yaramadı.

Artıq bu şeydən qurtula bilməyəcəyimi düşünməyə başlamışdım ki, birdən başıma gəldi: orada bir pəncərə olmalıdır! Biz bunu nümayiş etdirməliyik. Bəlkə onun yaxşı istifadə edə biləcəyim gözəl şirəli “Səssiz” düyməsi olacaq!

Başqa bir prosesin əsas pəncərəsinin sapını tapmaq üçün indi demək olar ki, mükəmməl C kodumu işlətdim - və əminəm ki, VNC tapıldı. Barmaqlarım yazanda ilham aldım WM_SHOWWINDOW. Qarşımda nə gördüyümü təxmin etməyə çalışın?

Heç bir şey yoxdur!

İndi mənə maraqlı idi... pəncərəsi var idi, amma mesajlarıma məhəl qoymurdu. İşlədiyinə əmin olmaq üçün kodumu iki dəfə yoxladım. Bir neçə başqa prosesdə sınaqdan keçirdi və əla işlədi. VNC pəncərəsinə başqa mesajlar göndərməyə çalışdım, amma yenə də heç nə.

Və sonra yenə ağlıma gəldi!

Çox qalın sayəsində kitab Charles Petzold Mən Win32 proseslərinin sistem daxilində necə işlədiyini diqqətlə öyrəndim. Hər bir Win32 proqramında bir pəncərə, eləcə də "mesaj növbəsi" var. İstifadəçinin qarşılıqlı əlaqəsi nəticəsində yaranan mesajlar, eləcə də Windows-un özü tərəfindən göndərilən mesajlar növbəyə daxil olur və onların necə işlənməsinə proqram özü qərar verir.

Özü də çox maraqlı deyil. Ancaq kifayət qədər böyük bir işlənməmiş mesaj növbəsinin Pəncərə Proses Menecerinin asılmış prosesə müdaxilə etməsi üçün bir evristik rol oynadığını başa düşdükdə, saf serotonini tərləməyə başladım.

Bir saniyə itirmədən, əsas VNC pəncərəsinə başqa bir mesaj göndərməyə hazırlaşaraq C koduma qayıtdım. WM_SHOWWINDOW. Bir dövrədə. Əbədi. Beləliklə, çoxlu mesajlar. WM_SHOWWINDOW, indi VNC-nin tamamilə göz ardı etməyə çalışacağını bildiyim... təhlükəsi ilə.

Həyatımın ən azadlıqsevər kodunun 4KB-ni tərtib etdim və işlətdim. Təxminən üç saniyə sonra Windows prosesin olduğunu bildirdi vncserver.ехе cavab vermir və sadəcə imtina edə bilməyəcəyim bir təklif etdi:

Bu prosesi başa çatdırmaq istəyirsiniz?

HƏLİ!

Etiraf edim ki, günün qalan hissəsində özümdən dözülməz dərəcədə razı qaldım.

Yeni super gücümü həzm etməyə bir neçə saat sərf etdikdən sonra ondan necə istifadə edəcəyimə qərar verdim. Onun qarşısında sessiyanı öldürmək çox asan idi. Daha yaxşı bir fikrim var idi - tamamilə yox olmaq.

Sonra socket proqramlaşdırma ilə atəş vəftiz Mən başa düşdüm ki, mən iki şeyi edəcək kod yaza bilərəm. O, ilk növbədə əvvəllər clueless VNC server prosesi tərəfindən işğal edilmiş yeni azad edilmiş TCP port 5900-u tutacaq. Sonra göstərilən maşının VNC serverinə yeni TCP bağlantısı yaradacaq. Kod sadəcə olaraq iki rozetka arasındakı bütün məlumatları proksiləşdirəcək və Columbo mənimlə əlaqə qurduğunu düşünəcək, əslində isə tamamilə fərqli bir VNC serverinə qoşulacaq.

Kodum mənim və seçdiyim başqa bir yoxsul ruh arasında gizli körpü rolunu oynayacaq. Bu gözəl idi.

Mən dərhal saxta VNC körpüsümü yazmağa başladım. Columbo bir neçə dəfə mənə qoşuldu, amma mən onun qarşısında proqramlamağa davam etdim. Mən belə nəticəyə gəldim ki, port nömrələri və kimi şərhlər kimi açıq-aşkar şeylər yazsam da, onun nə etdiyim barədə heç bir fikri yoxdur. // Прощай, жуткий шпион VNC.

Bir neçə gündən sonra kodun düzgün işləməsini ala bilmədim. Vəziyyəti daha da pisləşdirmək üçün sistem tepsisindəki qara VNC işarəsi ilə demək olar ki, davamlı işləyirdim. Qoşularkən kodumu yoxlamaq üçün portu buraxa bilmədim.

O vaxt bilsəydim netcat!

Sonda əsəblərim yerindən çıxdı, mən 17 yaşlı səbirsiz bir oğlan idim. Ağ VNC server ikonasının yenidən qara rəngə çevrildiyini seyr edərək, dəhşətə gəldim, mesaj növbəsini dolduran orijinal kodu açdım və onu gözləri önündə gəzdirdim. Hətta klikləməzdən əvvəl bir neçə saniyə gözlədim End Process, sadəcə gördüyünə əmin olmaq üçün.

Əgər bu düyməni basmağım məni buna dəyər olduğuna tam inandırmadısa, o, monitor qalasının arxasından sıçrayaraq tez mənə yaxınlaşdı və məni otaqdan çıxartdı.

Nəticədə iki həftəlik şəbəkədən kənarlaşdırıldım. Düşündüm ki, ədalətli cəza. Təxminən üç həftədən sonra VNC serveri yükləmə skriptlərindən itdi və heç vaxt başqa yerdə görünmədi. Hadisəmin bunda hər hansı rol oynayıb-oynamadığını heç vaxt bilmirdim, lakin bu, mənim VNC silahımı ölkədəki kollec kompüter salonlarında depressiyaya düşən tələbələrə sataraq inanılmaz dərəcədə zəngin olmaq planımı tamamilə alt-üst etdi.

Mənbə: www.habr.com

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