OllyDBG v2: guardar cambios

Creado: Viernes, 21 Diciembre 2012 Escrito por Admin Visto: 6592
Tamaño de letra:

Sobrescribir o crear nuevo archivo ejecutable

En otro artículo ya vimos cómo guardar los cambios usando OllyDBG v1.10. Hoy vamos a ver eso mismo pero en OllyDBG versión 2, que es un poco diferente. Dicha versión es la actualización de 1.10 con muchas nuevas características que a día de hoy está en desarrollo y seguramente sea el futuro. Para seguir el tutorial de hoy, voy a descargar la versión más actual de OllyDBG v2, sin ningún plugin, desde su sitio web.

Abrir el mismo OllyDBG v.2

Al igual que se hizo en el artículo sobre la versión 1.10, hoy vamos a trabajar del mismo modo. Para eso hago lo siguiente:

Aparece el siguiente código:

 
Address   Hex dump          Command                                  Comments
00401000   . /EB 10         jmp short 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   . |F4514F00      dd offset ___CPPdebugH00k
00401012  /> \A1 E7514F00   mov eax,dword ptr ds:[4F51E7]
00401017  |.  C1E0 02       shl eax,2
0040101A  |.  A3 EB514F00   mov dword ptr ds:[4F51EB],eax
0040101F  |.  52            push edx
00401020      6A 00         push 0
00401022  |.  E8 112F0F00   call <jmp.&KERNEL32.GetModuleHandleA>    ; Jump to GetModuleHandleA
 

Realizar un cambio cualquiera

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:

OllyDBG v2: Assemble

Pongo cx por lo mismo que en el ejemplo de OllyDBG v1.10: por nada en especial, simplemente por evitar una excepción ya que cx vale cero en ese momento. Tú puedes hacer la/las modificaciones que quieras.Veo el siguiente resultado:

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

De distinto modo que la versión anterior, aquí solo puedes guardar los cambios de una forma:

Guardar solo los cambios seleccionados

De esta forma guardaremos en el exe solamente los cambios que seleccionemos. Si has realizado varios cambios en el código y no recuerdas dónde, puedes seleccionarlo todo del siguiente modo: botón derecho del ratón y en el menú emergente Edit ? Select All. En este caso 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: Edit ? Copy to executable. Se abrirá una nueva ventana mostrando el siguiente código:

 
Address   Hex dump          Command                                  Comments
00000620   66:51            push cx
00000622   E8 112F0F00      call 000F3538
00000627   8BD0             mov edx,eax
00000629   E8 524B0E00      call 000E5180
0000062E   5A               pop edx
...
 

Sin embargo, observo que aparece también una ventana con el siguiente mensaje:

Internal copy of file 'C:\ollydbg.exe' was modified. Choose 'Save file' from popup menu if you want to save modifications to disk.

Que traducido viene a decir:

La copia interna del archivo 'C:\ollydbg.exe' ha sido modificada. Selecciona 'Guardar archivo' en el menú emergente, si quieres guardar las modificaciones en el disco.

Es sencillo de entender y nos indica que el código (interno, el que tiene OllyDBG en memoria) ha sido modificado. Yo tildo la opción "Don't display this message in the future" para que no me vuelva a avisar más y pulso OK.

Como puedes observar la dirección 00401020 que es la dirección virtual se ha cambiado a 00000620 que es el offset que quedará en el archivo físico. Ahora simplemente hay que hacer lo que nos indicaba la ventana anterior: pulsar botón derecho del ratón para que salga un menú emergente y seleccionar: Save file.

Aparece la siguiente ventana:

OllyDBG v2: File changed

Yo creo que esa ventana no es correcta del todo porque en este momento los botones cancelar y No hacen exactamente lo mismo. Esta ventana es la que es mostrada cuando se cierra la ventana D (File, la que debes tener abierta. Si la restauras -quitar de maximizar- podrás observar el icono D). Si cierras esta ventana (D) verás que nuevamente aparece este mismo mensaje, pero ahora sí tiene sentido porque el botón No cierra la ventana File, mientras que cancelar la mantiene.

Entonces, ¿qué hay que hacer? Si quieres guardar los cambios pulsas el botón y te pedirá por el nombre del archivo. Si pulsas No o Cancelar volverás a la ventana File (D). Pulso el botón Sí y guardo el archivo como ollydbg002.exe.

Comprobar los cambios

Ahora deberías comprobar si se ha realizado todo correctamente, así que ejecuta OllyDBG v.2 y abre el archivo recién creado ollydbg002.exe. Comprueba que push 0 ha sido modificado por push cx.

Como puedes ver, esta nueva versión es un poco diferente. El manejo es muy sencillo y si realizas varios cambios, en la ventana D puedes revertirlos al original pulsando el botón derecho del ratón y eligiendo: Edit ? Undo Selection. Los cambios son fáciles de localizar porque aparecen en rojo y de este modo puedes modificarlos a tu antojo antes de crear el archivo final.

Última actualización: Viernes, 21 Diciembre 2012