Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - w0nt0n

#11
Ingeniería Inversa / Re: Ayuda en delphi
6 Marzo 2012, 23:09 PM
Cuando lo desempacas el PEid sí que lo detecta como delphi (aunque puede ser que sea el pseudosigner).

Si descomprimes con el upx el exe que obtienes también está empacado pero si te fijas, el nombre de las secciones cambia y aparecen más. De hecho, puedes cargar el programa desempacado en el olly, cambiando los permisos de la sección .rdata (que es donde está la IAT). El problema es que en la rutina de desempacado del segundo packer todo se va al garete.

Saludos!
#12
Ingeniería Inversa / Re: Ayuda en delphi
6 Marzo 2012, 21:34 PM
Aquí cuelgo el original con el que estoy trabajando, que es ligeramente distinto al del primero post porque tuve unos problemillas y cuando me lo volví a bajar había cambiado un poco.

++++++++++++++AVISO MALWARE++++++++++++++


http://www.mediafire.com/file/hpf56zllixtkaid/xxx_porno.rar

++++++++++++++AVISO MALWARE++++++++++++++

Saludos!
#13
Ingeniería Inversa / Re: Ayuda en delphi
5 Marzo 2012, 20:09 PM
Gracias Nox!

He estado algo liado la semana pasada y me he metido otra vez con este malware y he cambiado la manera de atacarlo pero me surgen nuevos problemas:
Lo que he hecho hasta ahora es descomprimirlo con el upx (upx -d xxx_porno.exe) y lo descomprime sin dar ningún error. El exe que descomprime tiene las secciones correctas (o más correctas ya que este desempacado aún está comprimido), pero el problema es que no arranca. Mirando un poco más veo que el problema está en que la sección de los imports no tiene los permisos correctos, así que los cambio y el olly sí que lo carga.

El problema surge aquí: este "descomprimido" tiene una IAT propia que no coincide con la original (no tenía por qué), pero en la rutina de este segundo desempacado necesita las apis que se encuentran en la IAT del programa original. El Import Reconstructor no me arregla esto (a pesar de encontrar todos los imports en el programa original) porque no lo reconoce como un dumpeado del original (entre otras cosas creo que es porque no tiene la sección en la que están los imports de la original).

He intentado dumpear la sección y agregársela al "descomprimido" a las bravas e intentar arreglar el encabezado PE (que creo que es posible porque creo recordar un tutorial de un reto en el que había que splittear un exe para montarlo correctamente o algo similar, aunque puedo estar orinando fuera del recipiente), pero no he conseguido nada (probablemente debido a que no sé gran cosa). También he intentado agregar las apis de la versión original a la IAT del "descomprimido", pero el programa no las carga (esto también puede deberse a mi ignorancia).

La pregunta que me queda es: ¿es posible alguno de los métodos que planteo? He leído por ahí que no es posible agregar apis a los imports pero me entran dudas cuando veo que con el Pe Editor puedo agregar imports. Sigo a ello.

Saludos!
#14
Ingeniería Inversa / Re: Ayuda en delphi
26 Febrero 2012, 18:42 PM
Gracias a los dos!

El programa ya está desempacado (o al menos eso dice el PeID) y veo las strings que hay pero no hay ninguna interesante. He mapeado algunas funciones con el IDA pero las que podrían ser interesantes no las usa cuando introduzco el serial. No sé si sabría parchearlo para dejarlo sin la parte peligrosa. Puedo eliminar el cambio de las claves de registro o el taskkill que tiene, pero hay un hook al teclado que lo cambio manualmente para que el threadid sea el del proceso y no cero. para evitar los inconvenientes del bloqueo del raton y teclado yo uso un programa de xylibox que se llama RansomHelper (http://www.kernelmode.info/forum/viewtopic.php?f=11&t=650) y que te permite recuperar el foco y arrancar algunos procesos.

En cuanto al E2A lo he probado pero no me saca nada.

Por otro lado el RDG me dice (con el M-A) que está presente el pseudosigner aunque si uso el M-B dice que es borland-delphi 6 ó 7 y realmente parece que está en delphi.

He subido el dumpeado a la siguiente dirección:
+++++++++++++++OJO MALWARE+++++++++++++++
http://www.mediafire.com/?tbc94u0sb23bnud
+++++++++++++++OJO MALWARE+++++++++++++++

Descomprimir y cambiar la extensión a .exe. Hay que tener cuidado con las siguientes direcciones :
406CBF -> Mata al explorer
406CE3 -> Hook al teclado (cambiar el thread id por el del proceso)

Crea claves de registro en HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run y HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon.

Mucho cuidado si no lo ejecutais en una máquina virtual (cosa que no haría). Si usáis el ransom helper y el olly con el topmost puesto, no deberíais tener demasiados problemas, pero insisto en que hay que tener mucho cuidado porque bloquea la máquina y hay poco que hacer. En caso de infectarse, es una versión del Trojan.Winlock y supongo que alguna herramienta habrá para desinfectarse, pero siempre será mejor no tener que usarla.

Saludos!
#15
Ingeniería Inversa / Ayuda en delphi
26 Febrero 2012, 13:27 PM
Buenas.

Estoy intentando crackear un ransomware que está hecho en Borland Delphi 5.0 KOL/MCK según el PeID. El programa estaba empacado con un UPX+packer desconocido+UPX. Llegué más o menos sin problemas al OEP y dumpee el programa.

Se trata de un formulario formado por cuatro partes (que yo haya identificado): el número de teléfono, texto, textbox+botón, texto.

Cargando el  dump me daba un error de que el entry point estaba fuera de sitio pero lo arreglé modificando el valor del BaseOfCode en el encabezado. Revisando las secciones me fijo en que tiene 4 UPX0, UPX1, .rsrc y .mackt y no sé por qué las secciones no son las típicas (el código está desempacado seguro).

Leyendo por ahí encontré el DeDe y el IDR pero apenas me reconoce nada con el IDR y nada con el DeDe. No reconoce ni clases, ni eventos, ni nada.También he probado con el resource hacker pero me da error y no abre. El problema de todo esto creo que tiene que ver con el nombre de las secciones (aunque cambié UPX0->.text y UPX1->.data y nada), o si no con que haya dos secciones unidas en una pero no sé cómo hacer para verificar eso o para arreglarlo.

Lo que he intentado hasta el momento con el olly es ponerle un breakpoint condicional en la class procedure del botón (que es la misma que la del resto de elementos del formulario que muestra), para que salte cuando el mensaje sea WM_LBUTTONUP pero desde allí me es imposible llegar a identificar nada.

Otra cosa que he probado es poniéndole un breakpoint a SendMessage para ver si así era como obtenía el texto del textbox (ya que no tengo ninguna api del estilo de GetWindowText, GetDlgItem, GetWindow, etc.) y no he conseguido nada.

También he probado con breakpoints desde el WM_LBUTTONUP en CallWindowProc, pensando en que igual había mensajes propios del programa que llamasen al procedimiento de obtener el serial del textbox y comprobarlo pero nada.

El programa no muestra una nag pero sí que cambia el texto del textbox a otra cosa. Eso lo hace mediante un SendMessage WM_SETTEXT, pero no soy capaz de tracear hacia atrás: llego a una sección que se usa para muchos de los eventos y no logro hacerlo parar en el evento de "comprobación del serial".

Os dejo una lista de las apis que tiene para ver si os parece que hay alguna interesante que se me haya podido escapar.

user32.BeginPaint
user32.CallNextHookEx
user32.CallWindowProcA
user32.ClientToScreen
user32.ClipCursor
kernel32.CloseHandle
user32.CopyImage
gdi32.CreateBrushIndirect
gdi32.CreateCompatibleDC
gdi32.CreateDIBSection
gdi32.CreateFontIndirectA
gdi32.CreateSolidBrush
kernel32.CreateThread
user32.CreateWindowExA
user32.DefWindowProcA
gdi32.DeleteDC
gdi32.DeleteObject
user32.DestroyCursor
user32.DestroyWindow
user32.DispatchMessageA
user32.DrawTextA
user32.EnableMenuItem
user32.EnableWindow
user32.EndPaint
kernel32.ExitProcess
user32.FillRect
user32.FindWindowA
kernel32.FreeLibrary
kernel32.FreeLibrary
     user32.GetCapture
user32.GetClassInfoA
user32.GetClassLongA
user32.GetClientRect
kernel32.GetCommandLineA
kernel32.GetCurrentThreadId
user32.GetCursorPos
user32.GetDC
kernel32.GetExitCodeThread
kernel32.GetFileAttributesA
user32.GetFocus
user32.GetKeyState
kernel32.GetModuleFileNameA
kernel32.GetModuleHandleA
kernel32.GetProcessHeap
gdi32.GetStockObject
user32.GetSysColor
user32.GetSystemMenu
user32.GetSystemMetrics
kernel32.GetSystemTime
gdi32.GetTextExtentPoint32A
kernel32.GetVersion
user32.GetWindowLongA
user32.GetWindowRect
kernel32.GlobalAlloc
kernel32.GlobalFree
kernel32.HeapAlloc
kernel32.HeapFree
kernel32.HeapReAlloc
     
user32.InvalidateRect
user32.IsWindow
user32.IsWindowEnabled
user32.KillTimer
user32.LoadCursorA
user32.LoadIconA
kernel32.LocalAlloc
gdi32.MoveToEx
user32.OffsetRect
user32.PeekMessageA
user32.PostMessageA
user32.PostQuitMessage
kernel32.RaiseException
advapi32.RegCloseKey
user32.RegisterClassA
user32.RegisterHotKey
advapi32.RegOpenKeyExA
advapi32.RegSetValueExA
user32.ReleaseDC
kernel32.ResumeThread
kernel32.RtlUnwind
user32.ScreenToClient
gdi32.SelectObject
user32.SendMessageA
user32.SendMessageA
gdi32.SetBkColor
gdi32.SetBkMode
gdi32.SetBrushOrgEx
user32.SetCursor
     
user32.SetFocus
user32.SetForegroundWindow
user32.SetParent
gdi32.SetPixel
gdi32.SetROP2
gdi32.SetStretchBltMode
gdi32.SetTextColor
kernel32.SetThreadPriority
user32.SetTimer
user32.SetWindowLongA
user32.SetWindowPos
user32.SetWindowsHookExA
user32.ShowWindow
gdi32.StretchBlt
user32.SystemParametersInfoA
kernel32.TerminateThread
kernel32.TlsGetValue
kernel32.TlsSetValue
user32.TranslateMessage
kernel32.UnhandledExceptionFilter
kernel32.WaitForSingleObject
user32.WaitMessage
kernel32.WinExec

Saludos!
#16
Buenas.

Le he echado un ojo al programa y por lo que parece está programado en Visual C++ (peid). La parte caliente del programa es muy sencilla de encontrar, pero deberías pegarte un poco con él. Traceando "a mano" puedes llegar fácilmente y si no, te dejo una pista, que no es muy reveladora y que te lleva por un camino un poco más farragoso (a parte de quitarle toda la gracia).

Pista: Strings

Saludos!
#17
Ingeniería Inversa / Re: ayuda con este archivo
14 Febrero 2012, 20:10 PM
Hola,

Deberías leer un poco sobre anti-debugging (el tan mentado tutorial de ricardo narvaja, al que alá colme de bienes y bendiciones), porque lo que dices no tiene demasiado sentido. Por otro lado, es practicamente imposible que consigas que alguien haga por ti un trabajo que te interesa a ti.

Saludos!
#18
Buenas,

La versión del importrec es la 1.4.2 creo. La tenía por ahí de hace unos años que me dio un poco por el cracking. No sé (ni me he molestado en buscar) si hay alguna nueva, pero hasta este problemilla iba todo de cine. De hecho, acabo de terminar de unpackear y hacer correr sin problemas otro malware (internet security) con la misma versión. No sé. Era algo muy raro. Quizás parte del problema era que estaba corriendo todo en VM y no me fijé en los métodos de protección antiVM (ya que sin debugger parecía correr sin problema) e igual me cogieron por ahí. Pero bueno, que tampoco te quite el sueño (aunque te agradezco mucho el empeño).

Saludos!
#19
Gracias a todos por las respuestas.

Al final lo que hice fue arreglar la IAT "a mano" y funcionó sin problemas. Supongo que había algún problema con el ImpRec al hacerlo todo automático.

Saludos!
#20
Gracias por tu respuesta.

Supongo que tienes razón pero el problema está en que la dirección que me devuelve dicha función es distinta en función (valga la rebuznancia) de si se carga desde kernel32 o de ntdll. Esa dirección la usa poco después para un salto y lo que sucede es que se va a una parte de la memoria que no tiene más que morralla, con lo que tendría que parchear el salto para que vaya adonde toca pero dado que no es un salto fijo (coge el valor de eax), si lo cambio lo más probable es que pete por otro lado. Sigo buscando

Saludos!