¿Cómo puedo guardar modificaciones en ejecutable utilizando Olldbg?

Iniciado por JAROD_28, 24 Marzo 2012, 11:44 AM

0 Miembros y 1 Visitante están viendo este tema.

JAROD_28

Hola a todos, espero me puedan ayudar, quiero crackear un programa que corre en modo consola MS-DOS. Con el editor de recursos (Resource Hacker) me salen los textos del mensaje que dicen que me quedan x usos y después pasa a ejecutar el programa, utilizo el RDG Packer Detector v0.6.8 2012, dice hecho con Visual C++ y no tiene protección, pero con Ollydbg no me aparecen las referenced strings. Este programa tiene protección por cantidad de usos y límite de tiempo por sesión.

Para el limite de usos lee un archivo en el directorio de windows.

Bueno yo hago lo siguiente: pongo un breakpoint en 1000403A, ejecuto con F9.

1000403A   FF55 0C   CALL DWORD PTR SS: (arg.2)
1000403D   8B0D   94F4121  MOV EXC,DWORD PTR DS: (1012f494)

Entro al CALL con F7, aparezco en 009A0000 y ahí están las strings, puedo hacer modificaciones al código y correrlo, pero no sale la opción para guardar los cambios en el ejecutable.

009A0000   53   PUSH EBX
009A0001   56   PUSH ESI
009A0002   57   PUSH EDI
     .
     .
009A0017  890424   MOV DWORD PTR SS:(sp),eax
     .
     .
009A0042   B8 8DA09D00   MOV EAX, 9DA08D   ASCII "ENTER YOUR NAME"

Agradezco que me ayuden en cómo puedo hacer en este caso o que otro programa necesito.

La dirección de origen del programa es: 100014C7
Y la dirección de entrada a los mensajes es: 009A0000

Saludos y gracias por las respuestas.

karmany

Desde OllyDBG versión 2 puedes guardar los cambios del siguiente modo:
pulsar el botón derecho del ratón en la ventana de desensamblado -> edit -> copy to executable. En la siguiente ventana que aparece, que además verás una ventana emergente de aviso pulsas botón derecho del ratón -> save file.



Y ahí, donde estoy parado en la imagen pulsas Sí.

JAROD_28

#2
Gracias karmany, estoy utilizando OllyDbg2.0, cierto la opción de grabar los cambios aparece así, pero cuando entro al CALL esta opción desaparece, bueno, ahí busco donde hacer los cambios para eliminar la primera protección, ejecuto con F9, y efectivamente desaparece ese molesto mensaje que había llegado al limite de usos y que después me cerraba el programa.

Probe el OllyDbg en otro PC y note algo, cada vez que entraba al CALL, aparecía en otra dirección diferente al que me mostraba en mi PC (009A0000). Cerraba OllyDbg, abría, cargaba y ejecutaba y al entrar en CALL, mostraba otra dirección 002B0000 por ejemplo. Obviamente esta dirección está en memoria y no en el ejecutable por eso no aparece la opción de guardar. ¿Tiene algún otro tipo de protección? O ¿estoy olvidando algún paso?

(PD: No he podido subir imagenes, no de deja).

Saludos.

Иōҳ

Pueda que sea creado en memoria, que la dirección a la que accedes con ese CALL, no está en disco...

Lo que se puede hacer en esos casos es un injerto...

Saludos,
Nox.
Eres adicto a la Ing. Inversa? -> www.noxsoft.net

JAROD_28

 ;D-------SOLUCIONADO------- ;-)

En vista que no podía hacer las modificaciones con OllyDbg, decidí hacerlo con el WinExe de la  siguiente manera:

Corrí el programa con F9, entre al CALL con F7, una vez adentro aparecieron las Strings que no se visualizaban, busqué las Strings que me interesaban y la entrada a la NAG venía de dos CALL, con WinHex busque una cadena Hex de 36 caracteres en el ejecutable para poder detectarla, cambié la entrada de la NAG:

53 56 57 55 por: C2 00 00 90

En assembler sería:

PUSH EBX
PUSH ESI
PUSH EDI
PUSH EBP

Por:

RETN
NOP

Con esto evite la ejecución de esta, algo parecido hice con la NAG de finalización del tiempo de ejecución. A karmany y Иōҳ gracias por su atención.

Saludos, Jarod_28.