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!