ScreenLogger - Lächeln, Sie werden von einer versteckten Kamera gefilmt

Also, willkommen. In diesem Artikel analysieren wir den Prozess des Schreibens eines Programms, mit dem alle auf einem Remotecomputer ausgeführten Aktionen ohne Wissen des Endbenutzers in Echtzeit überwacht werden können. Der Autor des Artikels warnt davor, dass er nicht für die rechtswidrige Verwendung der folgenden Technologien verantwortlich ist, und empfiehlt nicht, sie für illegale Zwecke zu verwenden. Lass uns gehen!

Wenn Sie ein ausreichend großes Softwareprodukt schreiben, müssen Sie die globale Aufgabe in mehrere einfachere aufteilen. In diesem Fall habe ich mehrere praktisch unabhängige Prozesse identifiziert, die es uns ermöglichen, gemeinsam das gewünschte Ergebnis zu erzielen. Um die Aufgabe zu implementieren, müssen insbesondere Folgendes implementiert werden:

0) Hinzufügen von Servicedateien beim ersten Ausführen zu Systemordnern
1) Machen Sie einen Screenshot vom Bildschirm
2) Senden Sie einen Screenshot an einen Remote-Server

Dementsprechend wurde die .NET-Plattform für die Implementierung ausgewählt, die über alle erforderlichen Funktionen verfügt. Die Anwendung wurde zum Zwecke der Visualisierung und des Debuggens in WindowsForms geschrieben. Im Großen und Ganzen kann es sich um eine Konsole handeln.

Funktionsbeschreibung:

SetConfig - bietet das Lesen von Konfigurationsparametern aus der angehängten Einstellungsdatei
Senden - verantwortlich für das Senden eines Screenshots an eine E-Mail
MakeScreen - verantwortlich für die Erstellung eines Screenshots
Kreis - ist dafür verantwortlich, das Aufnehmen und Senden eines Screenshots im Hintergrund mit einer bestimmten Häufigkeit zu wiederholen
CasualStart - Definiert Aktionen beim nächsten Programmstart
FirstStart - stellt die korrekte Installation des Programms sicher

Jetzt - ein bisschen mehr Details zu jeder der Funktionen. Konfigurationseinstellung:

Da die Software flexibel sein muss, sollte es möglich sein, die internen Parameter des Programms von außerhalb seines Codes zu ändern. Bei jedem Start versucht diese Software, die Datei SaveScreen.ini zu finden, ihre Einstellungen zu aktualisieren und erst dann im normalen Modus zu arbeiten. In dem Fall, dass es nicht möglich ist, die Parameter zu aktualisieren, werden die Standardwerte verwendet.

(Welcher Parameter ist für das verantwortlich, was am Ende des Artikels steht?)

Aus technischen Gründen musste ich anstelle eines Leerzeichens den Unterstrich und anstelle von @ - # verwenden, aber innerhalb des Programms wird ein umgekehrter Austausch durchgeführt.

Die Programmausführung beginnt im Block Form1_load und kann in zwei Modi entwickelt werden: normaler Start (wenn der Computer über ein Installationsverzeichnis verfügt) und Installation (wenn kein Installationsverzeichnis vorhanden ist). Betrachten wir jeden von ihnen.

Erster Lauf:
Beim ersten Start müssen Sie ein Verzeichnis erstellen, in dem die Programmdateien abgelegt werden, die ausführbare Datei und die Konfigurationsdatei dort übertragen sowie die erforderlichen Einträge zur Registrierung hinzufügen, um Software zur automatischen Ausführung hinzuzufügen.

Dementsprechend wird dies durch die Funktion FirstStart () implementiert

Bild

Nach der Installation wird die Anwendung geschlossen. Wenn Sie den Computer das nächste Mal neu starten, funktioniert sie wie gewohnt.

Regelmäßiger Start:
Ein regelmäßiger Start startet einen Hintergrund-Thread, der Screenshots erstellt und sendet sowie den Ordner mit Screenshots löscht, die während der letzten Sitzung aufgenommen wurden. Danach wartet es eine beträchtliche Zeit, bis der Antrag zwangsweise gekündigt wird. Vor dem Starten des Hintergrundthreads ist eine Pause möglich, die auf relativ langsamen Computern eingestellt werden sollte, um das Laden des Systems und das Fehlen von Konflikten beim Start zu beschleunigen.
asualStart ()

Bild

Auflage:
Alles ist prosaisch für die Schande - im ewigen Zyklus machen und senden wir Screenshots, wonach wir auf die angegebene Zeit warten. Eine um eine Größenordnung interessantere Methode ist das Aufnehmen und Senden eines Bildschirms.

Bild

Machen Sie einen Screenshot:
In C # ist es möglich, ein Bild in einer Bitmap zu speichern, indem Sie die Kopierfunktion vom Bildschirm aus verwenden. Daher müssen Sie lediglich ein Objekt zum Speichern eines Screenshots mit einer Auflösung erstellen, die der aktuellen Bildschirmauflösung entspricht, ein Objekt anhängen, das eine Bitmap vom Bildschirm empfangen kann, und es in einem zuvor erstellten Verzeichnis speichern.

Bild

Versand per Post:
In C # ist es möglich, mit E-Mails mithilfe vordefinierter Klassen zu arbeiten, mit denen Sie die Nachrichtenfelder ausfüllen, den Adressaten und den Adressaten angeben und tatsächlich senden können, indem Sie eine Methode aufrufen. Schließen Sie diese Methode in einen Try-Catch-Block ein, falls keine Netzwerkverbindung besteht. Selbst in diesem Fall gibt das Programm keine Fehlermeldung aus, wartet jedoch pflichtbewusst, bis es die Möglichkeit hat, auf den Server zuzugreifen. Der Mailserver wurde grundsätzlich aus Gründen der Einfachheit ausgewählt - Sie können überall Bilder werfen.

Bild

Allgemeine Interaktion:
Ich wiederhole, der Programmstart erfolgt in der Form1_Load-Methode. Das Programm versucht, die Konfiguration zu aktualisieren, und ermittelt dann, ob sie zum ersten Mal gestartet wurde. Wenn dies der Fall ist, wird sie dem richtigen Ordner hinzugefügt und gestartet und deaktiviert. Andernfalls wird ein Hintergrundprozess gestartet, der das Bild in einem bestimmten Intervall stabil vom Bildschirm auf den Mailserver wirft. Nichts kompliziertes oder ungewöhnliches, nur das Zusammenspiel mehrerer integrierter Klassen.
Bild

Und schließlich eine Erläuterung der Autokonfigurationsdatei - alle Variablennamen stimmen mit den Namen im Programm überein. Daher beschreibe ich zur Erläuterung der Felder in der int-Datei auch die Variablen selbst.

Bild

wayToDir - Der Name des Unterordners, in den Screenshots abgelegt werden
finalDir = -name des Verzeichnisses, in das das Programm übertragen wird
nameOfApp = Name der ausführbaren Datei
subKeyAdress = Pfad zum Registrierungseintrag, der dem Autorun hinzugefügt werden soll
reserviert - reserviertes Feld
name - Name des Registrierungseintrags
startPause - Pause vor der Aufnahme von Screenshots
exitPause - Pause vor dem erzwungenen Beenden des Programms
adressFrom - Absenderadresse
nameFrom - Absendersignatur
nameTo - Postanschrift des Empfängers
mailSubject - Betreff der E-Mail
mailBody - Nachrichtentext
smtpAdress - SMTP-Adresse des Absendersendservers
smtpPort - Port zum Senden von E-Mails
mailPassword - Passwort aus der Mail des Absenders
exp - Dateierweiterung
timeBetweenScreens - Die Zeit zwischen zwei Screenshots.

Zusammenfassend:

Der Prozess des Schreibens einer Anwendung zum Verfolgen von Aktionen auf einem Remotecomputer wurde gerade beschrieben. Wenn Sie hier eine Verbindung herstellen, eine Datei mit einer Liste von Befehlen vom Server empfangen und aufteilen, erhalten Sie einen vereinfachten selbstgeschriebenen TeamViewer. Dies steht aber nicht in diesem Artikel.

Quellcode

Source: https://habr.com/ru/post/de457172/


All Articles