Pertempuran Pembuat Kode: Saya vs. Orang VNC Itu

Π’ blog ini Cukup banyak cerita programmer yang telah diterbitkan. Aku suka mengenang hal-hal bodohku yang dulu. Nah, inilah cerita serupa lainnya.

Saya pertama kali tertarik pada komputer, khususnya pemrograman, ketika saya berusia sekitar 11 tahun. Pada awal sekolah menengah bΠΎSaya menghabiskan sebagian besar waktu luang saya mengutak-atik C64 dan menulis BASIC, lalu memotong kode yang buruk dengan gunting. Aku tidak bercanda, gunting.

Sepulang sekolah (sekitar usia 16 tahun), anak-anak Inggris biasanya melanjutkan ke perguruan tinggi, di mana mereka memilih untuk mempelajari tiga atau empat mata pelajaran sebelum melanjutkan ke universitas. Mengingat kecintaan saya pada kotak krem ​​​​dan tape recorder di rumah, saya memutuskan bahwa mempelajari β€œilmu komputer” di perguruan tinggi adalah pilihan yang tepat.

Saya menikmati kursus ini lebih dari yang saya harapkan; disanalah saya pertama kali bertemu Pascal dan Delphi.

Selama istirahat antar kelas, siswa dapat mengerjakan mesin gratis mana pun di ruang komputer. Bayangkan: sebuah ruangan besar, dirancang untuk sekitar seratus orang, dengan deretan meja berisi mesin, seperti tempat monitor berdiri di unit sistem. Para penggemar terus-menerus bersenandung, bola-bola tikus berdengung di atas meja, tidak berhenti sedetik pun. Ada bau aneh di udara, seolah-olah 50-100 hormon remaja diubah secara berkala untuk mendinginkan ratusan chip Pentium III.

Meskipun ada risiko kesehatan, saya suka duduk di depan komputer ketika saya punya waktu luang.

Admin yang bertugas di ruangan itu adalah seorang pria paruh baya pendek yang dipilih untuk peran ini karena keinginannya yang tak terpuaskan untuk menjadi seorang diktator jahat. Saya rasa begitu. Bertugas adalah pernyataan yang meremehkan; pria itu sangat menyukai pekerjaannya. Ia bertugas menjaga ketertiban agar tidak ada orang yang menggunakan komputer sekolah untuk hal yang tidak pantas.

Sampai hari ini, intuisi saya mengatakan bahwa bonus admin secara langsung bergantung pada jumlah siswa yang dia tangkap dan diantar keluar dari ruang komputer. Saya cukup yakin orang ini melunasi hipoteknya lebih awal.

Dia duduk di sudut jauh ruang komputer di meja sudut. Dan dapat diasumsikan bahwa pemantau kesuburannya telah menemukan cara untuk bereproduksi dengan masa kehamilan yang sangat singkat, jumlahnya sangat banyak. Orang hanya bisa bertanya-tanya apakah dia benar-benar punya waktu untuk mencatat semuanya. Tentu saja, saya bercanda... apakah saya menyebutkan bahwa dia menganggap serius pekerjaannya?

Saat itu, jaringan komputer menjalankan Windows 2000. Saya segera menemukan bahwa setiap kali saya masuk ke sistem, sebuah skrip diluncurkan yang menentukan memulai server VNC dari akun administrator untuk akses jarak jauh ke desktop. Kapan pun orang ini ingin memata-matai Anda, dia akan terhubung langsung ke mesin Anda dan menonton. Itu menyeramkan, dan kalau dipikir-pikir, mungkin ilegal.

Setelah menggunakan BASIC dan C64, saya sekarang menulis dalam C dan bahkan sedikit C++. Saat itu, saya masih sangat tertarik dengan bahasa D, yang memperbaiki beberapa kekurangan C++, seperti yang saya lihat saat itu.

Saya biasa masuk ke ruang komputer untuk membaca sesuatu yang baru di D atau bermain dengan kompiler Digital Mars D. Kadang-kadang, ketika saya sedang teralihkan dari memikirkan masa depan D yang cerah, saya menulis kode C untuk meretas program Win32 lainnya melalui jendelanya. menangani.

Di masa lalu pemrograman Win32, menemukan pegangan jendela adalah metode termudah untuk meretas program lain. Jelas sekali, semua program GUI di Windows memiliki jendela, meskipun tidak muncul di layar. Dengan menulis sebuah program untuk mengambil pegangan ke proses lain (pada dasarnya tautan ke proses tersebut), Anda dapat mengirim pesan ke proses tersebut. Hal ini memungkinkan beberapa operasi dasar seperti menyembunyikan/menampilkan jendela program, serta hal-hal keren seperti memaksa proses memuat DLL sembarang ke dalam ruang memorinya dan mulai mengeksekusi kode. Setelah injeksi DLL, kesenangan pun dimulai.

Dalam satu setengah bulan pertama, detektif ini tidak terlalu mengganggu saya; ia terhubung ke server VNC di mesin saya hanya sekali atau dua kali. Namun ada satu sesi tertentu yang mungkin menarik minatnya. Saya sedang menulis beberapa kode C untuk menyembunyikan jendela Minesweeper (tanpa menutupnya) agar lebih mudah bermain di kelas, ketika saya perhatikan bahwa ikon VNC putih di baki sistem telah berubah menjadi hitam. Ini berarti dia sekarang sedang memperhatikanku.

Saya melanjutkan coding seperti biasa, mencoba mengabaikannya. Sementara itu, mesin mulai melambat, mencoba mengirimkan frame rate maksimum ke salah satu monitor yang tak terhitung jumlahnya di sudut ruangan. Windows hampir berhenti merespons, ketika kesabaran saya habis, saya logout dan menyelesaikan hari itu.

Pada kunjungan berikutnya ke ruang komputer, Kolombo menaruh perhatian besar pada apa yang saya lakukan hampir setiap waktu. Setelah sekitar keempat kalinya, saya memutuskan: Saya perlu melakukan sesuatu mengenai hal ini.

Saya akui bahwa orang yang berakal sehat dan rasional bisa saja mengangkat masalah ini secara langsung kepada dirinya atau atasannya. Namun, saya selalu menyerah pada godaan dan dengan cepat membujuk diri saya sendiri untuk menerapkan strategi yang sama sekali berbeda.

- Anda tidak dapat melakukan apa pun tanpa server VNC ini! – Aku dengan tenang dan tegas berkata pada diriku sendiri beberapa kali.

Itu perlu untuk membunuh VNC.

Saya mulai masuk ke ruang komputer dengan sekelompok besar siswa dan duduk sejauh mungkin dari sudut dengan monitor. Ini berhasil untuk sementara waktu dan memberi saya waktu untuk menguji ide.

Upaya pertama saya, saya pikir Anda akan setuju, cukup lemah. Mengklik kanan ikon VNC di system tray, saya melihat menu dengan huruf ajaib EXIT. Sayangnya, surat-surat itu ditulis dalam teks bergaris abu-abu. Administrator telah menonaktifkan item menu "Keluar" melalui Editor Kebijakan Grup. Saya mencoba menghentikan proses dari Task Manager, tapi tentu saja proses tersebut tidak terlihat oleh saya karena proses tersebut berjalan di bawah akun lain yang lebih istimewa. Itu tidak berhasil.

Server VNC berjalan pada port TCP 5900, saya ingat. Rencana saya selanjutnya adalah mengirim paket yang rusak ke port ini untuk menghentikannya.

Saya menghabiskan setidaknya beberapa hari mengutak-atik protokol, mengirimkan berbagai bentuk omong kosong yang terstruktur dengan baik ke port 5900 dan berharap itu akan rusak. Pada akhirnya, itu juga tidak berhasil.

Saya sudah mulai berpikir bahwa saya tidak akan bisa menyingkirkan benda ini, ketika tiba-tiba saya sadar: pasti ada jendela di sana! Kita perlu menampilkannya. Mungkin itu akan memiliki tombol "Bungkam" yang menarik dan dapat saya manfaatkan dengan baik!

Saya menjalankan kode C saya yang sekarang hampir sempurna untuk menemukan pegangan ke jendela utama dari proses lain - dan tentu saja, VNC ditemukan. Saya merasa terinspirasi ketika jari saya mengetik WM_SHOWWINDOW. Coba tebak apa yang saya lihat di depan saya?

Tidak!

Sekarang saya penasaran... ia memiliki jendela, tetapi ia mengabaikan pesan saya. Saya memeriksa ulang kode saya untuk memastikannya berfungsi. Mengujinya pada beberapa proses lain dan berfungsi dengan baik. Saya mencoba mengirim pesan lain ke jendela VNC, dan tetap tidak ada.

Dan kemudian saya sadar lagi!

Berkat sangat tebal buku itu Charles Petzold Saya mempelajari dengan cermat cara kerja proses Win32 di dalam sistem. Setiap aplikasi Win32 memiliki jendela serta "antrian pesan". Pesan yang dipicu oleh interaksi pengguna, serta pesan yang dikirim oleh Windows itu sendiri, masuk dalam antrian, dan aplikasi itu sendiri yang memutuskan cara memprosesnya.

Tidak terlalu menarik. Namun ketika saya menyadari bahwa antrian pesan yang belum diproses cukup besar bertindak sebagai heuristik bagi Window Process Manager untuk campur tangan dalam proses yang macet, saya mulai mengeluarkan serotonin murni.

Tanpa membuang waktu sedetik pun, saya kembali ke kode C saya, bersiap mengirim pesan lain ke jendela utama VNC WM_SHOWWINDOW. Dalam sebuah siklus. Abadi. Jadi, banyak pesan. WM_SHOWWINDOW, yang sekarang saya tahu VNC akan coba abaikan sepenuhnya... dengan risikonya.

Saya menyusun dan menjalankan 4KB kode yang paling mencintai kebebasan dalam hidup saya. Setelah sekitar tiga detik, Windows melaporkan proses tersebut vncserver.Π΅Ρ…Π΅ tidak menjawab, dan mengajukan tawaran yang tidak bisa saya tolak:

Apakah Anda ingin menyelesaikan proses ini?

YEAH!

Izinkan saya mengakui bahwa sepanjang sisa hari itu saya sangat puas dengan diri saya sendiri.

Setelah beberapa jam mencerna kekuatan super baru saya, saya memutuskan bagaimana saya akan menggunakannya. Terlalu mudah untuk menghentikan sesi tepat di depannya. Aku punya ide yang lebih baik – menghilang sepenuhnya.

Setelah baptisan api dengan pemrograman soket Saya menyadari bahwa saya dapat menulis kode yang akan melakukan dua hal. Pertama-tama ia akan menempati port TCP 5900 yang baru dibebaskan, yang sebelumnya ditempati oleh proses server VNC yang tidak mengerti. Kemudian akan membuat koneksi TCP baru ke server VNC dari mesin yang ditentukan. Kode tersebut hanya akan mem-proxy semua data di antara dua soket, dan Columbo akan mengira dia terhubung ke saya, padahal sebenarnya dia akan terhubung ke server VNC yang sama sekali berbeda.

Kode saya akan bertindak sebagai jembatan rahasia antara saya dan jiwa malang lainnya yang saya pilih. Itu sangat indah.

Saya segera mulai menulis jembatan VNC palsu saya. Columbo menghubungi saya beberapa kali, tetapi saya terus memprogram di depannya. Saya sampai pada kesimpulan bahwa dia tidak tahu apa yang saya lakukan, meskipun saya menulis hal-hal yang jelas seperti nomor port dan komentar sejenisnya // ΠŸΡ€ΠΎΡ‰Π°ΠΉ, ΠΆΡƒΡ‚ΠΊΠΈΠΉ шпион VNC.

Setelah beberapa hari saya tidak dapat membuat kode berfungsi dengan benar. Lebih buruk lagi, saya bekerja hampir terus menerus dengan ikon VNC hitam di baki sistem. Saat terhubung, saya tidak bisa melepaskan port untuk menguji kode saya.

Jika saja aku mengetahuinya saat itu netcat!

Pada akhirnya, kegugupanku melemah; lagipula, aku adalah seorang remaja berusia 17 tahun yang tidak sabaran. Melihat ikon server VNC putih berubah menjadi hitam lagi, saya panik, membuka kode asli yang mengisi antrian pesan, dan menjalankannya di depan matanya. Saya bahkan menunggu beberapa detik sebelum mengklik End Process, hanya untuk memastikan dia melihatnya.

Jika menekan tombol itu tidak sepenuhnya meyakinkanku bahwa itu layak dilakukan, maka dia melompat dari balik monitornya untuk segera mendekatiku dan mengantarku keluar ruangan, tentu saja berhasil.

Akibatnya, saya dilarang dari jaringan selama dua minggu. Hukuman yang adil, pikirku. Setelah sekitar tiga minggu, server VNC menghilang dari skrip boot dan tidak pernah muncul di tempat lain. Saya tidak pernah tahu apakah kejadian yang saya alami berperan dalam hal ini atau tidak, tapi kejadian ini benar-benar menghancurkan rencana saya untuk menjadi kaya raya dengan menjual senjata VNC saya kepada mahasiswa depresi di ruang komputer perguruan tinggi di seluruh negeri.

Sumber: www.habr.com

Tambah komentar