Archive

Archive for February, 2009

…desempacar, desempacar … ¿Whyyyyyy!!!!?

February 23rd, 2009 No comments

Donde quedan los tiempos de antaño en los que la gente se hacía sus loader  “de p**a ma*re”, o como dirian los argentinos… “de la concha de tu madre la pelotuda”. El caso es que por casualidad un amigo me comentó que le echara un vistazo a un programa.

1) Ouff Aspack!

rdg

2) Problema

No tenemos tiempo de estudiar packers, o no sabemos, o no queremos. Pues utilizamos alguna tool de internet.

stripper

crash!, el programa no funciona y todo el mundo desesperado en los foros. ¿Abandonamos? – No !

3) Solucionando el problema.

En ollydbg tenemos una opción magnífica llamada Atach! Así que, ejecutamos el programa y paramos aquí.

license

Atacheamos y buscamos la función,

olly

Mediante los RET llegamos a este punto.

005A2430  |.  E8 6FFBFFFF   |CALL gdbnt.005A1FA4
005A2435  |.  84C0          |TEST AL,AL
005A2437  |.  74 5E         |JE SHORT gdbnt.005A2497
005A2439  |.  A1 9CBF6700   |MOV EAX,DWORD PTR DS:[67BF9C]
005A243E  |.  C640 10 01    |MOV BYTE PTR DS:[EAX+10],1
005A2442  |.  A1 9CBF6700   |MOV EAX,DWORD PTR DS:[67BF9C]
005A2447  |.  E8 5CF9FFFF   |CALL gdbnt.005A1DA8
005A244C  |.  84C0          |TEST AL,AL
005A244E  |.  74 25         |JE SHORT gdbnt.005A2475
005A2450  |.  6A 00         |PUSH 0
005A2452  |.  8D55 D4       |LEA EDX,DWORD PTR SS:[EBP-2C]
005A2455  |.  A1 C4716700   |MOV EAX,DWORD PTR DS:[6771C4]
005A245A  |.  E8 F949E6FF   |CALL gdbnt.00406E58
005A245F  |.  8B45 D4       |MOV EAX,DWORD PTR SS:[EBP-2C]           ; |
005A2462  |.  66:8B0D 64255>|MOV CX,WORD PTR DS:[5A2564]             ; |
005A2469  |.  B2 02         |MOV DL,2                                ; |
005A246B  |.  E8 3800EEFF   |CALL gdbnt.004824A8                     ; \gdbnt.004824A8
005A2470  |.  E9 91000000   |JMP gdbnt.005A2506
005A2475  |>  6A 00         |PUSH 0
005A2477  |.  8D55 D0       |LEA EDX,DWORD PTR SS:[EBP-30]
005A247A  |.  B8 341A5A00   |MOV EAX,gdbnt.005A1A34
005A247F  |.  E8 D449E6FF   |CALL gdbnt.00406E58
005A2484  |.  8B45 D0       |MOV EAX,DWORD PTR SS:[EBP-30]           ; |
005A2487  |.  66:8B0D 68255>|MOV CX,WORD PTR DS:[5A2568]             ; |
005A248E  |.  B2 01         |MOV DL,1                                ; |
005A2490  |.  E8 1300EEFF   |CALL gdbnt.004824A8                     ; \gdbnt.004824A8
005A2495  |.  EB 6F         |JMP SHORT gdbnt.005A2506
005A2497  |>  6A 67         |PUSH 67
005A2499  |.  8D55 C8       |LEA EDX,DWORD PTR SS:[EBP-38]
005A249C  |.  A1 9CBF6700   |MOV EAX,DWORD PTR DS:[67BF9C]
005A24A1  |.  E8 12F7FFFF   |CALL gdbnt.005A1BB8
005A24A6  |.  8B45 C8       |MOV EAX,DWORD PTR SS:[EBP-38]
005A24A9  |.  50            |PUSH EAX
005A24AA  |.  8D55 C4       |LEA EDX,DWORD PTR SS:[EBP-3C]
005A24AD  |.  B8 3C1A5A00   |MOV EAX,gdbnt.005A1A3C
005A24B2  |.  E8 A149E6FF   |CALL gdbnt.00406E58
005A24B7  |.  8B45 C4       |MOV EAX,DWORD PTR SS:[EBP-3C]
005A24BA  |.  8D4D CC       |LEA ECX,DWORD PTR SS:[EBP-34]
005A24BD  |.  5A            |POP EDX
005A24BE  |.  E8 8DA3F0FF   |CALL gdbnt.004AC850
005A24C3  |.  8B45 CC       |MOV EAX,DWORD PTR SS:[EBP-34]           ; |
005A24C6  |.  66:8B0D 6C255>|MOV CX,WORD PTR DS:[5A256C]             ; |
005A24CD  |.  B2 01         |MOV DL,1                                ; |
005A24CF  |.  E8 D4FFEDFF   |CALL gdbnt.004824A8                     ; \gdbnt.004824A8

Esto es la llamada, “zona caliente”. Bueno, a estas alturas el programa esta como una mujer desnuda, esperando que la desvirgemos; llegados a este punto poco hay que decir.

005A2430  |.  E8 6FFBFFFF   |CALL gdbnt.005A1FA4

005A2447  |.  E8 5CF9FFFF   |CALL gdbnt.005A1DA8

Estas son las llamadas a las dos funciones principales de chequeo. Con hacer un MOV EAX,01 en la entrada de la función, lo tenemos listo.

licensed

Bueno, ahora solo queda que algún valiente trace el código y escriba un keygen, o que alguien cree un loader para el programa.

4) Despedida

Este escrito pretende demostrar que no hay que ofuscarse al encontrar un problema, hay que buscar soluciones alternativas por nosotros mismos. Un abrazo a todos y no olvideis buscar el ZEN CRACKING!

convert this post to pdf.
Categories: Uncategorized Tags:

Sólo quiero bajar algo por ftp! (con FlashFXP xD)

February 5th, 2009 No comments

Hola a todos, el otro día buscando un FlashFXP para bajar algo , encontré la última versión….la bajé….al ejecutarla, me pidió número de serie… utilicé el keygen que lo acompañaba.

Cuando puse el serial el programa siguió su camino, me apareció una ventanita que decía c:\windows\system32 ….

Me pareció muy raro y sospeché de un virus… obviamente seguí utilizando el programa, y NOD me avisó que “algo” se quería conectar… algo con nombre como qsyrjrwes.exe en la carpeta Datos de Programa de mi usuario en Windows XP.

Obviamente, escribí en arroba sobre ese EXE, para ver de que se trataba, era un simple downloader, definido como downloader.Win32… Ya postearé el artículo explicando de qué se trata… ;)

Bueno obviamente, el EXE de flashfxp estaba “envuelto” por un dropper, éste sacaba el downloader, y después hacía ejecutar al flashfxp normalmente…

Empezando a mirar el EXE, encontramos algunas strings que se cargan, y mirándolas por arriba, pienso que son strings encriptadas que desencripta en tiempo de ejecución…

Strings Encriptadas

Seguramente para evitar que los AV’s detecten el proceso…

Cuando debuggeemos por las strings “.dll” y “.exe”, más precisamente en las direcciones 408D03 y 408D15 veremos estas cosas en la pila:

0012FFAC   01141C30  0  ASCII “C:\WINDOWS\system32\niksr.dll”

y luego,

 

0012FFA8   01141CA4  ¤  ASCII “C:\DOCUME~1\SPARKR~1\CONFIG~1\Temp\setup.exe”

Luego de eso, en estas direcciones podremos ver que el ejecutable creado en la carpeta temporal de nuestro windows, posee un icono de flashfxp… es raro.. ;)

 

00408D39  |. A1 C8A94000    MOV EAX,DWORD PTR DS:[40A9C8]

00408D3E  |. E8 BDFDFFFF    CALL setup-pr.00408B00

En estas dos líneas se ejecuta el EXE liberado en la carpeta temporal de Windows. Igualmente no es el EXE final.

Veremos que entrando al CALL mencionado dos líneas más arriba, y mirando un poco más, se crea un objeto Mutex.

Mutex

Veamos para que sirve un mutex (una definición de la red…):

“Un mutex funciona exactamente del mismo modo que las secciones críticas. La única diferencia en las implementaciones Win32 es que la sección crítica esta limitada para ser usada con solamente un proceso. Si tienes un programa que usa varios hilos, entonces la sección crítica es liviana y adecuada para tus necesidades. Sin embargo, cuando escribes una DLL, es muy posible que diferentes procesos usen la DLL en el mismo momento. En este caso, debes usar mutexes, en lugar de secciones críticas.”

Veremos en la imagen, que genera un código único, que se utiliza como nombre del mutex, para crearlo, con la API CreateMutexA.

Seguido de esto, parece que nuestro troyano necesita descomprimir una dll denominada bcdsa.dll, veamos:

EAX apunta al string C:\WINDOWS\system32\bcdsa.dll.

El ejecutable busca el archivo bcdsa.dll y si no existe, lo crea.

fxp1

Luego de crear la DLL, descomprime el segundo EXE como hemos visto que el path estaba en memoria y crea el Thread finalmente con la DLL deseada. Capturemos la DLL, para futuro análisis. ;)

Si vamos a buscar la DLL y vemos propiedades encontraremos una descripción extraña:

fxp2bcdsa

fxp3bcdsa

O es una librería que necesitará el flashfxp final o es algo más…

fxp4

Luego de que el Thread es creado, nos aparecerá la ventanita con el mensaje: “c:\windows\system32″, esto es lo que me hizo sospechar de la actividad de este ejecutable. Es una falla de programación importante, ya que se da a conocer muy sencillamente, parece que el programador tenía pocos recursos para poder darse cuenta cuando la DLL estaba cargada en memoria… :P

Ahora veremos el segundo ejecutable.

Una vez que nuestro amigo está descomprimido veremos que al cargarlo está hecho en C, por eso mismo carga nuestra DLL, que se trata nada más ni nada menos de las MFC, librerías runtime necesarias. :)

Este EXE, descomprimirá el FlashFXP final, pero además agregará la descompresión de un downloader… ;) para fines non santos…

fxp5

El ejecutable de FlashFXP será descomprimido en c:\windows\ bajo el nombre de setup.exe

fxp6

En esta imagen, podemos ver como ejecuta a FlashFXP original y a su vez, descomprime y crea el downloader, cuyo nombre es aleatorio.

Finalmente, tratará de ejecutar el Downloader, como veremos acá:

fxp7

Por último el proceso termina, llamando a ExitProcess. :)

Entonces si queremos nuestro EXE final de FlashFXP, directamente lo buscamos en la carpeta Windows de nuestro sistema.

Nos damos cuenta que el EXE es el original, porque al hacer botón derecho y propiedades, veremos los datos originales de la aplicación. Lo cuál ante un usuario atento, se dará cuenta que los otros ejecutables no son los originales. :)

Es importantísimo poder tener firmado los ejecutables de nuestras aplicaciones, además de poder tener la información guardada como propiedades del ejecutable, de manera que un usuario puede verificar la autenticidad de varias maneras.

Siempre hay que estar atento a actividades extrañas, como por ejemplo la ventana que sale a modo de información avisando que la DLL ya fue creada, para poder continuar la descompresión…. como lo vimos anteriormente.

Eso es todo, espero que les haya servido y gustado. :)

Nos vemos la próxima.

convert this post to pdf.