Coder Battle: Kuring vs éta VNC Guy

В blog ieu Sababaraha dongéng programer parantos diterbitkeun. Abdi resep nginget-nginget hal-hal bodo baheula. Muhun, ieu carita sejen.

Kuring mimiti resep kana komputer, khususna program, nalika kuring umurna kira-kira 11 taun. Di awal SMA bоKuring spent lolobana waktu luang kuring tinkering kalawan C64 kuring jeung nulis BASIC, lajeng motong kaluar kode goréng kalayan gunting. Abdi henteu bercanda, gunting.

Sanggeus sakola (kira-kira umur 16), barudak Inggris biasana kuliah, dimana aranjeunna milih diajar tilu atanapi opat mata pelajaran sateuacan angkat ka universitas. Dibikeun cinta kuring pikeun kotak beige sareng tape recorder di bumi, kuring mutuskeun yén diajar "ilmu komputer" dina kuliah mangrupikeun pilihan anu pas.

Kuring ngarasakeun kursus leuwih ti kuring disangka; di dinya kuring mimiti papanggih jeung Pascal jeung Delphi.

Salila istirahat antara kelas, siswa tiasa dianggo dina sagala mesin bébas di kamar komputer. Bayangkeun: kamar badag, dirancang pikeun ngeunaan saratus urang, kalawan jajar tabel ngeusi mesin, kawas nu mana monitor nangtung dina Unit sistem. Fans terus humming, bal mouse buzzing dina tabel, teu eureun sadetik. Aya bau aneh dina hawa, saolah-olah 50-100 rumaja hormonal périodik ngarobah kana niiskeun ratusan chip Pentium III.

Sanaos résiko kaséhatan, kuring resep calik dina komputer nalika kuring ngagaduhan menit gratis.

Admin dina tugas di rohangan éta hiji lalaki tengah-yuswa pondok, anu dipilih pikeun peran ieu kusabab kahayang insatiable na pikeun jadi diktator jahat. Kuring nyangka kitu. Dina tugas mangrupa understatement; bodo bener dipikacinta pakasaban na. Anjeunna ditugaskeun pikeun ngajaga katertiban supados teu aya anu ngagunakeun komputer sakola pikeun hal anu teu pantes.

Nepi ka poé ieu, intuisi kuring ngabejaan yen bonus admin urang langsung gumantung kana jumlah murid anjeunna bray ku leungeun jeung dikawal kaluar ti kamar komputer. Kuring yakin yén lalaki ieu mayar hipotikna awal.

Anjeunna diuk di pojok jauh tina rohangan komputer dina meja sudut. Tur éta aman nganggap yén monitor kasuburan na geus kapanggih cara pikeun baranahan kalawan periode gestation impressively pondok, aya kitu loba di antarana. Hiji-hijina tiasa heran naha anjeunna leres-leres ngagaduhan waktos pikeun ngalacak aranjeunna sadayana. Tangtos, kuring ngabodor... naha kuring nyarios yén anjeunna serius pisan kana padamelanna?

Waktu éta, jaringan komputer ieu ngajalankeun Windows 2000. Kuring geura-giru manggihan yén unggal waktu kuring asup kana sistem, skrip dibuka nu dieusian dimimitian server VNC ti akun administrator pikeun aksés jauh kana desktop nu. Iraha baé ieu hayang nénjo dina anjeun, anjeunna bakal nyambung langsung ka mesin anjeun sarta lalajo. Éta pikasieuneun, sareng ayeuna kuring mikir ngeunaan éta, sigana haram.

Sanggeus motong huntu kuring dina BASIC na C64, Kuring ayeuna nulis dina C komo saeutik C ++. Waktu éta, kuring masih pisan museurkeun basa D, nu dilereskeun sababaraha shortcomings C ++, sakumaha kuring nempo eta lajeng.

I dipaké pikeun lebet kana kamar komputer pikeun maca hal anyar dina D atawa maénkeun kalayan kompiler Digital Mars D. Sakapeung, bari kuring ieu kacau ti pamikiran ngeunaan masa depan hébat D, Kuring nulis kode C pikeun hack program Win32 séjén ngaliwatan jandela maranéhna. cecekelan.

Dina jaman baheula program Win32, mendakan cecekelan jandela mangrupikeun cara anu paling gampang pikeun hack program anu sanés. Jelas, sadaya program GUI dina Windows ngagaduhan jandela, sanaos henteu muncul dina layar. Ku nulis program pikeun meunangkeun cecekelan kana prosés sejen (dasarna tumbu ka dinya), Anjeun bisa ngirim pesen ka dinya. Ieu ngamungkinkeun pikeun sababaraha operasi dasar sapertos nyumput / nunjukkeun jandela program, ogé hal-hal anu saé sapertos maksa prosés pikeun ngamuat DLL sawenang-wenang kana rohangan mémori sareng ngamimitian ngaéksekusi kode. Saatos suntikan DLL, kasenangan dimimitian.

Dina satengah bulan kahiji, detektif ieu henteu ngaganggu kuring; éta nyambung ka server VNC dina mesin kuring ngan sakali atanapi dua kali. Tapi hiji sési tinangtu mungkin geus piqued minat na. Kuring nulis sababaraha kode C pikeun nyumputkeun jandéla Minesweeper (tanpa nutup aranjeunna) pikeun make deui gampang maén di kelas, nalika kuring noticed yén ikon VNC bodas dina sistem baki geus jadi hideung. Ieu ngandung harti yén anjeunna ayeuna ningali kuring.

Kuring neruskeun coding sakumaha biasa, nyoba malire anjeunna. Samentara éta, mesin mimiti ngalambatkeun turun, nyoba ngirimkeun laju pigura maksimum ka salah sahiji monitor countless di juru kamar. Windows ampir lirén ngaréspon, nalika kasabaran kuring béak, kuring kaluar sareng réngsé sadinten.

Dina kunjungan saterusna ka kamar komputer, Colombo nyandak minat getol kana naon anu kuring lakukeun ampir unggal waktu. Saatos ngeunaan kaopat kalina, kuring mutuskeun: Abdi kedah ngalakukeun hal ngeunaan ieu.

Kuring ngaku yén jalma anu lumrah, rasional tiasa ngan saukur ngangkat masalah ieu langsung sareng anjeunna atanapi bosna. Najan kitu, kuring salawasna nyerah kana godaan sarta gancang dikaitkeun sorangan kana nganut strategi lengkep beda.

- Anjeun teu bisa ngalakukeun nanaon tanpa server VNC ieu! - Kuring kalem tur decisively ngawartoskeun sorangan sababaraha kali.

Ieu diperlukeun pikeun maéhan VNC.

Kuring mimiti lebet ka kamar komputer sareng kelompok ageung mahasiswa sareng calik sajauh-jauh ti pojok sareng monitor-gancang. Ieu digawé bari jeung masihan kuring sababaraha waktu pikeun nguji gagasan.

usaha munggaran kuring, Jigana anjeun bakal satuju, éta geulis lemah. Katuhu-klik dina ikon VNC dina baki sistem, Kuring nempo hiji menu jeung hurup magic EXIT. Hanjakal, hurup éta ditulis dina téks outline abu. Administrator parantos nganonaktipkeun item ménu "Kaluar" ngalangkungan Editor Kabijakan Grup. Kuring diusahakeun maéhan prosés tina Tugas Manajer, tapi tangtu éta halimunan keur kuring sabab ieu ngajalankeun dina béda, akun leuwih istiméwa. Teu hasil.

Server VNC dijalankeun dina port TCP 5900, kuring émut. Rencana kuring salajengna nyaéta ngirim pakét anu rusak ka palabuhan ieu pikeun ngadat.

Kuring spent sahenteuna sababaraha poé tinkering kalawan protokol, ngirim sagala rupa wangun crap well-terstruktur ka port 5900 sarta miharep éta bakal megatkeun. Tungtungna, éta ogé henteu hasil.

Kuring mimiti mikir yén kuring moal tiasa ngaleungitkeun hal ieu, nalika kuring ujug-ujug émut: kedah aya jandela! Urang kudu mintonkeun eta. Meureun eta bakal boga juicy nice "Jempe" tombol nu abdi tiasa nempatkeun ka pamakéan hébat!

Kuring ngajalankeun kode C kuring ayeuna ampir sampurna pikeun manggihan cecekelan kana jandela utama prosés sejen - sarta cukup yakin, VNC kapanggih. Kuring ngarasa inspirasi nalika ramo kuring ngetik WM_SHOWWINDOW. Coba tebak naon anu kuring tingali di hareup kuring?

teu nanaon!

Ayeuna kuring panasaran... aya jandela, tapi teu malire pesen kuring. Kuring ganda dipariksa kode kuring pikeun mastikeun gawéna. Diuji dina sababaraha prosés anu sanés sareng éta damel saé. Kuring diusahakeun ngirim pesen sejenna ka jandela VNC, sarta masih nanaon.

Lajeng eta dawned on kuring deui!

Hatur nuhun kana kandel pisan nyaéta buku Charles Petzold I taliti diajar kumaha prosés Win32 jalan di jero sistem. Unggal aplikasi Win32 gaduh jandela sareng "antrian pesen". Pesen anu dipicu ku interaksi pangguna, kitu ogé pesen anu dikirim ku Windows sorangan, sumping dina antrian, sareng aplikasi sorangan mutuskeun kumaha ngolahna.

Teu pisan metot dina diri. Tapi nalika kuring sadar yén antrian pesen unprocessed cukup badag acted salaku heuristik pikeun Window Prosés Manajer campur dina prosés ngagantung, Kuring mimiti kesang serotonin murni.

Tanpa wasting kadua, Kuring balik ka kode C kuring, Nyiapkeun pikeun ngirim pesen sejen ka jandela VNC utama WM_SHOWWINDOW. Dina hiji siklus. Langgeng. Janten, seueur pesen. WM_SHOWWINDOW, nu ayeuna kuring terang VNC bakal nyoba malire lengkep ... di peril na.

Kuring nyusun sareng ngajalankeun 4KB tina kode anu paling mikacinta kabebasan dina kahirupan kuring. Saatos sakitar tilu detik, Windows ngalaporkeun yén prosésna vncserver.ехе henteu ngajawab, sareng ngadamel tawaran anu kuring ngan saukur teu tiasa nolak:

Naha anjeun badé ngarengsekeun prosés ieu?

HÉH!

Hayu atuh ngaku yén pikeun sésana poé kuring éta unbearably pleased kalawan sorangan.

Sanggeus sababaraha jam spent digesting adidaya anyar kuring, Kuring mutuskeun kumaha kuring bakal ngagunakeun eta. Éta gampang teuing ngan ukur maéhan sési di payuneun anjeunna. Kuring ngagaduhan ide anu langkung saé - ngaleungit lengkep.

saatos baptisan seuneu kalayan programming stop kontak Kuring sadar yen kuring bisa nulis kode nu bakal ngalakukeun dua hal. Ieu mimitina bakal nempatan port TCP 5900 karek dibébaskeun, saméméhna dikawasaan ku prosés server VNC clueless. Lajeng bakal nyieun sambungan TCP anyar ka server VNC tina mesin dieusian. Kodeu ngan saukur bakal proxy sadaya data antara dua sockets, sarta Columbo bakal pikir anjeunna nyambung ka kuring, lamun dina kanyataanana anjeunna bakal nyambung ka server VNC lengkep béda.

Kode abdi bakal meta salaku sasak rusiah antara kuring jeung sababaraha jiwa goréng séjén tina pilihan kuring. Ieu éndah.

Kuring langsung ngamimitian nulis sasak VNC palsu kuring. Columbo nyambung ka kuring sababaraha kali, tapi kuring terus program di hareup anjeunna. Kuring datang ka kacindekan yen anjeunna teu boga pamanggih naon ieu kuring lakukeun, sanajan kuring nulis hal atra kawas nomer port na komentar kawas // Прощай, жуткий шпион VNC.

Saatos sababaraha dinten kuring henteu tiasa nampi kodeu leres. Pikeun nyieun masalah parah, kuring digawé ampir terus-terusan sareng ikon VNC hideung dina baki sistem. Bari eta disambungkeun, Abdi teu bisa ngaleupaskeun port pikeun nguji kode kuring.

Lamun kuring kungsi nyaho harita netcat!

Tungtungna, saraf kuring masihan jalan; barina ogé, kuring henteu sabar yuswa 17 taun. Lalajo ikon server VNC bodas ngahurungkeun hideung deui, kuring freaked kaluar, muka kode aslina nu Asezare populata antrian pesen, sarta ngajalankeun eta di hareup panon na. Kuring malah ngantosan sababaraha detik sateuacan ngaklik End Process, ngan pikeun mastikeun anjeunna ningali éta.

Upami mencét tombol éta henteu ngayakinkeun kuring yén éta patut, teras anjeunna ngaluncat ti tukangeun bénténg monitorna pikeun gancang ngadeukeutan kuring sareng ngajak kuring kaluar ti kamar pasti.

Hasilna, kuring dilarang tina jaringan pikeun dua minggu. Hukuman anu adil, panginten. Saatos sakitar tilu minggu, server VNC ngaleungit tina skrip boot sareng henteu pernah muncul di tempat sanés. Kuring henteu pernah terang naha kajadian kuring maénkeun peran naon waé dina ieu atanapi henteu, tapi éta ngancurkeun rencana kuring pikeun beunghar pisan ku ngajual bedil VNC kuring ka mahasiswa anu depresi di aula komputer kuliah di sakuliah nagara.

sumber: www.habr.com

Tambahkeun komentar