Coder Battle: Ni vs. VNC Guy hori

Π’ blog hau Programatzaileen ipuin dezente argitaratu dira. Nire antzinako ergelkeriak gogoratzea gustatzen zait. Beno, hona hemen horrelako beste istorio bat.

11 bat urte nituenean hasi nintzen lehen aldiz ordenagailuak interesatzen, batez ere programazioa. Batxilergoaren hasieran bΠΎNire denbora libre gehiena nire C64-arekin moldatzen eta BASIC idazten eman nuen, gero guraizeekin kode txarra mozten. Ez naiz txantxetan ari, guraizeak.

Eskola ondoren (16 urte inguruan), haurrak britainiarrak unibertsitatera joaten dira normalean, eta unibertsitatera joan aurretik hiruzpalau irakasgai ikastea aukeratzen dute. Etxeko kaxa beige eta magnetofonoarekiko maitasuna ikusita, unibertsitatean β€œinformatika” ikastea aukera egokia zela erabaki nuen.

Espero baino gehiago gustatu zait ikastaroa; han ezagutu nituen lehen aldiz Pascal eta Delphi.

Klaseen arteko atsedenaldietan ikasleek edozein makina libretan lan egin ahal izango dute informatika gelan. Imajinatu: gela erraldoi bat, ehun bat lagunentzako diseinatua, makinaz betetako mahai-lerroekin, monitorea sistema-unitatean dagoen moduan. Zaleak etengabe ari dira burrunbaka, sagu-bolak burrunbaka ari dira mahaietan, segundo batean gelditu gabe. Usain arraro bat dago airean, 50-100 nerabe hormonal aldian-aldian ehunka Pentium III txip hozten ari balira bezala.

Osasunerako arriskuak izan arren, minutu libre bat nuenean ordenagailuan esertzea gustatzen zitzaidan.

Gelako guardiako administratzailea adin ertaineko gizon baxu bat zen, diktadore gaizto bihurtzeko gogo aseezina zela eta eginkizun honetarako aukeratu zutena. baietz suposatzen dut. Zerbitzua gutxiegi da; mutilak oso maite zuen bere lana. Ordena zaintzeaz arduratu zen, inork ez zezan eskolako ordenagailua ezer desegokirako erabili.

Gaur egun arte, nire intuizioak esaten dit administratzailearen bonusa zuzenean eskuz harrapatu eta ordenagailu geletatik ateratzen zituen ikasle kopuruaren araberakoa zela. Seguru nago tipo honek goiz ordaindu zuela hipoteka.

Ordenagailu gelaren urruneko izkinan eseri zen txokoko mahai batean. Eta segurua zen bere ugalkortasun-monitoreek haurdunaldi-aldi ikaragarri laburrean ugaltzeko modua aurkitu zutela, haietako asko zeuden. Bakarrik galdetu zitekeen ea benetan denborarik izan ote zuen horien guztien jarraipena egiteko. Noski, txantxetan ari naiz... aipatu dut bere lana oso serio hartzen zuela?

Garai hartan, ordenagailu-sarea Windows 2000 exekutatzen ari zen. Laster konturatu nintzen sisteman saioa hasten nuen bakoitzean, mahaigainera urruneko sarbidea izateko VNC zerbitzaria administratzaileko kontutik abiaraztea zehazten zuen script bat abiarazten zela. Tipo honek zu zelatatu nahi zuen bakoitzean, zuzenean zure makinara konektatzen zen eta ikusten zuen. Izugarria zen, eta orain pentsatzen dudanean, seguruenik ilegala.

BASIC eta C64-n hortzak moztuta, orain C-n idatzi dut eta baita C++ apur bat ere. Garai hartan, oraindik ere oso interesatzen zitzaidan D lengoaia, eta horrek C++-ren zenbait hutsune zuzendu zituen, orduan ikusi nuen bezala.

Ordenagailu gelara joaten nintzen D-n zerbait berria irakurtzera edo Digital Mars D konpiladorearekin jolastera. Batzuetan, D-ren etorkizun handian pentsatzetik distraitzen nintzen bitartean, C kodea idazten nuen beste Win32 programa batzuk haien leihotik hackeatzeko. heldulekuak.

Win32 programazioaren garai onetan, leiho-heldulekua aurkitzea zen beste programa batzuk hackeatzeko metodorik errazena. Jakina, Windows-eko GUI programa guztiek leiho bat zuten, pantailan agertzen ez bazen ere. Beste prozesu baterako helduleku bat berreskuratzeko programa bat idatziz (funtsean, esteka bat), hari mezuak bidal ditzakezu. Honek oinarrizko eragiketa batzuk ahalbidetu zituen programaren leiho bat ezkutatzea/erakustea, eta baita prozesu bat DLL arbitrario bat bere memoria-espazioan kargatzera behartzea eta kodea exekutatzen hastea ere. DLL injekzio ondoren, dibertsioa hasi zen.

Lehen hilabete eta erdian, detektibe honek ez ninduen asko molestatu; nire makinako VNC zerbitzariarekin behin edo bitan bakarrik konektatu zen. Baina baliteke saio jakin batek interesa piztu izana. C kode bat idazten ari nintzen Minesweeper leihoak ezkutatzeko (itxi gabe) klasean errazago jolasteko, sistemaren erretiluko VNC ikono zuria beltz bihurtu zela ohartu nintzenean. Horrek esan nahi zuen orain niri begira zegoela.

Ohi bezala kodetzen jarraitu nuen, jaramonik egin nahian. Bitartean, makina moteltzen hasi zen, fotograma-abiadura maximoa gelaren izkinan zeuden monitore ugarietako bati transmititu nahian. Windows-ek ia erantzuteari utzi zion, pazientzia agortu zenean, saioa amaitu nuen eta eguna amaitu nuen.

Geroago informatika gelara egindako bisitetan, Colombok interes handia hartu zuen ia aldi oro egiten nuenarekiko. Laugarren aldiz, gutxi gorabehera, erabaki nuen: honetaz zerbait egin behar dut.

Aitortzen dut pertsona arrazoizko eta arrazional batek zuzenean planteatu zezakeela arazo hau berari edo bere nagusiari. Hala ere, tentazioari beti amore eman eta azkar hitz egin nuen nire buruari estrategia guztiz ezberdina hartzera.

- Ezin duzu ezer egin VNC zerbitzari hau gabe! β€” Lasai eta erabakigarri esan nion neure buruari hainbat aldiz.

Beharrezkoa zen VNC hiltzea.

Ikasle talde handiekin ordenagailu gelara sartzen hasi nintzen eta monitoreekin ahalik eta bazterretik urrunen eserita. Horrek denbora batez funtzionatu zuen eta ideiak probatzeko denbora eman zidan.

Nire lehen saiakera, ados egongo zarela uste dut, nahiko ahula izan zen. Sistemaren erretiluko VNC ikonoan eskuineko botoiarekin klik eginez, menu bat ikusi nuen EXIT letra magikoekin. Zoritxarrez, gutunak eskema griseko testuan idatzi ziren. Administratzaileak "Irten" menuko elementua desgaitu du Taldeko Gidalerroen Editorearen bidez. Prozesua Task Manager-etik hiltzen saiatu nintzen, baina, jakina, ikusezina zen niretzat, beste kontu pribilegiatuago baten pean exekutatzen zelako. Ez zuen funtzionatu.

VNC zerbitzaria TCP 5900 atakan exekutatzen da, gogoratu nuen. Nire hurrengo plana ataka honetara hondatutako paketeak bidaltzea izan zen, huts egiteko.

Gutxienez egun batzuk eman nituen protokoloa txukuntzen, 5900 portura ongi egituratutako txorakeria mota ezberdinak bidaliz eta apurtuko zelakoan. Azkenean, horrek ere ez zuen funtzionatu.

Gauza hau kendu ezingo nuela pentsatzen hasia nintzen ordurako, bat-batean argitu zitzaidanean: hor leiho bat egon behar da! Erakutsi behar dugu. Agian "Mutu" botoi mamitsu polita izango du, erabil dezakedana!

Nire orain ia perfektua C kodea exekutatu nuen beste prozesu baten leiho nagusirako heldulekua aurkitzeko - eta ziur aski, VNC aurkitu zen. Behatzak idaztean inspiratuta sentitu nintzen WM_SHOWWINDOW. Saiatu zer ikusi nuen nire aurrean asmatzen?

Ezer ez!

Orain jakin-mina nuen... leiho bat zeukan, baina nire mezuei jaramonik egiten ez zien. Nire kodea birritan egiaztatu nuen funtzionatzen zuela ziurtatzeko. Beste hainbat prozesutan probatu eta oso ondo funtzionatu zuen. VNC leihora beste mezu batzuk bidaltzen saiatu nintzen, eta oraindik ezer ez.

Eta orduan argitu zitzaidan berriro!

Oso lodiari esker liburua Charles Petzold Win32 prozesuek sistema barruan nola funtzionatzen duten arretaz aztertu nuen. Win32 aplikazio bakoitzak leiho bat dauka, baita "mezu-ilara" bat ere. Erabiltzaileen elkarreraginak abiarazitako mezuak, baita Windows-ek berak bidalitakoak ere, ilara batean iristen dira, eta aplikazioak berak erabakitzen du nola prozesatu.

Berez ez da oso interesgarria. Baina prozesatu gabeko mezu-ilara aski handi batek Window Process Manager-ek eskegitako prozesu batean esku hartzeko heuristiko gisa jokatzen zuela konturatu nintzenean, serotonina hutsa izerditzen hasi nintzen.

Segundo bat galdu gabe, nire C kodeara itzuli nintzen, beste mezu bat VNC leiho nagusira bidaltzeko prestatzen WM_SHOWWINDOW. Ziklo batean. Betierekoa. Beraz, mezu asko. WM_SHOWWINDOW, orain banekien VNC guztiz baztertzen saiatuko zela... bere arriskuan.

Nire bizitzako askatasunik maite duen kodearen 4KB bildu eta exekutatu nuen. Hiru segundo inguru igaro ondoren, Windows-ek prozesuaren berri eman zuen vncserver.Π΅Ρ…Π΅ ez du erantzuten, eta uko egin ezin nuen eskaintza egin zidan:

Prozesu hau amaitu nahi duzu?

NOSKI!

Aitor dezadan egun osoan zehar neure buruarekin oso gustura egon nintzela.

Nire superpotentzia berria digeritzen igarotako ordu batzuk igaro ondoren, nola erabiliko nuen erabaki nuen. Errazegia zen saioa bere aurrean bertan hiltzea. Ideia hobea nuen: guztiz desagertzea.

Ondoren suaren bataioa entxufearen programazioarekin Bi gauza egingo zituen kodea idatzi nezakeela konturatu nintzen. Lehenik eta behin, askatu berri den TCP ataka 5900 okupatuko du, lehenago VNC zerbitzariaren prozesuak okupatua. Ondoren, TCP konexio berri bat sortuko du zehaztutako makinaren VNC zerbitzariarekin. Kodeak bi socketen arteko datu guztiak proxy besterik ez ditu egingo, eta Columbok nirekin konektatzen ari dela pentsatuko du, hain zuzen ere VNC zerbitzari guztiz ezberdin batera konektatuko denean.

Nire kodea nire eta nire aukeratutako beste arima pobre baten arteko zubi sekretua izango da. Zoragarria izan zen.

Berehala hasi nintzen nire VNC zubi faltsua idazten. Columbok hainbat aldiz konektatu zidan, baina haren aurrean programatzen jarraitu nuen. Ondorioztatu nuen ez zekiela zer egiten ari nintzen, nahiz eta gauza agerikoak idatzi nituen, adibidez, portuko zenbakiak eta iruzkinak. // ΠŸΡ€ΠΎΡ‰Π°ΠΉ, ΠΆΡƒΡ‚ΠΊΠΈΠΉ шпион VNC.

Egun pare bat igaro ondoren, ezin izan dut kodea behar bezala funtzionatzen. Hori gutxi balitz, sistemaren erretiluko VNC ikono beltzarekin ia etengabe lanean ari nintzen. Konektatuta zegoen bitartean, ezin nuen ataka askatu nire kodea probatzeko.

Orduan jakin izan banu netcat!

Azkenean, nerbioak utzi egin zizkidan; azken finean, 17 urteko mutil pazientziagabea nintzen. VNC zerbitzariaren ikono zuria berriro beltz bihurtzen ikusita, izutu egin nintzen, mezu-ilara betetzen zuen jatorrizko kodea ireki eta bere begien aurrean jarri nuen. Nahiz eta segundo pare bat itxaron nuen klik egin aurretik End Process, ikusi zuela ziurtatzeko.

Botoi hori sakatzeak ez ninduen guztiz konbentzitzen merezi zuela, orduan bere monitoreen gotorleku atzetik jauzi egiteak azkar nigana hurbildu eta gelatik irteteko, zalantzarik gabe.

Ondorioz, sarean debekatuta egon nintzen bi astez. Zigor justua, pentsatu nuen. Hiru aste inguru igaro ondoren, VNC zerbitzaria abioko scriptetatik desagertu zen eta ez zen beste inon agertu. Inoiz ez nuen jakin nire gertakariak zeresanik izan zuen honetan edo ez, baina erabat hondatu zuen nire VNC pistola herrialde osoko unibertsitateko ordenagailu geletan deprimitutako ikasleei salduz nire VNC pistola salduz.

Iturria: www.habr.com

Gehitu iruzkin berria