Menú Principal

Este sitio usa cookies y tecnologías similares.

Si no cambia la configuración de su navegador, usted acepta su uso. Saber más

Acepto

Zona descarga

Guardar cambios en OllyDBG v1.10

Tamaño de letra:

Crear nuevo .exe salvando los cambios

Seguramente, si no tienes mucha experiencia con OllyDBG 1.10 y acabas de modificar bytes en un ejecutable, es posible que luego no sepas cómo realizar o guardar esos cambios. Como OllyDBG 1.10 es todavía una versión muy utilizada y con cientos de tutoriales, hoy voy a mostrar cómo efectuar y guardar los cambios realizados en un programa.

Voy a usar la versión 1.10 de OllyDBG sin ningún plugin, tal cual está en descarga. Descarga esta versión desde su web oficial, desde aquí: OllyDBG 1.10.

Abrir un programa cualquiera

Voy a abrir un programa cualquiera pero para seguir este tutorial voy a abrir OllyDBG desde el mismo OllyDBG, así que:

  • Ejecuto OllyDBG 1.10
  • Pulso F3 o voy al menú File ⇒ Open
  • Selecciono el mismo OllyDBG.exe

Veo el siguiente código -que debes ver tú también-:

 
00401000 > $ /EB 10         jmp short 00401012                       ;  OLLYDBG.00401012
00401002     |66            db 66                                    ;  CHAR 'f'
00401003     |62            db 62                                    ;  CHAR 'b'
00401004     |3A            db 3A                                    ;  CHAR ':'
00401005     |43            db 43                                    ;  CHAR 'C'
00401006     |2B            db 2B                                    ;  CHAR '+'
00401007     |2B            db 2B                                    ;  CHAR '+'
00401008     |48            db 48                                    ;  CHAR 'H'
00401009     |4F            db 4F                                    ;  CHAR 'O'
0040100A     |4F            db 4F                                    ;  CHAR 'O'
0040100B     |4B            db 4B                                    ;  CHAR 'K'
0040100C     |90            nop
0040100D     |E9            db E9
0040100E     |28014B00      dd offset OLLYDBG.___CPPdebugHoo
00401012   > \A1 1B014B00   mov eax,dword ptr ds:[4B011B]
00401017   .  C1E0 02       shl eax,2
0040101A   .  A3 1F014B00   mov dword ptr ds:[4B011F],eax
0040101F   .  52            push edx
00401020   .  6A 00         push 0                                   ; /pModule = NULL
00401022   .  E8 4BE00A00   call 004AF072                            ; \GetModuleHandleA
...
 

Realizar un cambio

Voy a hacer un cambio cualquiera, por ejemplo:

00401020 6A 00 push 0

push 0 corresponde a los bytes 6A 00.

En OllyDBG me pongo sobre push 0 y hago doble clic. Se abre una ventana y modifico push 0 por lo siguiente:

gf

¿Por qué pongo push cx? -Porque he visto que cx en ese momento tiene valor cero y así el programa se ejecutará sin errores pero tú puedes poner lo que quieras. En estos momentos compruebo que el resultado es el siguiente:

00401020 66 51 push cx

Como puedes observar se han modificado 2 bytes: 6A por 66 y 00 por 51. Ya están hechos los cambios, ahora toca guardarlos físicamente en un nuevo archivo -o en el mismo-.

Guardar los cambios

Puedes guardar los cambios, principalmente, de dos formas:

  • Guardar solamente los cambios seleccionados.
  • Guardar todos los cambios que hayas hecho. Te permitirá ver los cambios uno a uno.

Guardar solamente los cambios realizados

De esta forma guardaremos en el exe solamente los cambios que seleccionemos. Selecciona solo la dirección 0041020, donde tienes push cx.

Importante: Debes seleccionar lo que quieras que sea modificado. En este caso son solo 2 bytes que corresponden a push cx.

Ahora pulsa el botón derecho del ratón y elige: Copy to executableSelection. Se abrirá una nueva ventana mostrando el siguiente código:

 
00000620    66:51           push cx
00000622    E8 4BE00A00     call 000AE672
00000627    8BD0            mov edx,eax
00000629    E8 DA240A00     call 000A2B08
...
 

¿Qué ha pasado? ¿Por qué 00401020 se ha cambiado a 00000620? Es muy sencillo de entender: porque la dirección virtual (Virtual Address) ha sido convertida a Offset en el archivo físico. Lógicamente lo que estamos generando es un nuevo archivo exe ¿se entiende?

Volvemos a pulsar con el botón derecho del ratón (en cualquier parte de esa ventana) y elegimos en el menú emergente la opción Save file (guardar archivo):

kj

Nos aparecerá una típica ventana de Windows para que guardemos el archivo donde y con el nombre que queramos. Yo lo guardo en el mismo directorio de OllyDBG 1.10 y lo voy a nombrar como ollydbg002.exe. Pulso Guardar.

Verificando los nuevos cambios

Ahora simplemente hay que revisar si hemos realizado todo correctamente, así que:

  • Ejecuto OllyDBG 1.10 original
  • Abro en este OllyDBG el nuevo que acabo de crear llamado ollydbg002.exe

Descubro el siguiente código:

 
00401000 > $ /EB 10         jmp short 00401012                       ;  ppp.00401012
00401002     |66            db 66                                    ;  CHAR 'f'
00401003     |62            db 62                                    ;  CHAR 'b'
00401004     |3A            db 3A                                    ;  CHAR ':'
00401005     |43            db 43                                    ;  CHAR 'C'
00401006     |2B            db 2B                                    ;  CHAR '+'
00401007     |2B            db 2B                                    ;  CHAR '+'
00401008     |48            db 48                                    ;  CHAR 'H'
00401009     |4F            db 4F                                    ;  CHAR 'O'
0040100A     |4F            db 4F                                    ;  CHAR 'O'
0040100B     |4B            db 4B                                    ;  CHAR 'K'
0040100C     |90            nop
0040100D     |E9            db E9
0040100E     |28014B00      dd offset ppp.___CPPdebugHo
00401012   > \A1 1B014B00   mov eax,dword ptr ds:[4B011B]
00401017   .  C1E0 02       shl eax,2
0040101A   .  A3 1F014B00   mov dword ptr ds:[4B011F],eax
0040101F   .  52            push edx
00401020   .  66:51         push cx                                  ; /pModule
00401022   .  E8 4BE00A00   call 004AF072                            ; \GetModuleHandleA
...

Viendo ese push cx ya podemos decir que hemos hecho correctamente nuestro trabajo.

Guardar todos los cambios realizados

Esta opción es muy útil cuando modificas un poco por aquí, otro poco por allí, otro poco más por allá. Seleccionar todo el código que ves en la ventana de desensamblado es sencillo porque puedes hacer clic al comienzo del código, desplazarte hasta el final y pulsar la tecla mayúsculas + clic del ratón.

Sin embargo, si realizas distintos cambios es posible que no quieras modificarlos todos y analizar uno a uno o, por el contrario, permitir generar un dumpeado con todos las modificaciones. El proceso es muy similar al anterior:

  • Ejecutas OllyDBg v1.10
  • Abres OllyDBG en el mismo OllyDBG v1.10
  • Realizas diversos cambios
  • Pulsas sobre el código asm el botón derecho del ratón y seleccionas: Copy to executableAll modifications (solo aparecerá si has realizado cambios...). Verás la siguiente ventana:

OllyDBG: Copy modifications

  • Copy, Copy All, Skip. Esto significa que OllyDBG va a ir mostrándote todas las modificaciones que hayas hecho. Si pulsas:
    • Copy: quiere decir que la selección donde se encuentra, será añadida en el dumpeado. Permitirás los cambios.
    • Copy All: la opción más usual. Permites que todos los cambios se realicen en el dumpeado. No te preguntará uno por uno, como el caso anterior.
    • Skip: Saltar. Cuando OllyDBG va preguntando por los cambios, Skip le dice que no quieres que se realice en esa selección los cambios y en el dumpeado mostrará el código original.
  • Tras pulsar Copy All, aparece una ventana conocida del punto anterior y solo queda pulsar de nuevo con el botón derecho del ratón y seleccionar Save File.

En el siguiente tutorial veremos cómo hacer esto mismo desde OllyDBG versión 2, que es también muy sencillo.

Nota final: Debes tener en cuenta que estás generando un nuevo archivo ejecutable, esto significa que si por ejemplo haces modificaciones en una sección creada por el programa en tiempo de ejecución (por ejemplo en un packer), los cambios no se podrán ver reflejados. Aunque no lo recordaba, lo acabo de testear ahora mismo y no sé si existe algún plugin que lo permita, debes tener en cuenta que aunque quieras guardar todas las modificaciones, solo se harán en la sección en la que te encuentres.

Última actualización: Lunes, 10 Diciembre 2012

Comentarios   

sinnomre
0 # sinnomre 18-12-2012 22:58
yo tengo oly 2.01(beta 2) y no salen esas opciones.me puedes esplicar como se acee?
Responder | Responder con una citación | Citar
karmany
0 # karmany 19-12-2012 06:56
Hola.
Sí, con OllyDBG versión 2 es un poco diferente. Va a ser el siguiente artículo que se va a escribir en la web.
Un saludo
Responder | Responder con una citación | Citar

Escribir un comentario

Antes de publicar un comentario, usted debe aceptar nuestras condiciones de uso: Condiciones de uso


 
Visitas: 2225754