Pertempuran Coder: Saya vs. Lelaki VNC Itu

Π’ blog ini Beberapa kisah pengaturcara telah diterbitkan. Saya suka mengenangkan perkara bodoh lama saya. Nah, ini satu lagi cerita sebegitu.

Saya mula meminati komputer terutamanya pengaturcaraan ketika berumur lebih kurang 11 tahun. Pada awal sekolah menengah bΠΎSaya menghabiskan sebahagian besar masa lapang saya bermain-main dengan C64 saya dan menulis BASIC, kemudian memotong kod buruk dengan gunting. Saya tidak bergurau, gunting.

Selepas sekolah (sekitar umur 16 tahun), kanak-kanak British biasanya pergi ke kolej, di mana mereka memilih untuk belajar tiga atau empat subjek sebelum ke universiti. Memandangkan cinta saya terhadap kotak kuning air dan perakam pita di rumah, saya memutuskan bahawa belajar "sains komputer" di kolej adalah pilihan yang tepat.

Saya menikmati kursus lebih daripada yang saya jangkakan; di sana saya pertama kali bertemu Pascal dan Delphi.

Semasa rehat antara kelas, pelajar boleh bekerja pada mana-mana mesin percuma di dalam bilik komputer. Bayangkan: sebuah bilik besar, direka untuk kira-kira seratus orang, dengan deretan meja yang dipenuhi dengan mesin, seperti tempat monitor diletakkan pada unit sistem. Peminat sentiasa bersenandung, bola tetikus berdengung di atas meja, tidak berhenti sesaat. Terdapat bau aneh di udara, seolah-olah 50-100 remaja hormon secara berkala berubah untuk menyejukkan ratusan cip Pentium III.

Walaupun risiko kesihatan, saya suka duduk di depan komputer apabila saya mempunyai masa lapang.

Pentadbir yang bertugas di dalam bilik itu adalah seorang lelaki pendek separuh umur yang dipilih untuk peranan ini kerana keinginannya yang tidak pernah puas untuk menjadi diktator yang jahat. Saya rasa begitu. Bertugas adalah meremehkan; lelaki itu sangat menyukai pekerjaannya. Dia ditugaskan untuk menjaga ketenteraman supaya tiada sesiapa menggunakan komputer sekolah untuk perkara yang tidak sepatutnya.

Sehingga hari ini, intuisi saya memberitahu saya bahawa bonus admin secara langsung bergantung kepada bilangan pelajar yang ditangkap oleh tangan dan diiringi keluar dari bilik komputer. Saya pasti lelaki ini melunaskan gadai janjinya lebih awal.

Dia duduk di sudut jauh bilik komputer di meja sudut. Dan adalah selamat untuk mengandaikan bahawa pemantau kesuburannya telah menemui cara untuk membiak dengan tempoh kehamilan yang sangat singkat, terdapat begitu banyak daripada mereka. Seseorang hanya boleh tertanya-tanya sama ada dia benar-benar mempunyai masa untuk menjejaki mereka semua. Sudah tentu, saya bergurau... adakah saya menyebut bahawa dia mengambil kerjanya dengan sangat serius?

Pada masa itu, rangkaian komputer sedang menjalankan Windows 2000. Saya tidak lama kemudian mendapati bahawa setiap kali saya log masuk ke sistem, skrip dilancarkan yang menyatakan memulakan pelayan VNC daripada akaun pentadbir untuk akses jauh ke desktop. Setiap kali lelaki ini ingin mengintip anda, dia akan menyambung terus ke mesin anda dan menonton. Ia menyeramkan, dan sekarang saya memikirkannya, mungkin menyalahi undang-undang.

Setelah memotong gigi saya pada BASIC dan C64, saya kini menulis dalam C dan juga sedikit C++. Pada masa itu, saya masih sangat berminat dengan bahasa D, yang membetulkan beberapa kekurangan C++, seperti yang saya lihat ketika itu.

Saya pernah pergi ke bilik komputer untuk membaca sesuatu yang baru di D atau bermain dengan pengkompil Digital Mars D. Kadang-kadang, semasa saya terganggu daripada memikirkan masa depan yang hebat D, saya menulis kod C untuk menggodam program Win32 yang lain melalui tetingkap mereka mengendalikan.

Pada zaman dahulu pengaturcaraan Win32, mencari pemegang tetingkap adalah kaedah paling mudah untuk menggodam program lain. Jelas sekali, semua program GUI pada Windows mempunyai tetingkap, walaupun ia tidak muncul pada skrin. Dengan menulis program untuk mendapatkan semula pemegang kepada proses lain (pada asasnya pautan kepadanya), anda boleh menghantar mesej kepadanya. Ini membenarkan beberapa operasi asas seperti menyembunyikan/menunjukkan tetingkap program, serta perkara yang sangat menarik seperti memaksa proses untuk memuatkan DLL sewenang-wenangnya ke dalam ruang ingatannya dan mula melaksanakan kod. Selepas suntikan DLL, keseronokan bermula.

Dalam satu setengah bulan pertama, detektif ini tidak banyak mengganggu saya; ia disambungkan ke pelayan VNC pada mesin saya hanya sekali atau dua kali. Tetapi satu sesi tertentu mungkin telah menarik minatnya. Saya sedang menulis beberapa kod C untuk menyembunyikan tetingkap Minesweeper (tanpa menutupnya) untuk memudahkan bermain di dalam kelas, apabila saya perasan bahawa ikon VNC putih dalam dulang sistem telah bertukar menjadi hitam. Ini bermakna dia kini sedang memerhatikan saya.

Saya meneruskan pengekodan seperti biasa, cuba mengabaikannya. Sementara itu, mesin mula perlahan, cuba menghantar kadar bingkai maksimum ke salah satu monitor yang tidak terkira banyaknya di sudut bilik. Windows hampir berhenti bertindak balas, apabila kesabaran saya habis, saya log keluar dan selesai untuk hari itu.

Pada lawatan berikutnya ke bilik komputer, Colombo sangat berminat dengan apa yang saya lakukan hampir setiap masa. Selepas kira-kira kali keempat, saya memutuskan: Saya perlu melakukan sesuatu tentang perkara ini.

Saya mengakui bahawa orang yang munasabah dan rasional boleh dengan mudah membangkitkan isu ini secara langsung dengan dia atau bosnya. Walau bagaimanapun, saya sentiasa menyerah kepada godaan dan dengan cepat bercakap tentang diri saya untuk menggunakan strategi yang sama sekali berbeza.

- Anda tidak boleh berbuat apa-apa tanpa pelayan VNC ini! β€” Saya dengan tenang dan tegas memberitahu diri saya beberapa kali.

Ia adalah perlu untuk membunuh VNC.

Saya mula masuk ke dalam bilik komputer dengan kumpulan pelajar yang besar dan duduk sejauh mungkin dari sudut dengan monitor yang mungkin. Ini berfungsi untuk seketika dan memberi saya sedikit masa untuk menguji idea.

Percubaan pertama saya, saya rasa anda akan bersetuju, agak lemah. Mengklik kanan pada ikon VNC dalam dulang sistem, saya melihat menu dengan huruf ajaib EXIT. Malangnya, huruf itu ditulis dalam teks garis besar kelabu. Pentadbir telah melumpuhkan item menu "Keluar" melalui Editor Dasar Kumpulan. Saya cuba mematikan proses daripada Pengurus Tugas, tetapi sudah tentu ia tidak dapat dilihat oleh saya kerana ia berjalan di bawah akaun yang berbeza dan lebih istimewa. Ia tidak berjaya.

Pelayan VNC berjalan pada port TCP 5900, saya teringat. Rancangan saya seterusnya adalah untuk menghantar paket yang rosak ke port ini untuk merosakkannya.

Saya menghabiskan sekurang-kurangnya beberapa hari memikirkan protokol, menghantar pelbagai bentuk omong kosong yang tersusun dengan baik ke port 5900 dan berharap ia akan pecah. Akhirnya, itu juga tidak berjaya.

Saya sudah mula berfikir bahawa saya tidak akan dapat menyingkirkan perkara ini, apabila tiba-tiba saya terfikir: mesti ada tingkap di sana! Kita perlu memaparkannya. Mungkin ia akan mempunyai butang "Redam" berair yang bagus yang boleh saya gunakan dengan baik!

Saya menjalankan kod C saya yang kini hampir sempurna untuk mencari pemegang ke tetingkap utama proses lain - dan sudah pasti, VNC telah ditemui. Saya berasa terinspirasi apabila jari saya menaip WM_SHOWWINDOW. Cuba teka apa yang saya nampak depan saya?

tiada apa-apa!

Sekarang saya ingin tahu... ia mempunyai tingkap, tetapi ia mengabaikan mesej saya. Saya menyemak semula kod saya untuk memastikan ia berfungsi. Mengujinya pada beberapa proses lain dan ia berfungsi dengan baik. Saya cuba menghantar mesej lain ke tetingkap VNC, dan masih tiada apa-apa.

Dan kemudian saya sedar semula!

Terima kasih kepada yang sangat tebal buku itu Charles Petzold Saya mengkaji dengan teliti bagaimana proses Win32 berfungsi di dalam sistem. Setiap aplikasi Win32 mempunyai tetingkap dan juga "baris gilir mesej". Mesej yang dicetuskan oleh interaksi pengguna, serta mesej yang dihantar oleh Windows sendiri, tiba dalam baris gilir, dan aplikasi itu sendiri memutuskan cara memprosesnya.

Tidak begitu menarik dengan sendirinya. Tetapi apabila saya menyedari bahawa baris gilir mesej tidak diproses yang cukup besar bertindak sebagai heuristik untuk Pengurus Proses Tetingkap untuk campur tangan dalam proses tergantung, saya mula mengeluarkan peluh serotonin tulen.

Tanpa membuang masa, saya kembali ke kod C saya, bersedia untuk menghantar mesej lain ke tetingkap utama VNC WM_SHOWWINDOW. Dalam satu kitaran. Abadi. Jadi, banyak mesej. WM_SHOWWINDOW, yang kini saya tahu VNC akan cuba mengabaikan sepenuhnya... dalam bahaya.

Saya menyusun dan menjalankan 4KB kod yang paling mencintai kebebasan dalam hidup saya. Selepas kira-kira tiga saat, Windows melaporkan bahawa proses itu vncserver.Π΅Ρ…Π΅ tidak menjawab, dan membuat tawaran yang saya tidak boleh menolak:

Adakah anda ingin menyelesaikan proses ini?

NERAKA YA!

Biar saya akui bahawa sepanjang hari saya sangat gembira dengan diri saya sendiri.

Selepas beberapa jam dihabiskan untuk menghadam kuasa besar baru saya, saya memutuskan bagaimana saya akan menggunakannya. Terlalu mudah untuk membunuh sesi itu betul-betul di hadapannya. Saya mempunyai idea yang lebih baik - untuk hilang sepenuhnya.

Selepas pembaptisan api dengan pengaturcaraan soket Saya menyedari bahawa saya boleh menulis kod yang akan melakukan dua perkara. Ia mula-mula akan menduduki port TCP 5900 yang baru dibebaskan, sebelum ini diduduki oleh proses pelayan VNC yang tidak tahu. Kemudian ia akan membuat sambungan TCP baharu ke pelayan VNC mesin yang ditentukan. Kod itu hanya akan memproksi semua data antara dua soket, dan Columbo akan fikir dia menyambung kepada saya, sedangkan sebenarnya dia akan menyambung ke pelayan VNC yang sama sekali berbeza.

Kod saya akan bertindak sebagai jambatan rahsia antara saya dan beberapa jiwa miskin lain yang saya pilih. Ianya indah.

Saya segera mula menulis jambatan VNC palsu saya. Columbo berhubung dengan saya beberapa kali, tetapi saya terus berprogram di hadapannya. Saya membuat kesimpulan bahawa dia tidak tahu apa yang saya lakukan, walaupun saya menulis perkara yang jelas seperti nombor port dan komen seperti itu // ΠŸΡ€ΠΎΡ‰Π°ΠΉ, ΠΆΡƒΡ‚ΠΊΠΈΠΉ шпион VNC.

Selepas beberapa hari saya tidak dapat membuat kod berfungsi dengan betul. Lebih memburukkan keadaan, saya bekerja hampir secara berterusan dengan ikon VNC hitam dalam dulang sistem. Semasa ia disambungkan, saya tidak dapat melepaskan port untuk menguji kod saya.

Jika saya tahu ketika itu netcat!

Akhirnya, saraf saya hilang; lagipun, saya seorang lelaki berumur 17 tahun yang tidak sabar. Melihat ikon pelayan VNC putih bertukar hitam semula, saya terkejut, membuka kod asal yang mengisi baris gilir mesej, dan menjalankannya di hadapan matanya. Saya juga menunggu beberapa saat sebelum mengklik End Process, hanya untuk memastikan dia melihatnya.

Jika menekan butang itu tidak meyakinkan saya sepenuhnya bahawa ia berbaloi, maka dia melompat dari belakang kubu pemantaunya untuk segera menghampiri saya dan membawa saya keluar dari bilik sudah tentu melakukannya.

Akibatnya, saya telah dilarang daripada rangkaian selama dua minggu. Hukuman yang adil, saya fikir. Selepas kira-kira tiga minggu, pelayan VNC hilang daripada skrip but dan tidak pernah muncul di tempat lain. Saya tidak pernah tahu sama ada insiden saya memainkan peranan dalam perkara ini atau tidak, tetapi ia benar-benar merosakkan rancangan saya untuk menjadi sangat kaya dengan menjual senjata VNC saya kepada pelajar yang tertekan di dewan komputer kolej di seluruh negara.

Sumber: www.habr.com

Tambah komen