Batalla de codificadors: jo contra aquell noi de VNC

В aquest bloc S'han publicat bastants històries de programadors. M'agrada recordar les meves estúpides antigues. Bé, aquí hi ha una altra història així.

Vaig començar a interessar-me per la informàtica, especialment la programació, quan tenia uns 11 anys. Al començament del batxillerat bоVaig passar la major part del meu temps lliure jugant amb el meu C64 i escrivint BASIC, després retallant el codi dolent amb unes tisores. No estic de broma, tisores.

Després de l'escola (al voltant dels 16 anys), els nens britànics solen anar a la universitat, on opten per estudiar tres o quatre assignatures abans d'anar a la universitat. Donat el meu amor per la caixa beix i la gravadora de casa, vaig decidir que estudiar "informàtica" a la universitat era l'opció correcta.

Vaig gaudir del curs més del que esperava; allà vaig conèixer per primera vegada Pascal i Delfos.

Durant els descansos entre classes, els alumnes podien treballar en qualsevol màquina lliure de l'aula d'informàtica. Imagineu-vos: una sala enorme, dissenyada per a un centenar de persones, amb fileres de taules plenes de màquines, com aquelles on hi ha el monitor a la unitat del sistema. Els aficionats taulen constantment, les boles del ratolí bruneixen a les taules, sense parar ni un segon. Hi ha una estranya olor a l'aire, com si entre 50 i 100 adolescents hormonals canviessin periòdicament per refredar centenars de xips Pentium III.

Malgrat els riscos per a la salut, m'agradava seure a l'ordinador quan tenia un minut lliure.

L'administrador de guàrdia a la sala era un home baixet i de mitjana edat que va ser escollit per a aquest paper pel seu desig insaciable de convertir-se en un dictador malvat. Suposo que sí. De guàrdia és un eufemisme; al noi li encantava la seva feina. Se li va encarregar de mantenir l'ordre perquè ningú fes servir l'ordinador de l'escola per a res inadequat.

Fins al dia d'avui, la meva intuïció em diu que la bonificació de l'administrador depenia directament del nombre d'estudiants que agafava de la mà i va escoltar fora de l'aula d'informàtica. Estic bastant segur que aquest tipus va pagar la seva hipoteca abans d'hora.

Es va asseure a l'extrem cantonada de la sala d'informàtica a una taula de la cantonada. I era segur suposar que els seus monitors de fertilitat havien trobat la manera de reproduir-se amb un període de gestació impressionantment curt, n'hi havia tants. Només es podia preguntar si realment va tenir temps per fer un seguiment de tots. Per descomptat, estic de broma... he dit que es va prendre la seva feina molt seriosament?

En aquell moment, la xarxa d'ordinadors funcionava amb Windows 2000. Aviat vaig descobrir que cada vegada que entrava al sistema, s'iniciava un script que especificava iniciar el servidor VNC des del compte d'administrador per accedir remot a l'escriptori. Sempre que aquest noi volia espiar-te, es connectava directament a la teva màquina i mirava. Va ser esgarrifós, i ara que hi penso, probablement il·legal.

Després d'haver tallat les dents en BASIC i C64, ara vaig escriure en C i fins i tot una mica en C++. Aleshores, encara m'interessava molt el llenguatge D, que corregia algunes de les mancances del C++, tal com el vaig veure aleshores.

Solia anar a l'aula d'informàtica per llegir alguna cosa nova a D o jugar amb el compilador Digital Mars D. De vegades, mentre em distreia de pensar en el gran futur de D, escrivia codi C per piratejar altres programes Win32 a través de la seva finestra. nanses.

En els bons vells temps de la programació Win32, trobar un mànec de finestra era el mètode més fàcil per piratejar altres programes. Òbviament, tots els programes GUI a Windows tenien una finestra, encara que no aparegués a la pantalla. Si escriviu un programa per recuperar un identificador d'un altre procés (essencialment un enllaç a aquest), podríeu enviar-hi missatges. Això va permetre algunes operacions bàsiques com amagar/mostrar una finestra de programa, així com coses molt interessants com obligar un procés a carregar una DLL arbitrària al seu espai de memòria i començar a executar codi. Després de la injecció de DLL, va començar la diversió.

Durant el primer mes i mig, aquest detectiu no em va molestar gaire; només es va connectar al servidor VNC de la meva màquina una o dues vegades. Però una sessió en particular pot haver despertat el seu interès. Estava escrivint un codi C per amagar les finestres de Minesweeper (sense tancar-les) perquè fos més fàcil jugar a classe, quan em vaig adonar que la icona blanca de VNC a la safata del sistema s'havia tornat negra. Això significava que ara em mirava.

Vaig continuar codificant com de costum, intentant ignorar-lo. Mentrestant, la màquina va començar a disminuir la velocitat, intentant transmetre la velocitat màxima de fotogrames a un dels innombrables monitors que hi havia a la cantonada de la sala. Windows gairebé va deixar de respondre, quan la meva paciència es va acabar, vaig tancar la sessió i vaig acabar el dia.

En les visites posteriors a l'aula d'informàtica, Colombo es va interessar molt pel que estava fent gairebé cada vegada. Després de la quarta vegada, vaig decidir: he de fer alguna cosa al respecte.

Admeto que una persona raonable i racional podria haver plantejat aquesta qüestió directament amb ell o el seu cap. Tanmateix, sempre vaig cedir a la temptació i em vaig convèncer ràpidament per adoptar una estratègia completament diferent.

- No podeu fer res sense aquest servidor VNC! — Em vaig dir diverses vegades amb calma i decisió.

Calia matar VNC.

Vaig començar a entrar a l'aula d'informàtica amb grans grups d'alumnes i assegut el més lluny possible del racó amb els monitors. Això va funcionar durant un temps i em va donar temps per provar idees.

El meu primer intent, crec que hi estaràs d'acord, va ser bastant feble. Fent clic amb el botó dret a la icona de VNC a la safata del sistema, vaig veure un menú amb les lletres màgiques EXIT. Malauradament, les cartes estaven escrites amb un text de contorn gris. L'administrador ha desactivat l'element del menú "Surt" mitjançant l'Editor de polítiques de grup. Vaig intentar matar el procés des del Gestor de tasques, però, per descomptat, era invisible per a mi perquè s'executava amb un compte diferent i més privilegiat. No va funcionar.

El servidor VNC s'executa al port TCP 5900, vaig recordar. El meu següent pla era enviar paquets danyats a aquest port per tal de bloquejar-lo.

Vaig passar almenys uns dies retocant el protocol, enviant diverses formes de merda ben estructurada al port 5900 i esperant que es trenqués. Al final, això tampoc va funcionar.

Ja començava a pensar que no me'n podria desfer d'aquesta cosa, quan de sobte em va sorgir: hi deu haver una finestra! Hem de mostrar-ho. Potser tindrà un bonic botó "Silenciar" i sucós que puc fer un gran ús!

Vaig executar el meu codi C ara gairebé perfecte per trobar el controlador de la finestra principal d'un altre procés i, per descomptat, es va trobar VNC. Em vaig sentir inspirat quan els meus dits van escriure WM_SHOWWINDOW. Intenteu endevinar què vaig veure davant meu?

Res

Ara tenia curiositat... tenia una finestra, però ignorava els meus missatges. He revisat el meu codi per assegurar-me que funciona. Ho vaig provar en diversos altres processos i va funcionar molt bé. Vaig provar d'enviar altres missatges a la finestra de VNC i res.

I després em va tornar a adonar!

Gràcies al molt gruixut el llibre Charles Petzold Vaig estudiar acuradament com funcionen els processos Win32 dins del sistema. Cada aplicació Win32 té una finestra així com una "cua de missatges". Els missatges desencadenats per la interacció de l'usuari, així com els missatges enviats pel mateix Windows, arriben a la cua i l'aplicació decideix com processar-los.

Poc interessant en si mateix. Però quan em vaig adonar que una cua de missatges sense processar prou gran actuava com una heurística perquè el Window Process Manager intervingués en un procés penjat, vaig començar a suar serotonina pura.

Sense perdre un segon, vaig tornar al meu codi C, preparant-me per enviar un altre missatge a la finestra principal de VNC WM_SHOWWINDOW. En un cicle. Etern. Per tant, molts missatges. WM_SHOWWINDOW, que ara sabia que VNC intentaria ignorar completament... al seu risc.

Vaig compilar i executar 4KB del codi més amant de la llibertat de la meva vida. Després d'uns tres segons, Windows va informar que el procés vncserver.ехе no respon i vaig fer una oferta que simplement no vaig poder rebutjar:

Vols completar aquest procés?

INFERN SÍ!

Permeteu-me admetre que durant la resta del dia vaig estar insuportablement satisfet amb mi mateix.

Després d'unes hores dedicades a digerir el meu nou superpoder, vaig decidir com el faria servir. Era massa fàcil acabar amb la sessió davant seu. Vaig tenir una idea millor: desaparèixer completament.

Després bateig de foc amb programació de presa Em vaig adonar que podia escriure codi que faria dues coses. Primer ocuparà el nou port TCP alliberat 5900, ocupat anteriorment pel procés del servidor VNC despistat. A continuació, crearà una nova connexió TCP al servidor VNC de la màquina especificada. El codi simplement enviarà totes les dades entre els dos endolls i Columbo pensarà que s'està connectant a mi, quan de fet es connectarà a un servidor VNC completament diferent.

El meu codi actuarà com un pont secret entre jo i una altra pobra ànima de la meva elecció. Va ser meravellós.

Immediatament vaig començar a escriure el meu fals pont VNC. Columbo es va connectar amb mi diverses vegades, però vaig continuar programant-me davant d'ell. Vaig arribar a la conclusió que no tenia ni idea del que estava fent, tot i que vaig escriure coses òbvies com números de port i comentaris com ara // Прощай, жуткий шпион VNC.

Després d'un parell de dies no he pogut fer que el codi funcioni correctament. Per empitjorar les coses, estava treballant gairebé contínuament amb la icona negra de VNC a la safata del sistema. Mentre estava connectat, no vaig poder alliberar el port per provar el meu codi.

Si ho hagués sabut aleshores netcat!

Al final, els meus nervis van cedir; després de tot, era un noi de 17 anys impacient. Veient que la icona blanca del servidor VNC es tornava negra, em vaig espantar, vaig obrir el codi original que ocupava la cua de missatges i el vaig passar davant dels seus ulls. Fins i tot vaig esperar un parell de segons abans de fer clic End Process, només per assegurar-se que ho va veure.

Si prémer aquest botó no em va convèncer del tot que valia la pena, llavors ell va saltar des de darrere de la seva fortalesa de monitors per apropar-me ràpidament i fer-me sortir de l'habitació.

Com a resultat, em van prohibir la xarxa durant dues setmanes. Un càstig just, vaig pensar. Després d'unes tres setmanes, el servidor VNC va desaparèixer dels scripts d'arrencada i no va aparèixer mai enlloc. Mai vaig saber si el meu incident va tenir algun paper en això o no, però va arruïnar completament el meu pla d'enriquir-me fabulosament venent la meva pistola VNC a estudiants deprimits a les aules d'informàtica universitaris de tot el país.

Font: www.habr.com

Afegeix comentari