Batalla de codificador: eu contra ese tipo de VNC

В este blog Publicáronse bastantes contos de programadores. Gústame recordar as miñas vellas estupideces. Ben, aquí tes outra historia deste tipo.

Intereseime polos ordenadores, especialmente pola programación, cando tiña uns 11 anos. Ao comezo do bacharelato bоPasei a maior parte do meu tempo libre retocando co meu C64 e escribindo BASIC, despois recortando o código malo coas tesoiras. Non estou de broma, tesoiras.

Despois da escola (ao redor dos 16 anos), os nenos británicos adoitan ir á universidade, onde optan por estudar tres ou catro materias antes de ir á universidade. Dado o meu amor pola caixa beige e a gravadora na casa, decidín que estudar "informática" na universidade era a opción correcta.

Disfrutei do curso máis do que esperaba; alí coñecín por primeira vez a Pascal e a Delfos.

Durante os recreos entre clases, os alumnos podían traballar en calquera máquina libre da aula de informática. Imaxina: unha sala enorme, deseñada para unhas cen persoas, con filas de mesas cheas de máquinas, como aquelas onde está o monitor na unidade do sistema. Os afeccionados tararean constantemente, as bolas do rato zumban nas mesas, sen parar nin un segundo. Hai un cheiro estraño no aire, coma se entre 50 e 100 adolescentes hormonais cambiasen periódicamente para arrefriar centos de chips Pentium III.

A pesar dos riscos para a saúde, gustábame sentarme ante o ordenador cando tiña un minuto libre.

O administrador de garda na sala era un home baixo e de mediana idade que foi elixido para este papel polo seu desexo insaciable de converterse nun ditador malvado. Creo que si. De garda é un eufemismo; o mozo adoraba moito o seu traballo. Encargouse de manter a orde para que ninguén utilizase o ordenador do colexio para nada inadecuado.

A día de hoxe, a miña intuición dime que a bonificación do administrador dependía directamente do número de estudantes que colleu da man e escoltou fóra da aula de informática. Estou bastante seguro de que este tipo pagou a súa hipoteca antes de tempo.

Sentou na esquina máis afastada da aula de informática nunha mesa da esquina. E era seguro asumir que os seus monitores de fertilidade atoparan un xeito de reproducirse cun período de xestación impresionantemente curto, había moitos deles. Só se podía preguntar se realmente tivo tempo para facer un seguimento de todos eles. Claro que estou de broma... mencionei que se tomaba moi en serio o seu traballo?

Nese momento, a rede informática estaba executando Windows 2000. Pronto descubrín que cada vez que iniciaba sesión no sistema, lanzábase un script que especificaba iniciar o servidor VNC desde a conta do administrador para o acceso remoto ao escritorio. Sempre que este tipo quería espiar, conectaba directamente á túa máquina e miraba. Foi arrepiante, e agora que penso niso, probablemente ilegal.

Despois de ter cortado os dentes en BASIC e C64, agora escribín en C e ata un pouco en C++. Daquela, aínda estaba moi interesado na linguaxe D, que corrixiu algunhas das deficiencias de C++, tal e como o vin entón.

Adoitaba ir á aula de informática para ler algo novo en D ou xogar co compilador Digital Mars D. Ás veces, mentres me distraía de pensar no gran futuro de D, escribía código C para piratear outros programas Win32 a través da súa xanela. asas.

Nos vellos tempos da programación Win32, atopar un controlador de fiestra era o método máis sinxelo para piratear outros programas. Obviamente, todos os programas GUI en Windows tiñan unha xanela, aínda que non aparecese na pantalla. Escribindo un programa para recuperar un identificador a outro proceso (esencialmente unha ligazón a el), podería enviarlle mensaxes. Isto permitiu algunhas operacións básicas como ocultar/mostrar unha xanela de programa, así como cousas moi interesantes como forzar un proceso a cargar unha DLL arbitraria no seu espazo de memoria e comezar a executar código. Despois da inxección de DLL, comezou a diversión.

No primeiro mes e medio, este detective non me molestou moito; conectouse ao servidor VNC da miña máquina só unha ou dúas veces. Pero unha sesión en particular puido espertar o seu interese. Estaba escribindo algún código C para ocultar as fiestras do Buscaminas (sen pechalas) para facilitar a súa xogada na clase, cando notei que a icona branca de VNC da bandexa do sistema quedara negra. Isto significaba que agora me estaba observando.

Seguín codificando como sempre, intentando ignoralo. Mentres tanto, a máquina comezou a diminuír a velocidade, intentando transmitir a velocidade de cadros máxima a un dos innumerables monitores da esquina da sala. Windows case deixou de responder, cando se me esgotou a paciencia, pechei sesión e rematei o día.

Nas seguintes visitas á aula de informática, Colombo interesouse moito polo que facía case todas as veces. Despois de aproximadamente a cuarta vez, decidín: teño que facer algo ao respecto.

Admito que unha persoa razoable e racional podería simplemente plantexar esta cuestión directamente con el ou co seu xefe. Non obstante, sempre cedei á tentación e axiña convencínme a adoptar unha estratexia completamente diferente.

- Non podes facer nada sen este servidor VNC! — Díxenme con calma e decisión varias veces.

Era necesario matar a VNC.

Comecei a entrar na aula de informática con grandes grupos de alumnos e a sentarme o máis lonxe posible da esquina cos monitores. Isto funcionou durante un tempo e deume tempo para probar ideas.

O meu primeiro intento, creo que estarás de acordo, foi bastante débil. Facendo clic co botón dereito na icona VNC na bandexa do sistema, vin un menú coas letras máxicas EXIT. Desafortunadamente, as letras foron escritas en texto de contorno gris. O administrador desactivou o elemento do menú "Saír" a través do Editor de políticas de grupo. Tentei eliminar o proceso desde o Xestor de tarefas, pero, por suposto, era invisible para min porque estaba a executarse cunha conta diferente e máis privilexiada. Non funcionou.

Recordei que o servidor VNC funciona no porto TCP 5900. O meu seguinte plan era enviar paquetes corrompidos a este porto para bloquealo.

Pasei polo menos uns días retocando o protocolo, enviando varias formas de merda ben estruturada ao porto 5900 e esperando que rompese. Ao final, iso tampouco funcionou.

Xa empezaba a pensar que non sería capaz de desfacerme desta cousa, cando de súpeto me deu conta: debe haber unha fiestra alí! Necesitamos mostralo. Quizais teña un botón "Silenciar" moi suculento que podo aproveitar moito.

Executei o meu código C agora case perfecto para atopar o identificador da xanela principal doutro proceso e, por suposto, atopouse VNC. Sentinme inspirado cando os meus dedos teclearon WM_SHOWWINDOW. Intenta adiviñar o que vin diante de min?

Nada!

Agora tiña curiosidade... tiña unha fiestra, pero ignoraba as miñas mensaxes. Comprobei o meu código para asegurarme de que funciona. Probouno noutros procesos e funcionou moi ben. Tentei enviar outras mensaxes á xanela VNC e aínda nada.

E entón volveume entender!

Grazas ao moi groso o libro Charles Petzold Estudei coidadosamente como funcionan os procesos Win32 dentro do sistema. Cada aplicación Win32 ten unha xanela así como unha "cola de mensaxes". As mensaxes desencadeadas pola interacción do usuario, así como as mensaxes enviadas polo propio Windows, chegan nunha cola e a propia aplicación decide como procesalas.

Non moi interesante en si. Pero cando me decatei de que unha cola de mensaxes sen procesar o suficientemente grande actuaba como unha heurística para que o Xestor de procesos de Windows interviñese nun proceso suspendido, comecei a suar serotonina pura.

Sen perder un segundo, volvín ao meu código C, preparándome para enviar outra mensaxe á xanela principal de VNC WM_SHOWWINDOW. Nun ciclo. Eterno. Entón, moitas mensaxes. WM_SHOWWINDOW, que agora sabía que VNC trataría de ignorar por completo... ao seu perigo.

Compilei e executei 4KB do código máis amante da liberdade da miña vida. Despois duns tres segundos, Windows informou de que o proceso vncserver.ехе non responde e fixen unha oferta que simplemente non puiden rexeitar:

Queres completar este proceso?

inferno si!

Déixeme admitir que durante o resto do día estiven insoportablemente satisfeito comigo mesmo.

Despois dunhas horas que pasei a dixerir o meu novo superpoder, decidín como o usaría. Era demasiado fácil acabar coa sesión xusto diante del. Tiven unha idea mellor: desaparecer por completo.

Despois bautismo de lume con programación de tomas Decateime de que podía escribir código que faría dúas cousas. Ocupará primeiro o porto TCP 5900 recén liberado, ocupado anteriormente polo proceso do servidor VNC despistado. A continuación, creará unha nova conexión TCP co servidor VNC da máquina especificada. O código simplemente enviará todos os datos entre os dous sockets e Columbo pensará que se está conectando a min, cando en realidade se conectará a un servidor VNC completamente diferente.

O meu código actuará como unha ponte secreta entre min e algunha outra pobre alma da miña elección. Foi marabilloso.

Inmediatamente comecei a escribir a miña ponte VNC falsa. Columbo conectoume varias veces, pero seguín programando diante del. Cheguei á conclusión de que non tiña nin idea do que estaba facendo, aínda que escribín cousas obvias como números de porto e comentarios como // Прощай, жуткий шпион VNC.

Despois dun par de días, non puiden facer que o código funcionara correctamente. Para empeorar as cousas, traballaba case continuamente coa icona negra de VNC na bandexa do sistema. Mentres estaba conectado, non puiden liberar o porto para probar o meu código.

Se o soubera entón netcat!

Ao final, os meus nervios cederon; despois de todo, era un mozo impaciente de 17 anos. Ao ver a icona branca do servidor VNC volverse negra, asusteime, abrín o código orixinal que poboaba a cola de mensaxes e executei diante dos seus ollos. Mesmo esperei un par de segundos antes de facer clic End Process, só para asegurarse de que o viu.

Se premer ese botón non me convenceu completamente de que pagaba a pena, entón el saltaba por detrás da súa fortaleza de monitores para achegarse rapidamente e sacarme da habitación.

Como resultado, expulsáronme da rede durante dúas semanas. Un castigo xusto, pensei. Despois dunhas tres semanas, o servidor VNC desapareceu dos scripts de arranque e nunca apareceu en ningún outro lugar. Nunca souben se o meu incidente xogou algún papel nisto ou non, pero arruinou por completo o meu plan de enriquecerme fabulosamente vendendo a miña arma VNC a estudantes deprimidos en salas de informática universitarias de todo o país.

Fonte: www.habr.com

Engadir un comentario