Koder jangi: Men o'sha VNC yigitiga qarshi

В bu blog Bir nechta dasturchi ertaklari nashr etilgan. Men eski ahmoqona narsalarimni eslashni yaxshi ko'raman. Xo'sh, yana bir shunday hikoya.

Kompyuterga, ayniqsa dasturlashga birinchi marta 11 yoshimda qiziqa boshlaganman. O'rta maktabning boshida bоMen bo'sh vaqtlarimni ko'p qismini C64 bilan o'ylash va BASIC yozish, keyin qaychi bilan yomon kodni kesib tashlash bilan o'tkazdim. Men hazil qilmayapman, qaychi.

Maktabdan keyin (taxminan 16 yoshda) britaniyalik bolalar odatda kollejga boradilar, u erda universitetga borishdan oldin uch yoki to'rtta fanni o'rganishni tanlashadi. Uydagi bej rangli quti va magnitafonga bo'lgan muhabbatimni hisobga olib, men kollejda "informatika" ni o'rganishni to'g'ri tanlov deb qaror qildim.

Kurs kutganimdan ham ko'proq yoqdi; u erda men birinchi marta Paskal va Delphi bilan uchrashdim.

Darslar orasidagi tanaffus vaqtida talabalar kompyuter xonasidagi istalgan bepul mashinada ishlashlari mumkin edi. Tasavvur qiling: yuzga yaqin odam uchun mo'ljallangan ulkan xona, tizim blokida monitor turgan kabi mashinalar bilan to'ldirilgan stollar qatori. Muxlislar doimo g'o'ng'illashmoqda, sichqoncha to'plari stollarda g'uvullaydi, bir soniya ham to'xtamaydi. Havoda g'alati hid bor, go'yo 50-100 gormonal o'smirlar vaqti-vaqti bilan yuzlab Pentium III chiplarini sovutish uchun o'zgarib turadi.

Sog'liq uchun xavf tug'dirsa ham, men bo'sh daqiqalar bo'lsa, kompyuterda o'tirishni yaxshi ko'rardim.

Xonadagi navbatchi admin past bo'yli, o'rta yoshlardagi odam bo'lib, u yovuz diktator bo'lishni to'ymas istagi tufayli bu rolga tanlangan edi. Men shunday deb o'ylayman. Navbatchilik - bu past baho; yigit o'z ishini juda yaxshi ko'rardi. Unga tartibni saqlash vazifasi yuklatildi, shunda hech kim maktab kompyuteridan nomaqbul narsa uchun foydalanmasin.

Shu kungacha mening sezgiim ma'murning bonusi to'g'ridan-to'g'ri uning qo'lidan ushlab kompyuter xonasidan olib chiqqan talabalar soniga bog'liqligini aytadi. Ishonchim komilki, bu yigit ipotekani muddatidan oldin to‘lagan.

U kompyuter xonasining uzoq burchagida, burchak stolida o'tirdi. Va uning tug'ilish monitorlari ta'sirchan qisqa homiladorlik davri bilan ko'payish yo'lini topdi deb taxmin qilish xavfsiz edi, ularning soni juda ko'p edi. Ularning barchasini kuzatib borishga uning haqiqatan ham vaqti bormi, degan savol tug'ilishi mumkin edi. Albatta, hazillashyapman... ishiga jiddiy yondashganini aytdimmi?

O'sha paytda kompyuter tarmog'ida Windows 2000 ishlayotgan edi. Tez orada men har safar tizimga kirganimda ish stoliga masofadan kirish uchun administrator hisobidan VNC serverini ishga tushirishni ko'rsatadigan skript ishga tushirilganini aniqladim. Qachonki bu yigit sizni josuslik qilmoqchi bo'lsa, u to'g'ridan-to'g'ri mashinangizga ulanib, tomosha qilardi. Bu dahshatli edi va endi men bu haqda o'ylasam, ehtimol noqonuniy.

BASIC va C64 da tishlarimni kesib, endi C va hatto bir oz C++ da yozdim. O'sha paytda men hali ko'rganimdek, C++ tilining ba'zi kamchiliklarini tuzatgan D tiliga juda qiziqardim.

Men kompyuter xonasiga D haqida yangi narsalarni o‘qish yoki Digital Mars D kompilyatorida o‘ynash uchun kirar edim.Ba’zan D ning buyuk kelajagi haqida o‘ylashdan chalg‘iganimda, boshqa Win32 dasturlarini ularning oynasi orqali buzish uchun C kodini yozardim. tutqichlar.

Qadimgi Win32 dasturlash kunlarida oyna tutqichini topish boshqa dasturlarni buzishning eng oson usuli edi. Shubhasiz, Windows-dagi barcha GUI dasturlari, hatto ekranda ko'rinmasa ham, oynaga ega edi. Boshqa jarayonga (asosan unga havola) dastagini olish uchun dastur yozish orqali siz unga xabarlar yuborishingiz mumkin. Bu dastur oynasini yashirish/ko'rsatish kabi ba'zi bir asosiy operatsiyalarga, shuningdek, jarayonni xotira maydoniga o'zboshimchalik bilan DLL-ni yuklashga va kodni bajarishni boshlashga majburlash kabi ajoyib narsalarni amalga oshirishga imkon berdi. DLL in'ektsiyasidan so'ng qiziqarli boshlandi.

Birinchi bir yarim oy ichida bu detektiv meni unchalik bezovta qilmadi, u mening kompyuterimdagi VNC serveriga faqat bir yoki ikki marta ulangan. Ammo bitta mashg'ulot uning qiziqishini uyg'otgan bo'lishi mumkin. Sinfda o'ynashni osonlashtirish uchun Minesweeper oynalarini yashirish uchun (ularni yopmasdan) ba'zi C kodlarini yozayotgan edim, tizim tepsisidagi oq VNC belgisi qora rangga aylanganini payqadim. Bu endi u meni kuzatayotganini anglatardi.

Men odatdagidek kodlashni davom ettirdim, unga e'tibor bermaslikka harakat qildim. Ayni paytda mashina maksimal kadr tezligini xona burchagidagi son-sanoqsiz monitorlardan biriga uzatishga urinib, sekinlasha boshladi. Windows deyarli javob berishni to'xtatdi, sabrim tugagach, men tizimdan chiqdim va kunni tugatdim.

Kompyuter xonasiga keyingi tashriflarimda, Kolombo deyarli har safar nima qilayotganim bilan qiziqdi. Taxminan to'rtinchi marta men qaror qildim: bu haqda biror narsa qilishim kerak.

Tan olaman, aqlli, aqlli odam bu masalani bevosita o‘zi yoki xo‘jayini bilan ko‘tarishi mumkin edi. Biroq, men har doim vasvasaga berilib ketdim va tezda butunlay boshqacha strategiyani qabul qilishga kirishdim.

- Ushbu VNC serversiz hech narsa qila olmaysiz! — dedim oʻzimga bir necha bor xotirjam va qatʼiyat bilan.

VNCni o'ldirish kerak edi.

Men talabalarning katta guruhlari bilan kompyuter xonasiga kira boshladim va iloji boricha monitorlar bilan burchakdan uzoqroqda o'tirdim. Bu bir muncha vaqt ishladi va menga g'oyalarni sinab ko'rish uchun vaqt berdi.

Mening birinchi urinishim, menimcha, rozi bo'lasiz, juda zaif edi. Tizim tepsisidagi VNC belgisini sichqonchaning o'ng tugmasi bilan bosib, men EXIT sehrli harflari bilan menyuni ko'rdim. Afsuski, harflar kulrang kontur matnida yozilgan. Administrator guruh siyosati muharriri orqali “Chiqish” menyu bandini o‘chirib qo‘ygan. Men Vazifa menejeridan jarayonni o'ldirishga harakat qildim, lekin, albatta, bu menga ko'rinmas edi, chunki u boshqa, imtiyozli hisob ostida ishlayotgan edi. Bu ish bermadi.

VNC serveri TCP 5900 portida ishlaydi, men esladim. Mening keyingi rejam buzilgan paketlarni ushbu portga ishdan chiqarish uchun yuborish edi.

Men kamida bir necha kun protokol bilan shug'ullanib, 5900-portga yaxshi tuzilgan axlatning turli shakllarini yubordim va u buziladi deb umid qildim. Oxir-oqibat, bu ham ishlamadi.

Men allaqachon bu narsadan qutulolmayman deb o'ylay boshlagan edim, birdan menga tong tushdi: u erda deraza bo'lsa kerak! Biz uni ko'rsatishimiz kerak. Balki unda yaxshi suvli "Mute" tugmasi bo'ladi, men undan yaxshi foydalanishim mumkin!

Men boshqa jarayonning asosiy oynasiga tutqichni topish uchun deyarli mukammal C kodimni ishga tushirdim - va VNC topildi. Barmoqlarim yozganimda ilhomlanganini his qildim WM_SHOWWINDOW. Oldimda nimani ko'rganimni taxmin qilishga harakat qiling?

Hech narsa!

Endi men qiziqib qoldim... uning oynasi bor edi, lekin u mening xabarlarimga e'tibor bermadi. Ishlayotganiga ishonch hosil qilish uchun kodimni ikki marta tekshirdim. Uni bir nechta boshqa jarayonlarda sinab ko'rdi va u juda yaxshi ishladi. Men VNC oynasiga boshqa xabarlarni yuborishga harakat qildim, lekin hali hech narsa.

Va keyin yana menga tushdi!

Juda qalin uchun rahmat kitob Charlz Petzold Men Win32 jarayonlari tizim ichida qanday ishlashini diqqat bilan o'rganib chiqdim. Har bir Win32 ilovasida "xabar navbati" bilan bir qatorda oyna mavjud. Foydalanuvchining o'zaro ta'siridan kelib chiqqan xabarlar, shuningdek, Windows tomonidan yuborilgan xabarlar navbatda keladi va ularni qanday qayta ishlashni dasturning o'zi hal qiladi.

O'z-o'zidan unchalik qiziq emas. Ammo men etarlicha katta ishlov berilmagan xabar navbati Window Process Manager uchun osilgan jarayonga aralashish uchun evristik rol o'ynashini tushunganimda, men sof serotoninni terlay boshladim.

Bir soniyani boy bermay, asosiy VNC oynasiga boshqa xabar yuborishga tayyorlanib, C kodimga qaytdim. WM_SHOWWINDOW. Bir tsiklda. Abadiy. Shunday qilib, juda ko'p xabarlar. WM_SHOWWINDOW, men endi VNC butunlay e'tiborsiz qoldirishga harakat qilishini bilardim ... xavf ostida.

Men hayotimdagi eng erkinlikni sevuvchi 4KB kodini tuzdim va ishlatdim. Taxminan uch soniyadan so'ng, Windows bu jarayon haqida xabar berdi vncserver.ехе javob bermaydi va men rad eta olmaydigan taklifni berdim:

Bu jarayonni yakunlashni xohlaysizmi?

HA!

Tan olamanki, kunning qolgan qismida men o'zimdan chidab bo'lmas darajada mamnun bo'ldim.

Yangi super kuchimni hazm qilish uchun bir necha soat sarflaganimdan so'ng, men undan qanday foydalanishga qaror qildim. Seansni uning oldida o'ldirish juda oson edi. Menda yaxshiroq fikr bor edi - butunlay g'oyib bo'lish.

so'ng soket dasturlash bilan olovga cho'mdirish Men ikkita ishni bajaradigan kod yozishim mumkinligini angladim. U birinchi navbatda yangi bo'shatilgan 5900 TCP portini egallaydi, ilgari VNC server jarayoni bilan band bo'lgan. Keyin u ko'rsatilgan mashinaning VNC serveriga yangi TCP ulanishini yaratadi. Kod oddiygina ikkita rozetka o'rtasidagi barcha ma'lumotlarni proksi-server qiladi va Kolumbo u menga ulanyapti deb o'ylaydi, aslida u butunlay boshqa VNC serveriga ulanadi.

Mening kodim men va men tanlagan boshqa kambag'al ruh o'rtasida maxfiy ko'prik bo'lib xizmat qiladi. Bu ajoyib edi.

Men darhol soxta VNC ko'prigini yozishni boshladim. Kolumbo men bilan bir necha bor bog'landi, lekin men uning oldida dasturlashni davom ettirdim. Men port raqamlari va shunga o'xshash izohlar kabi aniq narsalarni yozgan bo'lsam ham, u nima qilayotganimni bilmaydi degan xulosaga keldim. // Прощай, жуткий шпион VNC.

Bir necha kundan keyin kodni to'g'ri ishlashiga erisha olmadim. Eng yomoni, men tizim tepsisidagi qora VNC belgisi bilan deyarli uzluksiz ishladim. U ulangan bo'lsa-da, men kodimni sinab ko'rish uchun portni qo'yib yubora olmadim.

Agar o'shanda bilganimda edi netcat!

Oxir-oqibat, asablarim to'xtadi, men 17 yoshli sabrsiz yigit edim. Oq VNC server belgisining yana qora rangga aylanganini ko'rib, men qo'rqib ketdim, xabarlar navbatini to'ldirgan asl kodni ochib, uning ko'zlari oldida yugurdim. Men hatto bosishdan oldin bir necha soniya kutdim End Process, faqat uni ko'rganiga ishonch hosil qilish uchun.

Agar bu tugmani bosish meni bunga arzigulikligiga to'liq ishontira olmasa, u o'zining monitor qal'asi ortidan sakrab tezda menga yaqinlashdi va meni xonadan chiqarib yubordi.

Natijada meni ikki haftaga tarmoqdan chetlatishdi. Odil jazo, deb o'yladim men. Taxminan uch hafta o'tgach, VNC serveri yuklash skriptlaridan g'oyib bo'ldi va hech qachon boshqa joyda paydo bo'lmadi. Mening voqeam bunda biron bir rol o'ynaganmi yoki yo'qmi, men hech qachon bilmasdim, lekin bu mening VNC qurolimni butun mamlakat bo'ylab kollej kompyuter zallarida tushkunlikka tushgan talabalarga sotish orqali ajoyib darajada boyib ketish rejamni barbod qildi.

Manba: www.habr.com

a Izoh qo'shish