"Ret Exe corruption" es una tecnica con la que podremos romper un ejecutable sin que salte el tipico cartel de error.
Esta tecnica consiste en averiguar el EntryPoint de ejecutable y poner un 0xC3 ( un ret en ensamblador) en donde apunte el entry point, de esta manera el programa se cerrara sin mostrar ningun error. En realidad no rompemos el ejecutable sino que modificamos su flujo.

Para entender mejor esto convendria leer sobre el formato PE:
[Enlace externo eliminado para invitados] ... 847.0.html

Ejemplo de código:

Código: Seleccionar todo

;///////////////////////////////////////////////////////////////////////////////
;////  Ret Exe Corruption: corrompe los exe poniendo un 0xC3 (ret) en el    ////
;////  entry point. Este código no funciona con algunos ejecutables para    ////
;////  ello habría que hacer algunos modificaciones.                        ////
;////  Programado por Drinky94 a 13 - Septiembre - 2011                     ////
;///////////////////////////////////////////////////////////////////////////////

include 'win32ax.inc'

.data
        manija dd ?
        larchivo dd ?
        espacio dd ?
        bleidos dd ?

        PE dd ? ; puntero a NT

        EP dd ? ; EntryPoint
        wb dd ?
.code
start:
        invoke CreateFileA,'g:\bowser.exe', GENERIC_READ, FILE_SHARE_READ, 0,OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0
        mov [manija],eax

        invoke GetFileSize,[manija],0
        mov [larchivo],eax

        invoke GlobalAlloc,GPTR,[larchivo]
        mov [espacio],eax

        invoke ReadFile,[manija],[espacio],[larchivo],addr bleidos,0
        invoke CloseHandle,[manija]
        leave

        mov eax,[espacio]


        cmp word[eax],'MZ'
        jne salir

        mov ecx,eax

        add eax,dword[eax+0x3C] ; EAX = PE
        mov [PE],eax

        cmp word[eax],'PE'
        jne salir

        add eax,0x28

        mov ebx,dword[eax]
        mov [EP],ebx ;EP = EntryPoint

        mov ebx,ecx ; EAX = puntero inicio

        add ecx,[EP]
        mov word[ecx],0xC3

        ;// Aquí tendríamos que eliminar el viejo archivo y generar nuestro Exe modificado con el mismo nombre.

        invoke CreateFile,"g:\NuevoRET.exe",GENERIC_WRITE,0,NULL,CREATE_NEW,FILE_ATTRIBUTE_NORMAL,0
        push eax
        invoke WriteFile,eax,ebx,[larchivo],wb,NULL
        pop eax
        invoke CloseHandle,eax

        invoke MessageBoxA,0,"FIN",0,0

        salir:
        leave
        ret
.end start
              
NOTA: con algunos ejecutables no va mi código, habria que hacer alguna ligera modificación.

saludos.
Imagen
K-0Z escribió:Simplemente se haria como un exit directo del ejecutable no?, buen codigo, salu2!
Si, mas o menos

saludos.
Imagen
Puedes sacar el entrypoint usando la estructura CONTEXT que es para debuggear de hecho x), muy bueno el código.
//mHmm..
Responder

Volver a “Otros lenguajes”