Der Wettstreit der Programmierer: Ich gegen den Typen mit VNC

In diesem Blog Es sind viele Programmiergeschichten veröffentlicht worden. Ich erinnere mich gern an meine alten Dummheiten zurück. Nun, hier ist noch eine solche Geschichte.

Ich begann mich zum ersten Mal für Computer, insbesondere für Programmierung, zu interessieren, als ich etwa 11 Jahre alt war. Zu Beginn der Mittelstufe verbrachte ich die meiste freie Zeit mit meinem C64 und programmierte in Basic, während ich schlechten Code mit Scheren herausschnitt.größtenIch mache keine Witze, mit Scheren. Nach der Schule (im Alter von etwa 16 Jahren) gehen britische Kinder normalerweise aufs College, wo sie drei bis vier Fächer auswählen, bevor sie zur Universität gehen. Angesichts meiner Leidenschaft für die beige Box und den Kassettenrekorder zu Hause beschloss ich, dass es die richtige Wahl sei, »Informatik« am College zu studieren..

Der Kurs gefiel mir mehr, als ich erwartet hatte; dort lernte ich zum ersten Mal Pascal und Delphi kennen.

Der Kurs hat mir besser gefallen als erwartet; dort habe ich zum ersten Mal Pascal und Delphi kennengelernt.

In den Pausen zwischen den Unterrichtsstunden hatten die Studenten die Möglichkeit, an einem der verfügbaren Computer im PC-Raum zu arbeiten. Stellen Sie sich vor: ein riesiger Raum, der für etwa hundert Personen ausgelegt ist, mit Reihen von Tischen, die mit Maschinen ausgestattet sind – ähnlich wie bei denen, wo der Monitor auf dem Gehäuse steht. Ein ständiges Summen der Lüfter, Mauszeiger gleiten über die Tische, ohne auch nur einmal innezuhalten. In der Luft liegt eine seltsame Mischung aus Gerüchen, als würden 50 bis 100 hormonelle Teenager regelmäßig zum Abkühlen der hundert Pentium-III-Chips wechseln.

Trotz der gesundheitlichen Risiken mochte ich es, am Computer zu sitzen, wenn sich eine freie Minute bot.

Im Raum war ein Administrator anwesend, ein kleiner Mann mittleren Alters, der aufgrund seines unaufhörlichen Drangs gewählt wurde, ein tyrannischer Diktator zu werden. So denke ich. Anwesend – das ist schwach ausgedrückt, der Typ liebte seine Arbeit wirklich. Er hatte die Aufgabe, darauf zu achten, dass niemand den Schulcomputer für unangemessene Dinge nutzte.

Bis heute habe ich das Gefühl, dass die Belohnung für den Administrator direkt von der Anzahl der Studenten abhing, die er bei der Arbeit erwischte und aus dem Computerraum verwies. Ich bin mir ziemlich sicher, dass dieser Typ seine Hypothek vorzeitig abbezahlt hat.

Er saß in einer entfernten Ecke des Computerraums an einem Ecktisch. Man konnte mit Sicherheit annehmen, dass seine fruchtbaren Monitore einen beeindruckend kurzen Fortpflanzungszyklus gefunden hatten – es waren einfach zu viele. Es blieb nur zu spekulieren, ob er es tatsächlich schaffte, sie alle im Auge zu behalten. Natürlich mache ich nur Spaß… ich habe doch erwähnt, dass er seine Arbeit sehr ernst nahm?

Zu dieser Zeit lief das Computernetzwerk unter Windows 2000. Bald stellte ich fest, dass jedes Mal, wenn man sich anmeldete, ein Skript gestartete wurde, in dem der Start des VNC-Servers mit dem Administratorkonto für den Fernzugriff auf den Desktop festgelegt war. Jedes Mal, wenn dieser Typ ein Auge auf Sie werfen wollte, konnte er direkt auf Ihren Computer zugreifen und beobachten. Das war unheimlich und jetzt, wenn ich darüber nachdenke, wahrscheinlich illegal.

Nachdem ich meine Erfahrungen mit Basic und C64 gesammelt hatte, begann ich, in C und sogar ein wenig in C++ zu programmieren. In dieser Zeit war ich außerdem sehr begeistert von der Programmiersprache D, die einige der Schwächen von C++ beseitigte, wie ich damals fand.

Ich besuchte normalerweise den Computerraum, um etwas Neues über D zu lesen oder mit dem Compiler Digital Mars D zu experimentieren. Manchmal, abgelenkt von meinen Gedanken über die großartige Zukunft von D, schrieb ich C-Code, um andere Win32-Programme über die Deskriptoren ihrer Fenster zu hacken.

In den guten alten Zeiten der Win32-Programmierung war die Suche nach dem Fenster-Deskriptor die einfachste Methode, um andere Programme zu hacken. Offensichtlich hatte jede grafische Anwendung in Windows ein Fenster, selbst wenn es nicht auf dem Bildschirm angezeigt wurde. Wenn Sie ein Programm schrieben, das den Deskriptor eines anderen Prozesses extrahierte (also eine Art Referenz auf ihn), konnten Sie ihm Nachrichten senden. Dies ermöglichte grundlegende Operationen, wie das Verstecken oder Anzeigen des Programmfensters, aber auch wirklich interessante Dinge, wie zum Beispiel den Prozess dazu zu bringen, eine beliebige DLL in seinen Speicherraum zu laden und den Code auszuführen. Nach der DLL-Injektion begann der spannende Teil.

In den ersten anderthalb Monaten hat mich dieser Detektiv nicht besonders gestört, er hat sich nur ein oder zwei Mal mit dem VNC-Server auf meinem Rechner verbunden. Aber eine bestimmte Sitzung hat wahrscheinlich sein Interesse geweckt. Ich habe an einem C-Code geschrieben, um die Fenster von Minesweeper zu verbergen (ohne sie zu schließen), damit ich im Unterricht besser spielen konnte, und dann bemerkte ich, dass das weiße VNC-Symbol im Systemtray schwarz geworden ist. Das bedeutete, dass er jetzt zuschaut.

Ich habe wie gewohnt weiter programmiert und versucht, ihn zu ignorieren. In der Zwischenzeit begann der Rechner deutlich zu ruckeln, während er versuchte, die maximale Bildrate auf einen der unzähligen Monitore in der Ecke des Raumes zu übertragen. Windows reagierte fast nicht mehr, bis mein Geduld zu Ende war, ich habe mich abgemeldet und für heute Schluss gemacht.

Bei den nächsten Besuchen im Computerraum zeigte Colombo fast jedes Mal lebhaftes Interesse an dem, was ich tue. Nach etwa dem vierten Mal beschloss ich: Da muss etwas unternommen werden.

Ich nehme an, dass eine vernünftige, rationale Person dieses Thema direkt mit ihm oder seinem Vorgesetzten hätte besprechen können. Allerdings fiel es mir immer schwer, diesem Impuls zu widerstehen, und ich überzeugte mich schnell davon, eine völlig andere Strategie zu wählen.

„Du kannst ohne diesen VNC-Server nichts machen!“ – sagte ich mir immer wieder ruhig und entschlossen.

VNC musste abgeschaltet werden.

Ich begann, den Computerkabinett mit größeren Gruppen von Studenten zu betreten und setzte mich so weit wie möglich von der Monitor-Ecke entfernt. Eine Zeitlang funktionierte das und gab mir etwas Zeit, um meine Ideen zu überprüfen.

Mein erster Versuch, so denken Sie wahrscheinlich auch, war ziemlich schwach. Mit einem Rechtsklick auf das VNC-Symbol im Systemtray sah ich ein Menü mit den zauberhaften Buchstaben E-X-I-T. Leider waren die Buchstaben in grauem Umriss geschrieben. Der Administrator hatte den Menüpunkt „Beenden“ über den Gruppenrichtlinien-Editor deaktiviert. Ich versuchte, den Prozess über den Task-Manager zu beenden, aber natürlich war er mir unsichtbar, da er unter einem anderen, privilegierteren Konto lief. Nichts funktionierte.

Der VNC-Server läuft auf dem TCP-Port 5900, erinnerte ich mich. Mein nächster Plan war es, beschädigte Pakete an diesen Port zu senden, um ihn zum Absturz zu bringen.

Tagelang analysierte ich das Protokoll und schickte verschiedene Formen von korrekt strukturiertem Müll an den Port 5900 in der Hoffnung, dass es kaputt geht. Letztendlich funktionierte auch das nicht.

Ich begann schon zu denken, dass ich dieses Teil nicht loswerden könnte, als mir plötzlich einfiel: Dort muss es ein Fenster geben! Ich muss es anzeigen. Vielleicht finde ich darin einen schönen, saftigen „Aus“-Knopf, den ich sinnvoll nutzen kann!

Ich startete meinen fast perfekten C-Code, um den Deskriptor des Hauptfensters eines anderen Prozesses zu finden – und tatsächlich fand ich VNC. Ich fühlte mich beflügelt, als meine Finger WM_SHOWWINDOW. Rate mal, was ich sah?

Nichts!

Jetzt wurde ich neugierig… Es hatte ein Fenster, aber es ignorierte meine Nachrichten. Ich überprüfte meinen Code noch einmal, um sicherzustellen, dass er funktioniert. Ich testete ihn an mehreren anderen Prozessen, und es funktionierte hervorragend. Ich versuchte, andere Nachrichten an das VNC-Fenster zu senden, aber es passierte immer noch nichts.

Und dann hatte ich wieder einen Geistesblitz!

Dank eines sehr dicken Buchs von Charles Petzold habe ich gründlich studiert, wie die Win32-Prozesse im System funktionieren. Jede Win32-Anwendung hat ein Fenster und eine "Nachrichtenschlange". Nachrichten, die durch Benutzerinteraktionen ausgelöst werden, sowie Nachrichten, die von Windows selbst gesendet werden, gelangen in die Schlange, und die Anwendung entscheidet, wie sie verarbeitet werden.

Das ist an sich nicht allzu interessant. Aber als mir klar wurde, dass eine ausreichend große unbearbeitete Nachrichtenschlange eine Heuristik für das Eingreifen in einen festgefahrenen Prozess durch den Window Process Manager darstellt, wurde ich ganz aufgeregt.

Ohne einen Moment zu verlieren, kehrte ich zu meinem C-Code zurück und bereitete mich darauf vor, ein weiteres Nachricht an das Hauptfenster von VNC zu senden, WM_SHOWWINDOW. In einer Schleife. Ewig. Also viele Nachrichten, WM_SHOWWINDOWdie, wie ich jetzt wusste, VNC vollständig ignorieren würde… auf eigenes Risiko.

Ich kompilierte und startete 4 KB des rebellischsten Codes meines Lebens. Etwa drei Sekunden später teilte Windows mir mit, dass der Prozess vncserver.exe nicht reagiert, und machte mir ein Angebot, das ich einfach nicht ablehnen konnte:

Möchten Sie diesen Prozess beenden?

Verdammte Axt, JA!

Ich muss gestehen, dass ich den Rest des Tages unerträglich zufrieden mit mir selbst war.

Nach einigen Stunden des Verdauens meiner neuen Superkraft beschloss ich, wie ich sie einsetzen würde. Es wäre viel zu einfach gewesen, die Sitzung einfach vor seinen Augen zu beenden. Ich hatte eine bessere Idee – einfach komplett zu verschwinden.

Nach meinem ersten Kampf mit der Socket-Programmierung erkannte ich, dass ich einen Code schreiben könnte, der zwei Dinge tut. Zuerst wird er den kürzlich freigegebenen TCP-Port 5900 besetzen, der zuvor von einem ahnungslosen VNC-Serverprozess belegt war. Dann wird er eine neue TCP-Verbindung zum VNC-Server des gewählten Geräts herstellen. Der Code wird einfach alle Daten zwischen den beiden Sockets weiterleiten, und Colombo wird denken, dass er sich mit mir verbindet, während er in Wirklichkeit mit einem ganz anderen VNC-Server verbunden wird.

Mein Code wird als geheimer Brückenbauer zwischen mir und irgendeiner anderen armen Seele meiner Wahl fungieren. Es war großartig.

Ich begann sofort, meinen gefälschten VNC-Bridge zu schreiben. Colombo hat sich mehrmals bei mir eingeloggt, aber ich programmierte ungestört vor seinen Augen. Ich kam zu dem Schluss, dass er absolut keine Ahnung von meinen Aktivitäten hatte, obwohl ich offensichtliche Dinge wie Portnummern und Kommentare wie schrieb. // Прощай, жуткий шпион VNC.

Nach ein paar Tagen konnte ich den Code einfach nicht zum Laufen bringen. Was noch schlimmer war, ich arbeitete praktisch ununterbrochen mit dem schwarzen VNC-Symbol im Systemtray. Solange er verbunden war, konnte ich den Port nicht freigeben, um meinen Code zu testen.

Hätte ich damals von netcat!

gewusst, wäre ich nicht so frustriert gewesen. Letztendlich hielten meine Nerven nicht stand, schließlich war ich ein ungeduldiger 17-Jähriger. Als ich wieder beobachtete, wie das weiße VNC-Server-Symbol schwarz wurde, verlor ich die Geduld, öffnete den ursprünglichen Code, der die Nachrichtenwarteschlange füllte, und führte ihn direkt vor seinen Augen aus. Ich wartete sogar ein paar Sekunden, bevor ich auf Prozess beenden, klickte, nur um sicherzustellen, dass er es sah.

Wenn der Druck dieser Taste mich nicht bereits völlig überzeugt hätte, dass es das wert war, dann wäre sein Sprung von seiner stabilen Monitorposition, um schnell auf mich zuzukommen und mich aus dem Raum zu werfen, definitiv den Aufwand wert gewesen.

Am Ende wurde mir der Zugang zum Netz für zwei Wochen gesperrt. Eine gerechte Strafe, dachte ich. Etwa drei Wochen später verschwand der VNC-Server aus den Boot-Skripten und tauchte nirgends mehr auf. Ich erfuhr nie, ob mein Vorfall eine Rolle dabei spielte oder nicht, aber er zerstörte vollständig meinen Plan, durch den Verkauf meiner VNC-Gun an bedrängte Studenten in Computerlabors landesweit zu einem Vermögen zu kommen.

Quelle: habr.com

Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen 🔥 Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen | ProHoster