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!
Necesariamente necesitas desempaquetarlo, quizás podrías hacer un inline patch, podrías subir el programa para ver que se puede hacer.
Saludos
Puedes ver formularios y eventos con esta magnifica herramienta, E2A ..
http://www.mediafire.com/file/u7s05ywdf05w3bt/E2A2_2020.rar
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 (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!
Si es un delphi y tienes un dump hecho en el OEP, usa IDR: http://kpnc.org/idr32/en/
Aun con la IAT rota, IDR hace "magia""... :)
Saludos!
Si esperas toda esta semana y un par de días más te puedo ayudar, ahora estoy FULL...
Que esto del malware me interesa ya voy un mes viendo malwares cutres, haber si este es mas ponito je !
Nox.
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!
Puedes dejar el link del malware sin tocar? así tenemos los dos, para comparar dumpeados :D
Nox.
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!
No lo reconoce porque no es delphi, y está medio extraño esto... nunca lo había visto... pero bue.. de packers no soy experto sigo mirando.
Y luego de desempacar el UPX te encuentras con otro packer al menos eso me percibo y especulo hasta ahora...
Nox.
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!
Me has pasado el exe correcto?, hablemos por MP
Zorry el themida me tiene paranoico je!.
EDITO:
Igual estamos hablando por MP termino algo que estoy haciendo y lo miro de lleno esto.
Saludos,
Nox.
Sigo a ello.
Lo que he intentado ahora es modificar la IAT para que el exe desempacado que obtengo del upx me funcione. Para eso lo que he hecho es:
1. upx -d xxx_porno.exe <- Descomprimo el exe con el upx.
2. Este exe no funciona. Revisando con el LordPE veo que tiene una tabla de imports pero que no está referenciada en el encabezado, así que cambio el encabezado del programa y, después de cambiar los permisos de la sección, carga en el olly. Se trata de otro packer pero el programa no funciona bien: da un error y se detiene.
3. Traceando el original y comparándolo con el desempacado veo que el problema está en las direcciones de la IAT a las que accede ya que necesita apis que están cargadas en la IAT original y no en la del desempacado. Llegados a este punto la única solución que se me ocurrió fue dumpear la sección entera del original en la que estaba la IAT y modificarla para añadirle los nombres de las apis que necesita. Esto fue un trabajo un poco latoso ya que tenía que crear una nueva IAT y no sé si hay programas que te hagan eso, pero yo no los encontré (si sabéis, decidme) y tuve que hacerlo a mano.
4. Una vez modificada la sección del original para que encaje en el desempacado, la integro en éste con el LordPE y corrijo el RawOffset y el VirtualOffset de la sección nueva, modifico la dirección de los imports y el programa carga.
5. Con el programa cargado en el olly busco los calls a la IAT del desempacado (ya que ahora la IAT es la modificada que he añadido) y las redirijo a la nueva. Guardo los cambios en el exe y, por fin, el progama corre.
6. Una vez se desempaca, vuelve a estar empacado (de nuevo con upx) pero esta vez sigo hasta el OEP usando el método del pushad/popad. Dumpeo, arreglo la IAT y listo.
Todo esto lo hice con la esperanza de que el desempacado con el olly que había hecho al principio del post, no pudiera ser leído correctamente por el DeDe o el IDR debido a que las secciones no estaban estructuradas correctamente. Resulta que me equivocaba: esta nueva versión, aunque tiene todas las secciones correctas, tampoco puede ser leída con estos debuggers.
Lo que me queda ahora es intentar crackearlo de nuevo pero me daba ya muchos problemas la otra versión así que supongo que esta no será diferente. He estado leyendo tutoriales de crackmes hechos en delphi pero no he encontrado ningún método que me sirva. El programa está hecho usando KOL/MCK. Si sabéis de algún tute o algo en el que se estudie los programas compilados así, os agradecería que me lo dijérais porque yo no he encontrado nada. De todas maneras, sigo a ello.
Saludos!
Me está impreionando como estás llevando esto, yo por mi parte no he tenido tiempo aún para mirarlo, pero veo que tienen sólidos conocimientos del formato PE (es lo que ami me falta u.u), igual cuando termine lo que estoy haciendo, mi ayuda sigue en pie.
Puedes usar el ImportRec, ChimpRec, y otro más que no recuerdo je!, son para arreglar la iat, y puedes agregar entradas una por una con un par de clicks...
Saludos,
Nox.
Gracias de nuevo Nox pero el problema que tengo con tanto el Import Reconstructor como con el ChimpRec es que sólo arreglan dumpeados a partir de originales en memoria y yo lo que necesitaba era crear una IAT desde cero, ya que el programa desempacado con el upx no me lo reconocen como un dumpeado. Intenté añadir las apis con el PE Editor (del LordPE, de las PE Tools, el que se llama así y el IID King) pero no conseguí hacer que funcionara: todo lo que hacen es agregar una sección que hace referencia a la tabla original con lo que al cargarlo sólo carga las apis que no fueron añadidas. Supongo que el problema de esto es que no sé muy bien cómo usar estos programas, así que casi me busqué yo el hacerlo a mano :D.
En cuanto a conocimientos del PE te dejo un par de artículos de microsoft explican, un poco genéricamente, el formato PE (están en inglés):
http://msdn.microsoft.com/en-us/magazine/cc301805.aspx <- An In-Depth Look into the Win32 Portable Executable File Format Parte 1
http://msdn.microsoft.com/en-us/magazine/cc301808.aspx <- An In-Depth Look into the Win32 Portable Executable File Format Parte 2
En cuanto a tutes en delphi, os agradecería los que he encontrado son:
http://ricardonarvaja.info/WEB/buscador.php <- Buscando "delphi"
https://foro.elhacker.net/search.html <- Buscando "delphi"
http://forum.tuts4you.com/ <- Buscando "delphi"
http://www.google.com <- Buscando "delphi crackme"
Supongo que en todas estas páginas hay más crackmes hechos en delphi que simplemente no incluyen en su nombre "delphi" (sobre todo en tuts4you y en la de ricardo). Si sabéis de algún tute de algún crackme hecho en delphi (sobre todo en la página de ricardo) y que no tenga la palabra delphi en su título, os agradecería que me lo dijerais.
Saludos!
Una manera de hacerlo es aumentar el size en los datos de la IAT, al final te saldrán entradas inválidas, es ahí dónde puedes agregar las apis que desees :)
Hasle doble click a la entrada inválida y escoge la api que deseas, si están desordenadas, es decir apis convinadas de diferentes librearías deja un dword de 0s para que no haya problema.
Saludos,
Nox.
Sigo probando cosas.
Ahora me ha dado por pensar que uno de los problemas por los que el DeDe y el IDR no funcionan correctamente es porque las resources del programa desempacado están estropeada.
Supongo que el programa tiene que leer las resources de alguna manera (aunque no tengo claro si los forms, textbox y demás tienen que formar parte del directorio de resources). Acabo de encontrar un post acerca de esto heep://forum.exetools.com/showthread.php?t=7748 , así que por el momento este post es un poco inútil.
En cualquier caso, sigo a ello.
desconozco que tipo de programa es o fue o sera pero te cuento algunos tips que te ayudaran a hacer un mejor dumpeado
por una parte la cita de exetools tiene 2 adjuntos, te los subo a mediafire aca por si te son necesarios
http://www.mediafire.com/?66ogen4cd9dnc6d
2) en cuanto a la iat y temas asi se ha hablado en ricardonarvaja
algunos ejemplos destaca creacion de la iat a mano, hook de apis, uso de loaders y en temas mas propios como re-agregar una nueva iat
digamos que tienes toda la iat ok, y tienes listos los fordwarding..colocas al dump y ta mal..que harias?
te sugiero leas las notas apuntes sobre morphine, acprotect,nspack y otros packers que suelen crear capas si bien no dificiles, pero con un mini truco..pero tb hay otras que tienen trucos en telock, pespin y otras como msa complejas como vmprotect o Private exe protector, donde nisiquiera tendras los recursos en el exe sino todo emulado
el tema es que cuando ejecutas el programa llegas al oep, vas al LORD PE..y colocas alinear algo mas..desde el mismo menu y luego puedes dumpear de 2 formas..una intelligent mode ,y la otra, debes tener presente de agregar los recursos y alinearlo, y luego la iat, eso es todo para un packer super empacado con un desconocido
pero insisto, herramientas como SIRPE, CFF Explorer, pexplorer, te seran utiles en la primera parte de explorar el exe
te sugiero sigas leyendo pero no de webs, sino de crackslatinos
http://www.ricardonarvaja.info/WEB/buscador.php
busca primero iat, mano,estructura,injerto,hook, PE,
encontraras temas como
http://www.ricardonarvaja.info/WEB/CURSO%20NUEVO/TEORIAS%20NUMERADAS/401-500/494-%5BRVLCN%5D_IID%20%26%20IAT_by_%2BNCR.rar
y luego le das un recorrido completo desde
1) curso de ricardo
2) las mas de mil teorias numeradas
en final si lo lees posiblemente si lo guardas seran mas de 5gb de informacion, pero en si en 2 meses o 3 meses resolveras sin miedo o duda..
nota que nox, y otros mas ya han resuelto temas que a la fecha antes eran de dificil solucion
saludos Apuromafo