Coder Battle: Aku vs. Sing VNC Guy

Π’ blog iki Cukup sawetara crita programmer wis diterbitake. Aku seneng ngeling-eling babagan bodho lawas. Lha, iki crita liyane.

Aku pisanan dadi kasengsem ing komputer, utamanΓ© programming, nalika umur 11 taun. Ing wiwitan SMA bΠΎAku ngginakaken paling wektu free tinkering karo C64 lan nulis BASIC, banjur Cut metu kode ala karo gunting. Aku ora guyon, gunting.

Sawise sekolah (udakara 16 taun), bocah-bocah Inggris biasane mlebu kuliah, ing ngendi dheweke milih sinau telung utawa papat mata pelajaran sadurunge mlebu universitas. Amarga tresnaku kanggo kothak beige lan tape recorder ing omah, aku mutusake yen sinau "ilmu komputer" ing kuliah minangka pilihan sing tepat.

Aku sante mesthi luwih saka aku samesthine; ing kana aku pisanan ketemu Pascal lan Delphi.

Sajrone istirahat antarane kelas, siswa bisa nggarap mesin gratis ing ruangan komputer. Mbayangno: kamar ageng, dirancang kanggo kira-kira satus wong, karo larik saka tabel kapenuhan mesin, kaya sing ngendi monitor ngadeg ing unit sistem. Penggemar terus-terusan humming, bal mouse ngempet ing meja, ora mandheg sedhela. Ana mambu aneh ing udhara, kaya 50-100 remaja hormonal sing periodik ganti kanggo kelangan atusan Kripik Pentium III.

Sanajan ana risiko kesehatan, aku seneng njagong ing komputer nalika aku duwe menit gratis.

Admin sing tugas ing kamar iku wong lanang setengah cendhek sing dipilih kanggo peran iki amarga kepinginan sing ora bisa marem dadi diktator jahat. Aku ngira mangkono. On tugas iku understatement; wong pancene tresna marang pakaryane. Dheweke ditugasake njaga ketertiban supaya ora ana sing nggunakake komputer sekolah kanggo perkara sing ora cocog.

Nganti saiki, intuisiku ngandhani yen bonus admin langsung gumantung saka jumlah siswa sing dicekel tangan lan dikawal metu saka ruangan komputer. Aku yakin wong iki mbayar hipotek luwih awal.

Dheweke lungguh ing pojok ruangan komputer ing meja pojok. Lan aman kanggo nganggep manawa monitor kesuburan dheweke nemokake cara kanggo ngasilake kanthi periode gestation sing nyengsemake, ana akeh. Siji mung bisa wonder apa dheweke pancene duwe wektu kanggo nglacak kabeh. Mesthi wae, aku guyon ... apa aku ngomong yen dheweke serius banget?

Ing wektu iku, jaringan komputer mlaku Windows 2000. Aku rauh katutup sing saben-saben aku mlebu menyang sistem, script dibukak sing kasebut miwiti server VNC saka akun administrator kanggo remot akses menyang desktop. Saben wong iki wanted kanggo Spy sampeyan, kang bakal nyambung langsung menyang mesin lan nonton. Iku serem, lan saiki aku mikir babagan iki, mbokmenawa ilegal.

Sawise Cut untu ing BASIC lan C64, Aku saiki wrote ing C lan malah C ++ sethitik. Ing wektu iku, aku isih kasengsem banget ing basa D, sing mbenerake sawetara kekurangan C ++, kaya sing dakdeleng.

Aku digunakake kanggo pindhah menyang kamar komputer kanggo maca soko anyar ing D utawa muter karo compiler Digital Mars D. Kadhangkala, nalika aku ditampani saka mikir bab mangsa gedhe D, Aku wrote kode C kanggo hack program Win32 liyane liwat jendhela sing. nangani.

Ing jaman biyen pemrograman Win32, nemokake gagang jendhela minangka cara paling gampang kanggo hack program liyane. Temenan, kabeh program GUI ing Windows duwe jendhela, sanajan ora katon ing layar. Kanthi nulis program kanggo njupuk gagang menyang proses liyane (utamane link menyang), sampeyan bisa ngirim pesen menyang. Iki ngidini kanggo sawetara operasi dhasar kaya ndhelikake / nuduhake jendhela program, uga bab tenan kelangan kaya meksa proses kanggo mbukak DLL kasepakatan menyang papan memori lan miwiti eksekusi kode. Sawise injeksi DLL, kesenengan diwiwiti.

Ing sasi kapisan lan setengah, detektif iki ora ngganggu aku, mung nyambung menyang server VNC ing mesinku mung sepisan utawa kaping pindho. Nanging siji sesi tartamtu bisa uga narik minate. Aku iki nulis sawetara kode C kanggo ndhelikake Minesweeper windows (tanpa nutup) kanggo wis luwih gampang kanggo muter ing kelas, nalika aku ngeweruhi sing lambang VNC putih ing tray sistem wis dadi ireng. Iki tegese dheweke saiki nonton aku.

Aku terus coding kaya biasane, nyoba nglirwakake dheweke. Kangge, mesin wiwit alon mudhun, nyoba kanggo ngirim pigura tingkat maksimum kanggo salah siji saka monitor kaetung ing sudhut kamar. Windows meh mandheg nanggapi, nalika kesabaranku entek, aku metu lan rampung kanggo dina.

Ing kunjungan sakteruse menyang kamar komputer, Colombo njupuk kapentingan banget ing apa aku iki meh saben wektu. Sawise kira-kira kaping papat, aku mutusake: Aku kudu nindakake babagan iki.

Aku ngakoni manawa wong sing rasional lan rasional mung bisa ngangkat masalah iki langsung karo dheweke utawa bose. Nanging, aku tansah nyerah marang nggodha lan kanthi cepet ngomong babagan strategi sing beda.

- Sampeyan ora bisa nindakake apa-apa tanpa server VNC iki! - Aku kalem lan decisively marang aku kaping pirang-pirang.

Sampeyan perlu kanggo mateni VNC.

Aku miwiti menyang kamar komputer karo kelompok gedhe saka mahasiswa lan lungguh minangka adoh saka sudhut karo monitor sabisa. Iki makarya sawetara wektu lan menehi sawetara wektu kanggo nyoba gagasan.

Usaha pertamaku, aku mikir sampeyan bakal setuju, cukup lemah. Klik-tengen ing lambang VNC ing tray sistem, Aku weruh menu karo huruf gaib EXIT. Sayange, huruf kasebut ditulis nganggo teks garis abu-abu. Administrator wis mateni item menu "Metu" liwat Editor Kebijakan Grup. Aku nyoba kanggo matèni proses saka Task Manager, nanging mesthi ora katon kanggo kula amarga mlaku ing beda, akun liyane hak istimewa. Iku ora bisa metu.

Server VNC mlaku ing port TCP 5900, aku eling. Rencana sabanjure yaiku ngirim paket sing rusak menyang port iki supaya bisa nabrak.

Aku ngginakaken ing paling sawetara dina tinkering karo protokol, ngirim macem-macem formulir uga-kastruktur omong kosong kanggo port 5900 lan wus bakal break. Ing pungkasan, iku uga ora bisa.

Aku wis wiwit mikir yen aku ora bakal bisa nyingkirake perkara iki, nalika aku tiba-tiba weruh: mesthi ana jendhela! Kita kudu nampilake. Mungkin bakal duwe tombol "Bisu" jus sing apik sing bisa digunakake!

Aku mbukak kode C saiki meh sampurna kanggo nemokake gagang menyang jendhela utama proses liyane - lan cukup manawa, VNC ketemu. Aku rumangsa inspirasi nalika drijiku ngetik WM_SHOWWINDOW. Coba tebak apa sing dakdeleng ing ngarepku?

ora ana apa-apa!

Saiki aku penasaran ... ana jendhela, nanging ora nggatekake pesenku. Aku pindho mriksa kode kanggo mesthekake yen bisa. Dites ing sawetara proses liyane lan kerjane apik. Aku nyoba ngirim pesen liyane menyang jendhela VNC, lan isih ora ana.

Lan banjur esuke aku maneh!

Thanks kanggo banget kandel buku Charles Petzold Aku kasebut kanthi teliti, sinau carane Win32 pangolahan bisa nang sistem. Saben aplikasi Win32 duwe jendhela uga "antrian pesen". Pesen sing dipicu dening interaksi pangguna, uga pesen sing dikirim dening Windows dhewe, teka ing antrian, lan aplikasi kasebut dhewe nemtokake cara ngolah.

Ora banget menarik dhewe. Nanging nalika aku temen maujud sing antrian pesen unprocessed cukup gedhe tumindak minangka heuristic kanggo Window Proses Manager campur ing proses Hung, Aku wiwit kringet serotonin murni.

Tanpa mbuwang liya, aku bali menyang kode C, nyiapake kanggo ngirim pesen liyane menyang jendhela VNC utama WM_SHOWWINDOW. Ing siklus. Langgeng. Dadi, akeh pesen. WM_SHOWWINDOW, sing saiki aku ngerti VNC bakal nyoba nglirwakake rampung ... ing bebaya.

Aku nyawiji lan mbukak 4KB kode paling kebebasan-maha gesang kawula. Sawise kira-kira telung detik, Windows nglaporake manawa proses kasebut vncserver.Π΅Ρ…Π΅ ora mangsuli, lan nggawe tawaran sing ora bisa ditolak:

Apa sampeyan pengin ngrampungake proses iki?

NERAKA YA!

Ayo kula ngakoni yen ing dina liyane aku seneng banget karo awakku dhewe.

Sawise sawetara jam ngentekake nyerna superpower anyar, aku mutusake carane nggunakake. Gampang banget mung mateni sesi sing ana ing ngarepe. Aku duwe ide sing luwih apik - ilang kabeh.

sawise baptis geni karo program soket Aku nyadari yen aku bisa nulis kode sing bakal nindakake rong perkara. Kaping pisanan bakal ngenggoni port TCP 5900 sing mentas dibebasake, sing sadurunge dikuwasani proses server VNC sing ora ngerti. Banjur bakal nggawe sambungan TCP anyar menyang server VNC saka mesin kasebut. Kode mung bakal proxy kabeh data antarane loro sockets, lan Columbo bakal mikir sing nyambungake kanggo kula, nalika nyatane bakal nyambung menyang server VNC temen beda.

Kodeku bakal dadi jembatan rahasia antarane aku lan sawetara jiwa miskin liyane sing dipilih. Iku apik banget.

Aku langsung miwiti nulis jembatan VNC palsu. Columbo disambungake kanggo kula kaping pirang-pirang, nanging aku terus program ing ngarepe. Aku teka menyang kesimpulan sing wis ora idea apa aku iki, sanajan aku wrote iku ketok kaya nomer port lan komentar kaya // ΠŸΡ€ΠΎΡ‰Π°ΠΉ, ΠΆΡƒΡ‚ΠΊΠΈΠΉ шпион VNC.

Sawise sawetara dina, kode ora bisa digunakake kanthi bener. Kanggo nggawe prakara Samsaya Awon, Aku iki digunakake meh terus-terusan karo lambang VNC ireng ing tray sistem. Nalika disambungake, aku ora bisa ngeculake port kanggo nyoba kodeku.

Yen aku wis ngerti netcat!

Pungkasane, sarafku ilang; sawise kabeh, aku dadi wong lanang umur 17 taun sing ora sabar. Nonton lambang server VNC putih dadi ireng maneh, Aku freaked metu, mbukak kode asli sing populated antrian pesen, lan mlayu ing ngarepe mripate. Aku malah ngenteni sawetara detik sadurunge ngeklik End Process, mung kanggo mesthekake yen dheweke weruh.

Yen menet tombol kasebut ora bisa nggawe uwong yakin yen pancen pantes, mula dheweke mlumpat saka mburi benteng monitor supaya cepet nyedhaki aku lan ngajak aku metu saka kamar.

AkibatΓ©, aku dicekal saka jaringan kanggo rong minggu. Paukuman sing adil, pikirku. Sawise kira-kira telung minggu, server VNC ilang saka skrip boot lan ora katon ing papan liya. Aku ora tau ngerti apa kedadean sandi main peran ing iki utawa ora, nanging rampung ngrusak rencana kanggo njaluk fabulously sugih dening ngedol bedhil VNC kanggo mahasiswa nandhang sungkowo ing aula komputer College saindhenging negara.

Source: www.habr.com

Add a comment