Foro de elhacker.net

Programación => Ingeniería Inversa => Mensaje iniciado por: ViejoMajara en 29 Diciembre 2014, 10:13 am



Título: Los Stolen Bytes del PELock1.06.d.exe
Publicado por: ViejoMajara en 29 Diciembre 2014, 10:13 am
¡Hola!

He llegado a la Parte 39 de la Introducción al Olly Debugger y me he atrancado. Sigo al pie de la letra las instruciones y me va distinto que lo que indica el manual.

En primer lugar, aunque no le doy mayor importancia, en mi PC las direcciones del STACK empiezan por 13 en vez de 12, así la famosa 12FFC4 es la 13FFC4.

En el programa, una vez que llego al retorno de la última excepción antes de llegar al CODE, los caminos que sigue son distintos en el Manual y en mi PC.

En el Manual el retorno es en 3A6746 JMP SHORT 003A674A, y en mi caso el retorno es en 036746 JMP SHORT 0003674A. Parece que en mi caso se ha cambiado el 3A por 03.

Pero a partir de aquí todo se va al traste. Las condiciones de Trace Into que he colocado son las mismas que en el Manual, pero a mi se me va directamente al Entry Point 4271D6. Parece que no encontró ni un POPAD ni un PUSH EBP en su recorrido.

Condiciones: EIP entre 00401000 y 00475000
Command is one of: POPAD o PUSH EBP.

¿Qué otras condiciones tendría que tantear para resolverlo de otra forma?

Saludos


Título: Re: Los Stolen Bytes del PELock1.06.d.exe
Publicado por: ViejoMajara en 4 Enero 2015, 10:37 am
¡Feliz 2015 a todos los que leáis esto!

Entre el 12/05 y el 28/05/2012 se trató este tema bajo el título "UnPackMe_PELock1.06.d.exe Tema39 totalmente atascado". Lo he leído, pero tampoco consigue sacarme del atolladero ya que no termino de comprender las explicaciones que allí se dan.

El que tenía las mismas direcciones que yo y que parecía haber resuelto el tema era MARIO86. con el que me gustaría ponerme en contacto, pero no sé cómo hacerlo. Si alguien puede decirle que lea este tema, se lo agradecería.

Por otra parte he conseguido llegar al primer PUSH EBP (y primer Stolen Byte) que cita el Manual en la dirección 3A6A4A y que en mi PC está en 036A4A. Pero en cuanto le doy al traceador, si he puesto entre las condiciones que pare entre 401000 y 475000, además de en POPAD y PUSH EBP, se me va al falso OEP 4271D6 al instante, y si suprimo la primera condición se me mete por las API y me pierdo.

Además, cuando ando un poco con las flechas para ver líneas anteriores o posteriores en el debugger, se modifican todos los comandos. ¿Cómo se tratan estos casos de movilidad cambiante?.

Me gustaría terminar completo el Manual de R. Narvaja. ¿Algún alma caritativa que se apiade del viejo novato para superar este escollo?

Saludos.



Título: Re: Los Stolen Bytes del PELock1.06.d.exe
Publicado por: MCKSys Argentina en 4 Enero 2015, 12:28 pm
Hola!

Una vez que llegas al primer stolen byte (PUSH EBP de 346A4A), no debes usar más el trace. Usas F7/F8 para ir viendo las instrucciones que han sido robadas, hasta llegar a 4271D6.

Fíjate que las instrucciones SAL son basura y que el packer usa la secuencia PUSH 4271D6 + RET al final.

Eso de que el código se mueve cuando usas las flechas, es porque es mismo está desalineado. Esto lo hace el packer a propósito, para dificultar el debugging. Una opción que podrías probar (digo, por si quieres probar algo que no está en el curso), es hacer un pequeño script que reconozca los saltos que tiene el packer y coloque NOPs en las instrucciones saltadas. Así Olly no tendrá problemas de alineación y podrás ver el código desofuscado. Incluso podrías NOPear también las instrucciones SAL...  ;)

Saludos!

EDIT:

Te dejo el script que limpia el codigo. Lo debes ejecutar estando en el primer stolen byte (PUSH EBP de 346A4A). Verás que sólo quedarán las instrucciones robadas...  :)

Código:
var direccion
var fin

mov direccion, eip
mov fin, 347600

bucle:
find direccion, #EB02#
mov direccion, $RESULT
cmp direccion, 0
je bucle2start
mov [direccion], 90,1
mov [direccion+1], 90,1
mov [direccion+2], 90,1
mov [direccion+3], 90,1
jmp bucle

bucle2start:
mov direccion, eip

bucle2:
find direccion, #EB01#
mov direccion, $RESULT
cmp direccion, 0
je bucle3start
mov [direccion], 90,1
mov [direccion+1], 90,1
mov [direccion+2], 90,1
jmp bucle2

bucle3start:
mov direccion, eip

bucle3:
find direccion, #C1??00#
mov direccion, $RESULT
cmp direccion, 0
je salida
mov [direccion], 90,1
mov [direccion+1], 90,1
mov [direccion+2], 90,1
jmp bucle3
salida:
ret


Título: Re: Los Stolen Bytes del PELock1.06.d.exe
Publicado por: ViejoMajara en 4 Enero 2015, 21:25 pm
¡Gracias MCKSys!

Esto me ha sacado del atasco en el que estaba. He llegado a sacar todos los stolen bytes y colocarlos en su sitio.

Todo se ha debido a que utilizaba el traceado automático en vez de F7 o F8. Lo había probado, pero me desconcertaba al ver los cambios en las líneas y no seguía con ello.

En cuanto al script lo dejo para cuando los estudie en el siguiente capítulo. Cuando lo utilice ya expondré los resultados.

Saludos.


Título: Re: Los Stolen Bytes del PELock1.06.d.exe
Publicado por: ViejoMajara en 21 Enero 2015, 08:37 am
¡Hola!

Iba a estudiar y utilizar el script que envió MCKSys con su respuesta. Pensaba que RICNAR en sus lecciones daría algunas indicaciones sobre los comandos de los SCRIPTS, pero veo que no es así. Estoy tratando de entenderlos pero lo hago intuitivamente, ya que no encuentro un lugar donde me indiquen cuáles son y cómo usarlos.

He buscado por el foro pero parece que todos dan por hecho que debes de saber el lenguaje que se utiliza. Yo, en su momento, hice mis pinitos con basic y posteriormente con C, pero está olvidado. ¿Hay algún tutorial para poder entender los scripts que se usan con OLLY?

Saludos.



Título: Re: Los Stolen Bytes del PELock1.06.d.exe
Publicado por: MCKSys Argentina en 21 Enero 2015, 15:21 pm
Hola!

Hasta donde sé, no hay tutoriales sobre el lenguaje del plugin ODBGSCript (http://odbgscript.sourceforge.net/).

Ahora, el plugin viene con un .txt que enumera todos los comandos y explica para qué son y cómo usarlos.
Te recomiendo tenerlo a mano al momento de leer/escribir scripts.

Saludos!


Título: Re: Los Stolen Bytes del PELock1.06.d.exe
Publicado por: ViejoMajara en 21 Enero 2015, 19:53 pm
¡Hola!

Había visto ya estas instrucciones pero, no sé por qué, pensaba que había sido en internet. Me estaba volviendo loco buscándolas por el foro y en la red y resulta que las tenía ante mis narices. El cerebro no funciona como antaño.

Muchas gracias de nuevo. Voy a ver si por fin entiendo del todo los scripts que estoy utilizando y si, más adelante, me atrevo a hacer alguno.

Saludos


Título: Re: Los Stolen Bytes del PELock1.06.d.exe
Publicado por: .:UND3R:. en 22 Enero 2015, 20:31 pm
Te recomiendo usar OllySubScript es un IDE (notepad con colores) que te permite crear este tipo de script y de forma muy cómoda adicionando que se incluye una lista con los comandos disponibles y con ejemplos, es muy sencillo con este IDE, saludos.


Título: Re: Los Stolen Bytes del PELock1.06.d.exe
Publicado por: ViejoMajara en 23 Enero 2015, 20:27 pm
¡Hola!

Ya me he bajado el OllySubScript, aunque antes de poderlo usar tendré que entender los scripts que voy viendo y luego ya me lanzaré.

MCKSys, he tratado de usar el script que me enviaste pero me da error en la Línea 10, mov[direction], 90,1.  Por lo que leo en las instrucciones el mov sólo admite una cifra ¿Será por esto?.

Por otra parte no entiendo el motivo de la dirección 347600 en "mov fin, 347600" que tendría que ajustarla a mis direcciones de memoria.

Pregunto. He mirado en el foro de los scripts y allí no se habla (o por lo menos a mi me lo parece) de los scripts de Olly. Si hay dudas sobre este tema ¿Dónde las expongo, en este foro o en aquél?

Saludos.


Título: Re: Los Stolen Bytes del PELock1.06.d.exe
Publicado por: MCKSys Argentina en 24 Enero 2015, 01:23 am
MCKSys, he tratado de usar el script que me enviaste pero me da error en la Línea 10, mov[direction], 90,1.  Por lo que leo en las instrucciones el mov sólo admite una cifra ¿Será por esto?.

El tercer parametro es el size de lo que quieres MOVer (en este sentido, es CASI igual a la instruccion ASM, excepto que el tamaño va en el 3er parametro). Verifica que tengas la última versión de ODBGScript, pues no sé a partir de qué versión se implementó el 3er parametro.

Por otra parte no entiendo el motivo de la dirección 347600 en "mov fin, 347600" que tendría que ajustarla a mis direcciones de memoria.

No creo que debas ajustarlo. Si sigues las instrucciones que te dí:

Te dejo el script que limpia el codigo. Lo debes ejecutar estando en el primer stolen byte (PUSH EBP de 346A4A). Verás que sólo quedarán las instrucciones robadas...  :)

las direcciones deberían ser iguales. Ahora, como todo el mundo, puedo estar errado y el PUSH EBP del primer stolen byte esta en otra direccion en tu maquina. Si es asi, corrije la direccion.

Pregunto. He mirado en el foro de los scripts y allí no se habla (o por lo menos a mi me lo parece) de los scripts de Olly. Si hay dudas sobre este tema ¿Dónde las expongo, en este foro o en aquél?

Los scripts de Olly son especiales y sólo sirven con el plugin ODBGScrip. El foro de scripts trata sobre lenguajes de scripts "mas amplios", como por ej. python, ruby, etc.
Si tienes preguntas sobre los scripts de Olly, hazlas aquí.

Saludos!


Título: Re: Los Stolen Bytes del PELock1.06.d.exe
Publicado por: ViejoMajara en 24 Enero 2015, 09:36 am
¡Hola!

Yo estaba trabajando con el OllyScript v0.92, que a partir de esta versión cambió de nombre pasando a ser OdbgScript y por eso no daba con él. Ahora está en la v1.82.6.

Por cierto, para enterarme de la versión del que daba error añadí un "log $VERSION" al script. Ha sido mi primer paso.

He tenido que corregir la dirección de memoria ya que en mi PC el "push ebp" del primer stolen estaba en 036A4A en vez de en 346A4A. He sustituido en el script 347600 por 037600 y ha funcionado perfectamente.

Saludos.



Título: Re: Los Stolen Bytes del PELock1.06.d.exe
Publicado por: MCKSys Argentina en 24 Enero 2015, 17:16 pm
Me alegro...  :)

Saludos!