OllyDBG v2: guardar cambios
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:
- Ejecuto OllyDBG versión 2.
- Pulso F3 o voy al menú File ? Open
- Selecciono el mismo programa ollydbg.exe
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:
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 solamente los cambios seleccionados.
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:
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 Sí 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.