Kodlayıcı Savaşı: Ben VNC Adamına Karşı

В bu blog Oldukça az sayıda programcı hikayesi yayınlandı. Eski aptalca şeyleri hatırlamayı seviyorum. İşte böyle bir hikaye daha.

Bilgisayarlara, özellikle de programlamaya ilk kez yaklaşık 11 yaşımdayken ilgi duymaya başladım. Lisenin başında bоBoş zamanımın çoğunu C64'ümü kurcalayarak ve BASIC yazarak, ardından hatalı kodu makasla keserek geçirdim. Şaka yapmıyorum, makas.

İngiliz çocukları okuldan sonra (16 yaş civarında) genellikle üniversiteye giderler ve üniversiteye gitmeden önce üç veya dört ders almayı tercih ederler. Evdeki bej kutuya ve kayıt cihazına olan sevgim göz önüne alındığında, üniversitede "bilgisayar bilimi" okumanın doğru seçim olduğuna karar verdim.

Kurstan beklediğimden daha fazla keyif aldım; Pascal ve Delphi ile ilk kez orada tanıştım.

Ders aralarındaki molalarda öğrenciler bilgisayar odasındaki herhangi bir boş makinede çalışabiliyorlardı. Düşünün: yaklaşık yüz kişi için tasarlanmış, sistem ünitesinin üzerinde monitörün durduğu masalar gibi makinelerle dolu sıra sıra masaların bulunduğu devasa bir oda. Fanlar sürekli uğultu yapıyor, fare topları masaların üzerinde vızıldıyor, bir an bile durmuyor. Havada tuhaf bir koku var, sanki 50-100 hormonlu genç periyodik olarak yüzlerce Pentium III yongasını soğutmak için değişiyormuş gibi.

Sağlık risklerine rağmen boş bir dakikam olduğunda bilgisayar başında oturmayı seviyordum.

Odada görev yapan yönetici, kötü bir diktatör olma konusundaki doyumsuz arzusu nedeniyle bu rol için seçilen kısa boylu, orta yaşlı bir adamdı. Bende öyle tahmin ediyorum. Görevde olmak yetersiz bir ifade; adam işini gerçekten seviyordu. Kimsenin okul bilgisayarını uygunsuz bir şey için kullanmamasını sağlamakla görevliydi.

Bugüne kadar, sezgilerim bana yöneticinin ikramiyesinin doğrudan elinden yakalayıp bilgisayar odasından dışarı çıkardığı öğrenci sayısına bağlı olduğunu söylüyor. Bu adamın ipoteğini erken ödediğine eminim.

Bilgisayar odasının en uzak köşesindeki köşe masasına oturdu. Ve doğurganlık monitörlerinin etkileyici derecede kısa bir gebelik süresiyle üremenin bir yolunu bulduğunu varsaymak doğruydu, o kadar çok vardı ki. İnsan sadece hepsini takip edecek zamanı olup olmadığını merak edebilirdi. Tabii şaka yapıyorum... işini çok ciddiye aldığını söylemiş miydim?

O zamanlar bilgisayar ağında Windows 2000 çalışıyordu. Kısa süre sonra, sisteme her giriş yaptığımda, masaüstüne uzaktan erişim için VNC sunucusunun yönetici hesabından başlatılmasını belirten bir komut dosyasının başlatıldığını keşfettim. Bu adam ne zaman seni gözetlemek istese doğrudan makinene bağlanıp izliyordu. Tüyler ürperticiydi ve şimdi düşünüyorum da muhtemelen yasa dışıdır.

BASIC ve C64'te dişlerimi kestikten sonra artık C ve hatta biraz C++ ile yazdım. O zamanlar C++'ın bazı eksikliklerini düzelten D diline hala çok ilgi duyuyordum.

D ile ilgili yeni bir şeyler okumak veya Digital Mars D derleyicisiyle oynamak için bilgisayar odasına giderdim.Bazen D'nin büyük geleceği hakkında düşünmekten dağılmışken, diğer Win32 programlarını pencerelerinden hacklemek için C kodu yazardım. kolları.

Win32 programlamanın eski güzel günlerinde, bir pencere tanıtıcısı bulmak diğer programları hacklemenin en kolay yöntemiydi. Açıkçası, Windows'taki tüm GUI programlarının ekranda görünmese bile bir penceresi vardı. Başka bir işlemin tanıtıcısını (esasen ona bir bağlantıyı) almak için bir program yazarak, ona mesaj gönderebilirsiniz. Bu, bir program penceresini gizlemek/göstermek gibi bazı temel işlemlerin yanı sıra, bir işlemi bellek alanına rastgele bir DLL yüklemeye ve kod yürütmeye başlamaya zorlamak gibi gerçekten harika şeylere de olanak sağladı. DLL enjeksiyonundan sonra eğlence başladı.

İlk bir buçuk ayda bu dedektif beni pek rahatsız etmedi; makinemdeki VNC sunucusuna yalnızca bir veya iki kez bağlandı. Ancak belirli bir oturum onun ilgisini çekmiş olabilir. Sınıfta oynamayı kolaylaştırmak için Mayın Tarlası pencerelerini gizlemek (kapatmadan) için bazı C kodları yazıyordum, sistem tepsisindeki beyaz VNC simgesinin siyaha döndüğünü fark ettim. Bu şu an beni izlediği anlamına geliyordu.

Onu görmezden gelmeye çalışarak her zamanki gibi kodlamaya devam ettim. Bu sırada makine, odanın köşesindeki sayısız monitörden birine maksimum kare hızını aktarmaya çalışarak yavaşlamaya başladı. Windows neredeyse yanıt vermiyordu, sabrım tükendiğinde oturumu kapattım ve günü bitirdim.

Bilgisayar odasına daha sonra yaptığım ziyaretlerde Colombo neredeyse her zaman yaptığım şeyle yakından ilgilendi. Yaklaşık dördüncü seferden sonra karar verdim: Bu konuda bir şeyler yapmam gerekiyor.

Makul ve rasyonel bir kişinin bu konuyu doğrudan kendisine veya patronuna iletebileceğini kabul ediyorum. Ancak her zaman ayartmaya yenik düştüm ve hızla kendimi tamamen farklı bir strateji benimsemeye ikna ettim.

- Bu VNC sunucusu olmadan hiçbir şey yapamazsınız! — Sakin ve kararlı bir şekilde kendime birkaç kez söyledim.

VNC'yi öldürmek gerekiyordu.

Kalabalık öğrenci grupları ile bilgisayar odasına gitmeye ve monitörlerin bulunduğu köşeden mümkün olduğunca uzakta oturmaya başladım. Bu bir süre işe yaradı ve bana fikirleri test etmem için biraz zaman verdi.

İlk denemem, sanırım siz de katılacaksınız, oldukça zayıftı. Sistem tepsisindeki VNC simgesine sağ tıkladığımda EXIT sihirli harflerinin bulunduğu bir menü gördüm. Maalesef harfler gri taslak metinle yazılmıştı. Yönetici, Grup İlkesi Düzenleyicisi aracılığıyla "Çıkış" menü öğesini devre dışı bıraktı. İşlemi Görev Yöneticisinden kapatmaya çalıştım ama tabii ki benim için görünmezdi çünkü farklı, daha ayrıcalıklı bir hesap altında çalışıyordu. İşe yaramadı.

VNC sunucusunun TCP bağlantı noktası 5900'de çalıştığını hatırladım. Bir sonraki planım bu bağlantı noktasını çökertmek için bozuk paketler göndermekti.

En azından birkaç günümü protokol üzerinde çalışarak, iyi yapılandırılmış çeşitli saçmalıkları 5900 numaralı bağlantı noktasına göndererek ve bozulacağını umarak geçirdim. Sonunda bu da işe yaramadı.

Bu şeyden kurtulamayacağımı düşünmeye başlamıştım ki aniden aklıma geldi: Orada bir pencere olmalı! Onu sergilememiz gerekiyor. Belki harika bir şekilde kullanabileceğim hoş ve çekici bir "Sessiz" düğmesi olur!

Başka bir işlemin ana penceresinin tutamacını bulmak için artık neredeyse mükemmel olan C kodumu çalıştırdım ve kesinlikle VNC bulundu. Parmaklarım yazarken ilham aldım WM_SHOWWINDOW. Önümde ne gördüğümü tahmin etmeye çalışır mısın?

Hiçbir şey!

Şimdi merak ettim... bir penceresi vardı ama mesajlarımı görmezden geliyordu. Çalıştığından emin olmak için kodumu iki kez kontrol ettim. Diğer birçok işlemde test ettim ve harika çalıştı. VNC penceresine başka mesajlar göndermeyi denedim ama hala bir şey yok.

Ve sonra yine aklıma geldi!

Çok kalın sayesinde kitap Charles Petzold Win32 işlemlerinin sistem içinde nasıl çalıştığını dikkatle inceledim. Her Win32 uygulamasının bir penceresinin yanı sıra bir "mesaj kuyruğu" da vardır. Kullanıcı etkileşimi tarafından tetiklenen mesajların yanı sıra Windows tarafından gönderilen mesajlar da bir kuyruğa ulaşır ve bunların nasıl işleneceğine uygulamanın kendisi karar verir.

Kendi başına pek ilginç değil. Ancak yeterince büyük işlenmemiş bir mesaj kuyruğunun, Windows İşlem Yöneticisi'nin askıda kalan bir sürece müdahale etmesi için buluşsal yöntem görevi gördüğünü fark ettiğimde, saf serotonin terlemeye başladım.

Bir saniye bile kaybetmeden C koduma döndüm ve ana VNC penceresine başka bir mesaj göndermeye hazırlandım. WM_SHOWWINDOW. Bir döngüde. Sonsuz. Yani çok fazla mesaj var. WM_SHOWWINDOW, artık VNC'nin kendisini tehlikeye atarak tamamen görmezden gelmeye çalışacağını biliyordum.

Hayatımın en özgürlüğü seven kodunun 4 KB'ını derledim ve çalıştırdım. Yaklaşık üç saniye sonra Windows işlemin gerçekleştiğini bildirdi. vncserver.ехе Cevap vermedi ve reddedemeyeceğim bir teklifte bulundu:

Bu işlemi tamamlamak istiyor musunuz?

TABİ LAN!

Günün geri kalanında kendimden dayanılmaz derecede memnun olduğumu itiraf etmeliyim.

Yeni süper gücümü sindirmek için birkaç saat harcadıktan sonra onu nasıl kullanacağıma karar verdim. Seansın gözünün önünde öldürmek çok kolaydı. Daha iyi bir fikrim vardı; tamamen ortadan kaybolmak.

Sonra soket programlama ile ateş vaftizi İki şeyi yapacak kod yazabileceğimi fark ettim. İlk olarak, daha önce bilgisiz VNC sunucu işlemi tarafından kullanılan, yeni serbest bırakılan 5900 numaralı TCP bağlantı noktasını işgal edecektir. Daha sonra belirtilen makinenin VNC sunucusuna yeni bir TCP bağlantısı oluşturacaktır. Kod, iki yuva arasındaki tüm verileri basitçe temsil edecek ve Columbo, aslında tamamen farklı bir VNC sunucusuna bağlanırken bana bağlandığını düşünecek.

Kodum benimle benim seçtiğim diğer zavallı ruhlar arasında gizli bir köprü görevi görecek. Harikaydı.

Hemen sahte VNC köprümü yazmaya başladım. Columbo benimle birkaç kez bağlantı kurdu ama ben onun önünde program yapmaya devam ettim. Port numaraları ve benzeri yorumlar gibi bariz şeyler yazmama rağmen ne yaptığım hakkında hiçbir fikri olmadığı sonucuna vardım. // Прощай, жуткий шпион VNC.

Birkaç gün sonra kodun düzgün çalışmasını sağlayamadım. Daha da kötüsü, sistem tepsisindeki siyah VNC simgesiyle neredeyse sürekli çalışıyordum. Bağlıyken kodumu test etmek için bağlantı noktasını serbest bırakamadım.

Eğer o zaman bilseydim netcat!

Sonunda sinirlerim bozuldu; sonuçta 17 yaşında sabırsız bir gençtim. Beyaz VNC sunucusu simgesinin tekrar siyaha döndüğünü görünce korktum, mesaj kuyruğunu dolduran orijinal kodu açtım ve onun gözlerinin önünde çalıştırdım. Tıklamadan önce birkaç saniye bile bekledim End Process, sadece onu gördüğünden emin olmak için.

Eğer o düğmeye basmak beni buna değeceğine tam anlamıyla ikna etmediyse, o zaman monitörlerden oluşan kalesinin arkasından atlayarak hızla yanıma gelip beni odadan dışarı çıkarmak için kesinlikle ikna etti.

Sonuç olarak iki hafta boyunca ağdan yasaklandım. Adil bir ceza diye düşündüm. Yaklaşık üç hafta sonra VNC sunucusu önyükleme komut dosyalarından kayboldu ve başka hiçbir yerde görünmedi. Yaşadığım olayın bunda herhangi bir rolü olup olmadığını hiç bilmiyordum ama bu olay, VNC silahımı ülke çapındaki üniversite bilgisayar salonlarında depresif öğrencilere satarak inanılmaz derecede zengin olma planımı tamamen mahvetti.

Kaynak: habr.com

Yorum ekle