Coder Battle: Me vs That VNC Guy

В y blog hwn Mae cryn dipyn o straeon rhaglennydd wedi'u cyhoeddi. Dwi'n hoffi hel atgofion am fy hen bethau gwirion. Wel, dyma stori arall o'r fath.

Dechreuais ymddiddori mewn cyfrifiaduron am y tro cyntaf, yn enwedig rhaglennu, pan oeddwn tua 11 oed. Ar ddechrau'r ysgol uwchradd bоTreuliais y rhan fwyaf o fy amser rhydd yn tinkering gyda fy C64 ac yn ysgrifennu SYLFAENOL, yna torri allan y cod drwg gyda siswrn. Dydw i ddim yn kidding, siswrn.

Ar ôl ysgol (tua 16 oed), mae plant Prydain fel arfer yn mynd i'r coleg, lle maen nhw'n dewis astudio tri neu bedwar pwnc cyn mynd i'r brifysgol. O ystyried fy nghariad at y blwch llwydfelyn a’r recordydd tâp gartref, penderfynais mai astudio “cyfrifiadureg” yn y coleg oedd y dewis cywir.

Mwynheais y cwrs yn fwy nag yr oeddwn yn ei ddisgwyl; yno cyfarfûm â Pascal a Delphi gyntaf.

Yn ystod egwyliau rhwng dosbarthiadau, gallai myfyrwyr weithio ar unrhyw beiriant rhad ac am ddim yn yr ystafell gyfrifiaduron. Dychmygwch: ystafell enfawr, wedi'i chynllunio ar gyfer tua chant o bobl, gyda rhesi o fyrddau wedi'u llenwi â pheiriannau, fel y rhai lle mae'r monitor yn sefyll ar uned y system. Mae'r cefnogwyr yn hymian yn gyson, mae peli llygoden yn suo ar y byrddau, heb stopio am eiliad. Mae arogl rhyfedd yn yr awyr, fel pe bai 50-100 o bobl ifanc yn eu harddegau hormonaidd yn newid o bryd i'w gilydd i oeri cannoedd o sglodion Pentium III.

Er gwaethaf y risgiau iechyd, roeddwn i'n hoffi eistedd wrth y cyfrifiadur pan gefais funud rhydd.

Dyn byr, canol oed oedd y gweinyddwr ar ddyletswydd yn yr ystafell a gafodd ei ddewis ar gyfer y rôl hon oherwydd ei awydd anniwall i ddod yn unben drwg. Mae'n debyg felly. Mae bod ar ddyletswydd yn danddatganiad; roedd y dyn wrth ei fodd yn ei swydd. Cafodd y dasg o gadw trefn fel nad oedd neb yn defnyddio cyfrifiadur yr ysgol ar gyfer unrhyw beth amhriodol.

Hyd heddiw, mae fy ngreddf yn dweud wrthyf fod bonws y gweinyddwr yn dibynnu'n uniongyrchol ar nifer y myfyrwyr a ddaliodd â'i law a'u hebrwng allan o'r ystafell gyfrifiaduron. Rwy'n eitha siwr bod y boi yma wedi talu ei forgais yn gynnar.

Eisteddodd yng nghornel bellaf yr ystafell gyfrifiaduron wrth fwrdd cornel. Ac roedd yn ddiogel tybio bod ei fonitorau ffrwythlondeb wedi dod o hyd i ffordd i atgynhyrchu gyda chyfnod beichiogrwydd hynod o fyr, roedd cymaint ohonyn nhw. Ni ellid ond meddwl tybed a oedd ganddo amser mewn gwirionedd i gadw golwg arnynt i gyd. Wrth gwrs, rwy'n twyllo... wnes i sôn ei fod yn cymryd ei waith o ddifrif?

Bryd hynny, roedd y rhwydwaith cyfrifiadurol yn rhedeg Windows 2000. Darganfyddais yn fuan bod sgript wedi'i lansio bob tro y byddaf yn mewngofnodi i'r system a oedd yn nodi cychwyn y gweinydd VNC o'r cyfrif gweinyddwr ar gyfer mynediad o bell i'r bwrdd gwaith. Pryd bynnag y boi hwn eisiau sbïo arnoch chi, byddai'n cysylltu'n uniongyrchol â'ch peiriant a gwylio. Roedd yn iasol, a nawr fy mod yn meddwl am y peth, yn ôl pob tebyg yn anghyfreithlon.

Ar ôl torri fy nannedd ar SYLFAENOL a C64, ysgrifennais yn awr yn C a hyd yn oed ychydig o C ++. Bryd hynny, roedd gen i ddiddordeb mawr o hyd yn yr iaith D, oedd yn cywiro rhai o ddiffygion C++, fel y gwelais i bryd hynny.

Roeddwn i'n arfer mynd i mewn i'r ystafell gyfrifiaduron i ddarllen rhywbeth newydd ar D neu chwarae gyda'r casglwr Digidol Mars D. Weithiau, tra roeddwn i'n tynnu sylw oddi wrth feddwl am ddyfodol gwych D, ysgrifennais god C i hacio rhaglenni Win32 eraill trwy eu ffenestr handlenni.

Yn yr hen ddyddiau da o raglennu Win32, dod o hyd i ddolen ffenestr oedd y dull hawsaf i hacio rhaglenni eraill. Yn amlwg, roedd gan bob rhaglen GUI ar Windows ffenestr, hyd yn oed os nad oedd yn ymddangos ar y sgrin. Trwy ysgrifennu rhaglen i adalw handlen i broses arall (dolen iddo yn y bôn), fe allech chi anfon negeseuon ati. Roedd hyn yn caniatáu ar gyfer rhai gweithrediadau sylfaenol fel cuddio / dangos ffenestr rhaglen, yn ogystal â phethau cŵl iawn fel gorfodi proses i lwytho DLL mympwyol i'w ofod cof a dechrau gweithredu cod. Ar ôl y pigiad DLL, dechreuodd yr hwyl.

Yn ystod y mis a hanner cyntaf, ni wnaeth y ditectif hwn fy mhoeni rhyw lawer; dim ond unwaith neu ddwywaith y cysylltodd â'r gweinydd VNC ar fy mheiriant. Ond efallai bod un sesiwn arbennig wedi codi ei ddiddordeb. Roeddwn i'n ysgrifennu rhywfaint o god C i guddio ffenestri Minesweeper (heb eu cau) i'w gwneud hi'n haws chwarae yn y dosbarth, pan sylwais fod yr eicon VNC gwyn yn yr hambwrdd system wedi troi'n ddu. Roedd hyn yn golygu ei fod bellach yn gwylio fi.

Fe wnes i barhau i godio fel arfer, gan geisio ei anwybyddu. Yn y cyfamser, dechreuodd y peiriant arafu, gan geisio trosglwyddo'r gyfradd ffrâm uchaf i un o'r monitorau di-ri yng nghornel yr ystafell. Bu bron i Windows roi'r gorau i ymateb, pan ddaeth fy amynedd i ben, fe wnes i allgofnodi a gorffen am y diwrnod.

Ar ymweliadau dilynol â’r ystafell gyfrifiaduron, cymerodd Colombo ddiddordeb mawr yn yr hyn yr oeddwn yn ei wneud bron bob tro. Ar ôl tua'r pedwerydd tro, penderfynais: mae angen i mi wneud rhywbeth am hyn.

Rwy'n cyfaddef y gallai person rhesymol, rhesymegol fod wedi codi'r mater hwn yn uniongyrchol gydag ef neu ei fos. Fodd bynnag, roeddwn bob amser yn ildio i demtasiwn ac yn siarad yn gyflym am fabwysiadu strategaeth gwbl wahanol.

- Ni allwch wneud unrhyw beth heb y gweinydd VNC hwn! - Dywedais wrthyf fy hun yn dawel ac yn bendant sawl gwaith.

Roedd angen lladd VNC.

Dechreuais fynd i mewn i'r ystafell gyfrifiaduron gyda grwpiau mawr o fyfyrwyr ac eistedd mor bell o'r gornel â'r monitorau â phosibl. Gweithiodd hyn am ychydig a rhoddodd amser i mi brofi syniadau.

Roedd fy ymgais gyntaf, rwy'n meddwl y byddwch chi'n cytuno, yn eithaf gwan. Gan dde-glicio ar yr eicon VNC yn yr hambwrdd system, gwelais ddewislen gyda'r llythrennau hud EXIT. Yn anffodus, ysgrifennwyd y llythyrau mewn testun amlinell llwyd. Mae'r gweinyddwr wedi analluogi'r eitem ddewislen "Ymadael" trwy'r Golygydd Polisi Grŵp. Ceisiais ladd y broses gan y Rheolwr Tasg, ond wrth gwrs roedd yn anweledig i mi oherwydd ei fod yn rhedeg o dan gyfrif gwahanol, mwy breintiedig. Wnaeth o ddim gweithio allan.

Mae'r gweinydd VNC yn rhedeg ar borthladd TCP 5900, cofiais. Fy nghynllun nesaf oedd anfon pecynnau llygredig i'r porthladd hwn er mwyn ei chwalu.

Treuliais o leiaf ychydig ddyddiau yn tinceri gyda'r protocol, gan anfon gwahanol fathau o crap wedi'i strwythuro'n dda i borthladd 5900 a gobeithio y byddai'n torri. Yn y diwedd, ni weithiodd hynny ychwaith.

Roeddwn eisoes yn dechrau meddwl na fyddwn yn gallu cael gwared ar y peth hwn, pan wawriodd arnaf yn sydyn: mae'n rhaid bod ffenestr yno! Mae angen inni ei arddangos. Efallai y bydd ganddo fotwm “Mute” suddlon braf y gallaf ei ddefnyddio'n fawr!

Rhedais fy nghod C sydd bron yn berffaith i ddod o hyd i'r handlen i brif ffenestr proses arall - ac yn sicr ddigon, daethpwyd o hyd i VNC. Teimlais fy ysbrydoli pan deipio fy mysedd WM_SHOWWINDOW. Ceisiwch ddyfalu beth welais o'm blaen?

Dim byd!

Nawr roeddwn i'n chwilfrydig ... roedd ganddo ffenestr, ond roedd yn anwybyddu fy negeseuon. Fe wnes i wirio fy nghod ddwywaith i wneud yn siŵr ei fod yn gweithio. Wedi'i brofi ar sawl proses arall a gweithiodd yn wych. Ceisiais anfon negeseuon eraill i ffenestr VNC, a dim byd o hyd.

Ac yna fe wawriodd arnaf eto!

Diolch i'r trwchus iawn y llyfr Charles Petzold Astudiais yn ofalus sut mae prosesau Win32 yn gweithio y tu mewn i'r system. Mae gan bob cymhwysiad Win32 ffenestr yn ogystal â "ciw neges". Mae negeseuon sy'n cael eu hysgogi gan ryngweithio defnyddwyr, yn ogystal â negeseuon a anfonwyd gan Windows ei hun, yn cyrraedd mewn ciw, ac mae'r rhaglen ei hun yn penderfynu sut i'w prosesu.

Ddim yn ddiddorol iawn ynddo'i hun. Ond pan sylweddolais fod ciw neges digon mawr heb ei brosesu yn gweithredu fel hewristig i Reolwr Proses Ffenestr ymyrryd mewn proses grog, dechreuais chwysu serotonin pur.

Heb wastraffu eiliad, dychwelais at fy nghod C, gan baratoi i anfon neges arall i brif ffenestr VNC WM_SHOWWINDOW. Mewn cylch. Tragwyddol. Felly, llawer o negeseuon. WM_SHOWWINDOW, yr oeddwn yn gwybod bellach y byddai VNC yn ceisio ei anwybyddu'n llwyr... mewn perygl.

Lluniais a rhedais 4KB o god mwyaf cariadus fy mywyd. Ar ôl tua thair eiliad, dywedodd Windows fod y broses vncserver.ехе ddim yn ateb, a gwnaeth gynnig na allwn ei wrthod:

Ydych chi am gwblhau'r broses hon?

Uffern OES!

Gadewch i mi gyfaddef fy mod wedi fy mhlesio fy hun yn annioddefol am weddill y dydd.

Ar ôl treulio ychydig oriau yn treulio fy archbŵer newydd, penderfynais sut y byddwn yn ei ddefnyddio. Roedd hi'n rhy hawdd lladd y sesiwn reit o'i flaen. Roedd gen i syniad gwell - i ddiflannu'n llwyr.

Ar ôl bedydd tân gyda rhaglennu soced Sylweddolais fy mod yn gallu ysgrifennu cod a fyddai'n gwneud dau beth. Yn gyntaf bydd yn meddiannu'r porthladd TCP 5900 sydd newydd ei ryddhau, a feddiannwyd yn flaenorol gan y broses gweinydd VNC di-glem. Yna bydd yn creu cysylltiad TCP newydd â gweinydd VNC y peiriant penodedig. Bydd y cod yn syml yn dirprwyo'r holl ddata rhwng y ddau soced, a bydd Columbo yn meddwl ei fod yn cysylltu â mi, pan mewn gwirionedd bydd yn cysylltu â gweinydd VNC hollol wahanol.

Bydd fy nghod yn gweithredu fel pont ddirgel rhyngof a rhyw enaid tlawd arall o'm dewis. Roedd yn fendigedig.

Dechreuais ysgrifennu fy mhont VNC ffug ar unwaith. Cysylltodd Columbo â mi sawl gwaith, ond fe wnes i barhau i raglennu o'i flaen. Deuthum i'r casgliad nad oedd ganddo unrhyw syniad beth oeddwn i'n ei wneud, er imi ysgrifennu pethau amlwg fel rhifau porthladd a sylwadau fel // Прощай, жуткий шпион VNC.

Ar ôl cwpl o ddiwrnodau doeddwn i ddim yn gallu cael y cod i weithio'n gywir. I wneud pethau'n waeth, roeddwn i'n gweithio bron yn barhaus gyda'r eicon VNC du yn yr hambwrdd system. Tra ei fod yn gysylltiedig, ni allwn ryddhau'r porthladd i brofi fy nghod.

Pe bawn yn gwybod bryd hynny netcat!

Yn y diwedd, ildiodd fy nerfau; wedi’r cyfan, roeddwn yn ddyn 17 oed diamynedd. Wrth wylio'r eicon gweinydd VNC gwyn yn troi'n ddu eto, fe wnes i freaked allan, agor y cod gwreiddiol a oedd yn llenwi'r ciw neges, a'i redeg o flaen ei lygaid. Fe wnes i hyd yn oed aros ychydig eiliadau cyn clicio End Process, dim ond i wneud yn siŵr ei fod yn ei weld.

Os nad oedd pwyso'r botwm hwnnw'n fy argyhoeddi'n llwyr ei fod yn werth chweil, yna fe neidiodd o'r tu ôl i'w gaer o fonitoriaid i fynd ataf yn gyflym a'm tywys allan o'r ystafell yn sicr.

O ganlyniad, cefais fy ngwahardd o'r rhwydwaith am bythefnos. Cosb deg, meddyliais. Ar ôl tua thair wythnos, diflannodd y gweinydd VNC o sgriptiau cychwyn ac ni ymddangosodd erioed yn unman arall. Doeddwn i byth yn gwybod a oedd fy digwyddiad yn chwarae unrhyw ran yn hyn ai peidio, ond fe wnaeth ddifetha fy nghynllun i ddod yn hynod gyfoethog trwy werthu fy gwn VNC i fyfyrwyr isel eu hysbryd mewn neuaddau cyfrifiaduron coleg ledled y wlad.

Ffynhonnell: hab.com

Ychwanegu sylw