Coder Battle: Ich gegen diesen VNC-Typen

В dieser Blog Es wurden schon einige Programmierergeschichten veröffentlicht. Ich erinnere mich gerne an meine alten dummen Dinge. Nun, hier ist eine weitere 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 High School bоDen größten Teil meiner Freizeit habe ich damit verbracht, an meinem C64 zu basteln, BASIC zu schreiben und dann den fehlerhaften Code mit einer Schere herauszuschneiden. Ich mache keine Witze, Schere.

Nach der Schule (ungefähr im Alter von 16 Jahren) gehen britische Kinder normalerweise aufs College, wo sie drei oder vier Fächer belegen, bevor sie zur Universität gehen. Aufgrund meiner Vorliebe für die beige Box und das Tonbandgerät zu Hause entschied ich, dass ein Studium der „Informatik“ an der Hochschule die richtige Wahl war.

Der Kurs hat mir mehr Spaß gemacht, als ich erwartet hatte. dort traf ich Pascal und Delphi zum ersten Mal.

In den Pausen zwischen den Vorlesungen konnten die Studierenden an jedem freien Rechner im Computerraum arbeiten. Stellen Sie sich vor: ein riesiger Raum, ausgelegt für etwa hundert Personen, mit Tischreihen voller Maschinen, wie denen, auf denen der Monitor auf der Systemeinheit steht. Die Fans summen ständig, Mäusebälle summen auf den Tischen und halten keine Sekunde inne. Es liegt ein seltsamer Geruch in der Luft, als würden 50-100 hormonelle Teenager regelmäßig Hunderte von Pentium-III-Chips kühlen.

Trotz der gesundheitlichen Risiken saß ich in meiner freien Minute gerne am Computer.

Der diensthabende Administrator im Raum war ein kleiner Mann mittleren Alters, der aufgrund seines unstillbaren Wunsches, ein böser Diktator zu werden, für diese Rolle ausgewählt wurde. Das nehme ich an. Im Dienst ist eine Untertreibung; der Typ hat seinen Job wirklich geliebt. Er hatte die Aufgabe, für Ordnung zu sorgen, damit niemand den Schulcomputer für etwas Unangemessenes benutzte.

Bis heute sagt mir meine Intuition, dass der Bonus des Administrators direkt von der Anzahl der Studenten abhing, die er an der Hand packte und aus dem Computerraum begleitete. Ich bin mir ziemlich sicher, dass dieser Typ seine Hypothek vorzeitig abbezahlt hat.

Er saß in der hinteren Ecke des Computerraums an einem Ecktisch. Und man konnte davon ausgehen, dass seine Fruchtbarkeitsmonitore einen Weg gefunden hatten, sich mit einer beeindruckend kurzen Tragzeit zu vermehren, es gab so viele davon. Man konnte sich nur fragen, ob er wirklich Zeit hatte, den Überblick über sie alle zu behalten. Natürlich mache ich nur Witze ... habe ich schon erwähnt, dass er seine Arbeit sehr ernst nimmt?

Zu dieser Zeit lief im Computernetzwerk Windows 2000. Ich stellte bald fest, dass jedes Mal, wenn ich mich am System anmeldete, ein Skript gestartet wurde, das angab, den VNC-Server vom Administratorkonto aus für den Remotezugriff auf den Desktop zu starten. Wann immer dieser Typ Sie ausspionieren wollte, stellte er eine direkte Verbindung zu Ihrem Gerät her und beobachtete es. Es war gruselig und wenn ich darüber nachdenke, wahrscheinlich illegal.

Nachdem ich mir BASIC und C64 angeeignet hatte, schrieb ich jetzt in C und sogar ein wenig C++. Damals interessierte ich mich noch sehr für die Sprache D, die aus meiner Sicht einige Mängel von C++ korrigierte.

Ich ging immer in den Computerraum, um etwas Neues über D zu lesen oder mit dem Digital Mars D-Compiler zu spielen. Manchmal, während ich vom Nachdenken über die große Zukunft von D abgelenkt war, schrieb ich C-Code, um andere Win32-Programme durch ihr Fenster zu hacken Griffe.

In den guten alten Zeiten der Win32-Programmierung war das Finden eines Fensterhandles die einfachste Methode, andere Programme zu hacken. Offensichtlich hatten alle GUI-Programme unter Windows ein Fenster, auch wenn es nicht auf dem Bildschirm erschien. Indem Sie ein Programm schreiben, um ein Handle für einen anderen Prozess (im Wesentlichen einen Link dazu) abzurufen, können Sie Nachrichten an ihn senden. Dies ermöglichte einige grundlegende Vorgänge wie das Ein-/Ausblenden eines Programmfensters, aber auch wirklich coole Dinge wie das Erzwingen, dass ein Prozess eine beliebige DLL in seinen Speicherraum lädt und mit der Ausführung von Code beginnt. Nach der DLL-Injektion begann der Spaß.

In den ersten anderthalb Monaten störte mich dieser Detektiv nicht sonderlich; er stellte nur ein- oder zweimal eine Verbindung zum VNC-Server auf meinem Rechner her. Aber eine bestimmte Sitzung könnte sein Interesse geweckt haben. Ich habe gerade C-Code geschrieben, um Minesweeper-Fenster auszublenden (ohne sie zu schließen), um das Spielen im Unterricht zu erleichtern, als mir auffiel, dass das weiße VNC-Symbol in der Taskleiste schwarz geworden war. Das bedeutete, dass er mich jetzt beobachtete.

Ich programmierte wie gewohnt weiter und versuchte, ihn zu ignorieren. Währenddessen begann die Maschine langsamer zu werden und versuchte, die maximale Bildrate auf einen der unzähligen Monitore in der Ecke des Raumes zu übertragen. Windows reagierte fast nicht mehr, als meine Geduld erschöpft war, habe ich mich abgemeldet und den Tag beendet.

Bei den darauffolgenden Besuchen im Computerraum zeigte Colombo fast jedes Mal großes Interesse an dem, was ich tat. Nach ungefähr dem vierten Mal entschied ich: Ich muss etwas dagegen tun.

Ich gebe zu, dass eine vernünftige, rationale Person dieses Problem einfach direkt mit sich selbst oder seinem Chef hätte besprechen können. Allerdings gab ich der Versuchung immer wieder nach und überredete mich schnell zu einer ganz anderen Strategie.

- Ohne diesen VNC-Server geht nichts! – sagte ich mir mehrmals ruhig und entschieden.

Es war notwendig, VNC zu töten.

Ich fing an, mit großen Gruppen von Schülern in den Computerraum zu gehen und so weit wie möglich von der Ecke mit den Monitoren entfernt zu sitzen. Das funktionierte eine Weile und gab mir etwas Zeit, Ideen zu testen.

Ich denke, Sie werden mir zustimmen, dass mein erster Versuch ziemlich schwach war. Als ich mit der rechten Maustaste auf das VNC-Symbol in der Taskleiste klickte, sah ich ein Menü mit den magischen Buchstaben EXIT. Leider waren die Briefe in grauer Umrissschrift geschrieben. Der Administrator hat den Menüpunkt „Beenden“ über den Gruppenrichtlinien-Editor deaktiviert. Ich habe versucht, den Prozess über den Task-Manager abzubrechen, aber er war für mich natürlich unsichtbar, da er unter einem anderen, privilegierteren Konto ausgeführt wurde. Es hat nicht geklappt.

Ich erinnerte mich, dass der VNC-Server auf dem TCP-Port 5900 läuft. Mein nächster Plan bestand darin, beschädigte Pakete an diesen Port zu senden, um ihn zum Absturz zu bringen.

Ich habe mindestens ein paar Tage damit verbracht, an dem Protokoll herumzubasteln, verschiedene Arten von gut strukturiertem Mist an Port 5900 zu senden und zu hoffen, dass es kaputt geht. Am Ende hat das auch nicht funktioniert.

Ich begann schon zu glauben, dass ich das Ding nicht loswerden würde, als mir plötzlich klar wurde: Da muss ein Fenster sein! Wir müssen es zeigen. Vielleicht gibt es eine schöne, saftige „Stumm“-Taste, die ich gut gebrauchen kann!

Ich habe meinen inzwischen nahezu perfekten C-Code ausgeführt, um das Handle zum Hauptfenster eines anderen Prozesses zu finden – und tatsächlich wurde VNC gefunden. Ich fühlte mich inspiriert, als meine Finger tippten WM_SHOWWINDOW. Versuchen Sie zu erraten, was ich vor mir sah?

Schon Gut!

Jetzt war ich neugierig ... es hatte ein Fenster, aber es ignorierte meine Nachrichten. Ich habe meinen Code noch einmal überprüft, um sicherzustellen, dass er funktioniert. Habe es mit mehreren anderen Prozessen getestet und es hat großartig funktioniert. Ich habe versucht, andere Nachrichten an das VNC-Fenster zu senden, aber immer noch nichts.

Und dann dämmerte es mir wieder!

Dank der sehr dicken ein Buch Charles Petzold Ich habe sorgfältig untersucht, wie Win32-Prozesse im System funktionieren. Jede Win32-Anwendung verfügt über ein Fenster sowie eine „Nachrichtenwarteschlange“. Durch Benutzerinteraktionen ausgelöste Nachrichten sowie von Windows selbst gesendete Nachrichten gelangen in eine Warteschlange und die Anwendung entscheidet selbst, wie sie verarbeitet werden.

An sich nicht sehr interessant. Aber als mir klar wurde, dass eine ausreichend große Warteschlange für unverarbeitete Nachrichten als Heuristik für Window Process Manager fungierte, um in einen hängengebliebenen Prozess einzugreifen, begann ich reines Serotonin zu schwitzen.

Ohne eine Sekunde zu verschwenden, kehrte ich zu meinem C-Code zurück und bereitete mich darauf vor, eine weitere Nachricht an das VNC-Hauptfenster zu senden WM_SHOWWINDOW. In einem Kreislauf. Ewig. Also viele Nachrichten. WM_SHOWWINDOW, von dem ich jetzt wusste, dass VNC versuchen würde, es vollständig zu ignorieren ... auf eigene Gefahr.

Ich habe 4 KB des freiheitsliebendsten Codes meines Lebens kompiliert und ausgeführt. Nach etwa drei Sekunden meldete Windows den Vorgang vncserver.ехе antwortet nicht und machte ein Angebot, das ich einfach nicht ablehnen konnte:

Möchten Sie diesen Vorgang abschließen?

AUF JEDENFALL!

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

Nachdem ich ein paar Stunden damit verbracht hatte, meine neue Superkraft zu verdauen, entschied ich, wie ich sie nutzen würde. Es war zu einfach, die Sitzung direkt vor seinen Augen zu beenden. Ich hatte eine bessere Idee – komplett zu verschwinden.

Nach Feuertaufe mit Socket-Programmierung Mir wurde klar, dass ich Code schreiben konnte, der zwei Dinge tun würde. Es wird zunächst den neu freigegebenen TCP-Port 5900 belegen, der zuvor vom ahnungslosen VNC-Serverprozess belegt war. Anschließend wird eine neue TCP-Verbindung zum VNC-Server des angegebenen Computers erstellt. Der Code leitet einfach alle Daten zwischen den beiden Sockets weiter, und Columbo wird denken, dass er eine Verbindung zu mir herstellt, obwohl er in Wirklichkeit eine Verbindung zu einem völlig anderen VNC-Server herstellt.

Mein Code wird als geheime Brücke zwischen mir und einer anderen armen Seele meiner Wahl fungieren. Das war hervorragend.

Ich habe sofort angefangen, meine gefälschte VNC-Brücke zu schreiben. Columbo hat sich mehrmals mit mir verbunden, aber ich habe vor ihm weiter programmiert. Ich kam zu dem Schluss, dass er keine Ahnung hatte, was ich tat, obwohl ich offensichtliche Dinge wie Portnummern und Kommentare wie „ // Прощай, жуткий шпион VNC.

Nach ein paar Tagen konnte ich den Code nicht mehr richtig zum Laufen bringen. Erschwerend kam hinzu, dass ich fast ununterbrochen mit dem schwarzen VNC-Symbol in der Taskleiste arbeitete. Während die Verbindung bestand, konnte ich den Port nicht freigeben, um meinen Code zu testen.

Wenn ich es damals gewusst hätte netcat!

Am Ende gaben meine Nerven nach, schließlich war ich ein ungeduldiger 17-Jähriger. Als ich sah, wie das weiße VNC-Serversymbol wieder schwarz wurde, flippte ich aus, öffnete den ursprünglichen Code, der die Nachrichtenwarteschlange füllte, und ließ ihn vor seinen Augen laufen. Ich habe sogar ein paar Sekunden gewartet, bevor ich geklickt habe End Process, nur um sicherzugehen, dass er es sah.

Wenn mich das Drücken dieses Knopfes nicht vollständig davon überzeugt hat, dass es sich lohnt, dann hat er es sicherlich getan, als er hinter seiner Festung aus Monitoren hervorsprang, schnell auf mich zukam und mich aus dem Raum führte.

Daraufhin wurde ich für zwei Wochen vom Netzwerk ausgeschlossen. Eine gerechte Strafe, dachte ich. Nach etwa drei Wochen verschwand der VNC-Server aus den Boot-Skripten und tauchte nirgendwo anders auf. Ich wusste nie, ob mein Vorfall dabei eine Rolle gespielt hat oder nicht, aber es hat meinen Plan, sagenhaft reich zu werden, indem ich meine VNC-Waffe an depressive Studenten in den Computerhallen der Colleges im ganzen Land verkauft habe, völlig zunichte gemacht.

Source: habr.com

Kommentar hinzufügen