Alors, bienvenue. Dans cet article, nous analyserons le processus d'écriture d'un programme qui permet une surveillance en temps réel de toutes les actions se produisant sur un ordinateur distant, à l'insu de l'utilisateur final. L'auteur de l'article avertit qu'il n'est pas responsable de l'utilisation illégale des technologies suivantes et ne recommande pas de l'utiliser à des fins illégales. C'est parti!
Lorsque vous écrivez un produit logiciel suffisamment volumineux, vous devez diviser la tâche globale en plusieurs tâches plus simples. Donc, dans ce cas, j'ai identifié plusieurs processus pratiquement indépendants qui, en travaillant ensemble, nous permettent d'atteindre le résultat souhaité. En particulier, pour mettre en œuvre la tâche, il est nécessaire de mettre en œuvre:
0) Ajout de fichiers de service lors de la première exécution aux dossiers système
1) Faites une capture d'écran de l'écran
2) Envoyez une capture d'écran à un serveur distant
En conséquence, la plate-forme .NET a été sélectionnée pour l'implémentation, qui possède toutes les fonctionnalités nécessaires. L'application est écrite dans WindowsForms à des fins de visualisation et de débogage, dans l'ensemble, il peut s'agir d'une console.
Description des fonctions:
SetConfig - fournit la lecture des paramètres de configuration à partir du fichier de paramètres joint
Envoyer - responsable de l'envoi d'une capture d'écran par e-mail
MakeScreen - responsable de la capture d'écran
Cercle - est responsable de répéter la prise et d'envoyer une capture d'écran en arrière-plan à une fréquence spécifiée
CasualStart - définit les actions lors du prochain lancement du programme
FirstStart - assure l'installation correcte du programme
Maintenant - un peu plus de détails sur chacune des fonctions. Paramètre de configuration:
Le logiciel devant être flexible, il devrait être possible de modifier les paramètres internes du programme depuis l'extérieur de son code. À chaque démarrage, ce logiciel essaie de trouver le fichier SaveScreen.ini, de mettre à jour ses paramètres et de ne commencer à fonctionner qu'en mode normal. Dans le cas où il est impossible de mettre à jour les paramètres, les valeurs par défaut sont utilisées.
(quel paramètre est responsable de ce qui sera à la fin de l'article)
Pour des raisons techniques, au lieu d'un espace, j'ai dû utiliser le trait de soulignement et au lieu de @ - #, mais à l'intérieur du programme, le remplacement inverse est effectué.
L'exécution du programme commence dans le bloc Form1_load et peut se développer en deux modes - lancement normal (si l'ordinateur a un répertoire d'installation) et installation (s'il n'y a pas de répertoire d'installation). Examinons chacun d'eux.
Première manche:
Au premier démarrage, vous devez créer un répertoire dans lequel les fichiers du programme seront placés, y transférer le fichier exécutable et le fichier de configuration, ainsi que ajouter les entrées nécessaires au registre pour ajouter le logiciel à l'exécution automatique.
En conséquence, ceci est implémenté par la fonction FirstStart ()

Après l'installation, l'application se ferme - la prochaine fois que vous redémarrerez l'ordinateur, cela fonctionnera comme d'habitude.
Lancement régulier:
Un lancement régulier lance un thread d'arrière-plan qui prend des captures d'écran et les envoie, ainsi que vide le dossier avec des captures d'écran prises lors de la dernière session. Après quoi, il attend une période de temps considérable avant la fin forcée de l'application. Avant de démarrer le thread d'arrière-plan, une pause est possible, qui doit être définie sur des ordinateurs relativement lents pour accélérer le chargement du système et l'absence de conflits au démarrage.
asualStart ()

Circulation:
Tout est prosaïque à déshonorer - dans le cycle éternel, nous prenons et envoyons des captures d'écran, après quoi nous attendons le temps spécifié. Un ordre de grandeur plus intéressant est le processus de prise et d'envoi d'un écran.

Faites une capture d'écran:
En C #, il est possible d'enregistrer une image dans un bitmap en utilisant la fonction de copie depuis l'écran. Par conséquent, tout ce qui doit être fait est de créer un objet pour stocker une capture d'écran avec une résolution égale à la résolution d'écran actuelle, d'y attacher un objet qui peut recevoir une image bitmap de l'écran et l'enregistrer dans un répertoire créé précédemment.

Envoi par mail:
En C #, il est possible de travailler avec le courrier en utilisant des classes prédéfinies qui vous permettent de remplir les champs de message, de spécifier le destinataire et le destinataire, et, en fait, d'envoyer en appelant une méthode. Enveloppez cette méthode dans un bloc try-catch au cas où il n'y aurait pas de connexion réseau - même dans ce cas, le programme ne donnera pas de message d'erreur, mais attendra consciencieusement qu'il ait la possibilité d'accéder au serveur. Le serveur de messagerie a été choisi pour des raisons de simplicité, en principe - vous pouvez jeter des photos n'importe où.

Interaction générale:
Le lancement du programme, je le répète, s'effectue dans la méthode Form1_Load. Le programme essaie de mettre à jour la configuration, puis détermine si elle a été lancée pour la première fois, si c'est le cas, elle est ajoutée au dossier souhaité et au démarrage et s'arrête, et sinon, elle démarre un processus d'arrière-plan qui lance de manière stable l'image de l'écran sur le serveur de messagerie à un intervalle donné. Rien de compliqué ou inhabituel, juste l'interaction de plusieurs classes intégrées.

Et, enfin, une explication du fichier d'autoconfiguration - tous les noms de variables coïncident avec les noms dans le programme, donc, expliquant les champs dans le fichier int, je décris également les variables elles-mêmes.

wayToDir - le nom du sous-dossier dans lequel les captures d'écran sont déposées
finalDir = -name du répertoire dans lequel le programme est transféré
nameOfApp = nom du fichier exécutable
subKeyAdress = chemin d'accès à l'entrée de registre à ajouter à l'exécution automatique
réservé - champ réservé
name - nom de l'entrée de registre
startPause - pause avant d'enregistrer des captures d'écran
exitPause - pause avant la sortie forcée du programme
addressFrom - adresse de l'expéditeur
nameFrom - signature de l'expéditeur
nameTo - adresse postale du destinataire
mailSubject - Objet de l'e-mail
mailBody - texte du message
smtpAdress - adresse SMTP du serveur de messagerie de l'expéditeur
smtpPort - port pour l'envoi de courrier
mailPassword - mot de passe du courrier de l'expéditeur
exp - extension de fichier
timeBetweenScreens - le temps entre deux captures d'écran.
En résumé:
Le processus d'écriture d'une application de suivi des actions sur un ordinateur distant vient d'être décrit. En vous connectant ici en recevant un fichier avec une liste de commandes du serveur et en le divisant, nous obtenons un TeamViewer auto-écrit simplifié. Mais ce n'est pas dans cet article.
Code source