Tema destacado: Personaliza-Escoge el diseño del foro que más te guste.
Autor
|
Tema: No entiendo la analogía de los STOLEN BYTE de PESPIN (Leído 1,648 veces)
|
.:UND3R:.
Desconectado
Mensajes: 1.960
Ingeniería inversa
|
Bueno en el tutorial ricardo narvaja explica algo más o menos así: Vemos alli que antes de correr el programa, el stack esta en mi maquina en 12ffc4, quiere decir que si cuando llega al verdadero OEP el stack esta en la misma posicion o sea en 12FFc4, la primera sentencia que podria ser PUSH EBP se escribira en 12ffc0 justo arriba de esta, asi que busquemos 12FFc0 en el dump y pongamosle un HARDWARE BPX ON WRITE a ver si nos da resultado, puede que si puede que no, pero el razonamiento es logico. Por que se escribe justo arriba de la misma? si se supone que el primer comando sería PUSH EBP y en la dirección 12FFc4 si alguien lo explica bien se los agradecería saludos
|
|
|
|
|
En línea
|
|
|
|
|
|
.:UND3R:.
Desconectado
Mensajes: 1.960
Ingeniería inversa
|
Sigo sin entender osea ricardo cuando llega al falso oep (stolen byte) le marca que está en 12FFc4 (posición de la pila normal) pero si se ve detenidamente se nota que hay stolen byte eso lo entiendo claramente pero mi pregunta es por que busca en 12FFc0 deciendo que ahí se debería ejecutar un push ebp
Gracias por la paciencia
|
|
|
|
|
En línea
|
|
|
|
_Enko
Desconectado
Mensajes: 301
|
dejame adivinar... mh...
despues de que dice que el stolen byte es "push ebp"...
la siguiente instruccion cual es? "mov ebp, esp"?
|
|
|
|
|
En línea
|
|
|
|
.:UND3R:.
Desconectado
Mensajes: 1.960
Ingeniería inversa
|
Así es efectivamente pero no logro entender lo que comenté anteriormente
|
|
|
|
|
En línea
|
|
|
|
.:UND3R:.
Desconectado
Mensajes: 1.960
Ingeniería inversa
|
No entiendo lo de la pila osea si parte en 12FFc4 y cuando encuentro el falso oep está en 12FFc4 quiere decir que anteriormente ya realizó operaciones, eso me queda claro pero el problema surge ahora que por qué empieza a buscar en 12FFc0 siendo que son muchos stolen bytes no entiendo el por qué de buscar ahí
|
|
|
|
|
En línea
|
|
|
|
_Enko
Desconectado
Mensajes: 301
|
porque es la entrada normal a un procedimiento push ebp mov ebp, esp
Los enpaquetadores convierten la ejecutable en una rutina para poder ejecutarla. La entrada a cualquier procedimiento comienza normalmente con push ebp mov ebp, esp sub esp, SIZEOF(LOCAL VAR)
por eso se puede adivinar cual es la intruccion original en este caso y supongo en muchos otros. Porque busca alli? Ni idea, en el caso. Pero la idea de conseguir saber cuales son los stolen bytes pasa por encontrar la entrada original de la ejecutable. Segun el compilador, suelen hacerlo siempre de la misma manera. Por ejemplo, en este caso, calculo que el programa esta hecho con c++.
|
|
|
|
« Última modificación: 30 Junio 2011, 00:17 por _Enko »
|
En línea
|
|
|
|
|
|
_Enko
Desconectado
Mensajes: 301
|
no me he puesto a desempaquetar programas, asi que ni idea.
lo unico que se me ocurre es que push ebp, restaria 4 al stack, por eso el stack original comienzaria en -4 despues del push (en esa direccion se encuentra el ret al kernel)
|
|
|
|
« Última modificación: 30 Junio 2011, 05:41 por _Enko »
|
En línea
|
|
|
|
.:UND3R:.
Desconectado
Mensajes: 1.960
Ingeniería inversa
|
Pero no se supone que el inicio está justo antes de ejecutar el push ebp y no después que se ejecutó?
osea el programa parte así según mi entender
Push ebp mov ebp, esp
12FFC4
|
|
|
|
|
En línea
|
|
|
|
.:UND3R:.
Desconectado
Mensajes: 1.960
Ingeniería inversa
|
Todo aclarado, explico por si alguien llega a tener la misma duda: Si abrimos un programa sin empaquetar y nos fijamos en la pila, veremos el siguiente valor 12FFC4Ahora si abrimos un programa empacado lo más probable es que deba tener la pila más aumentada por así decirlo debido a que ya ha ejecutado operaciones anteriormente pero en este caso de PESPIN permanece 12FFC4 como la primera dirección en la pila, pero el problema surge que si nos fijamos en el stack debajo de esta hay operaciones realizadas de todas formas por lo que podemos apreciar stolen bites: Por lo que la idea es encontrar el primer stolen bite con esta analogía: cuando nos encontramos frente a la primera operación esta debería ser: PUSH EBP (por lo general) por lo que habría que poner un Hadware bp en 12FFC0 y ¿por qué no en 12FFC4? Debido a que cuando se utiliza un Hadware bp este se detiene en la siguiente operación además en ese instante el push ebp ya estará ejecutado por lo que el principio de la pila apuntará a 12FFC0No sé si esté bien esta analogía pero así lo logro entender
|
|
|
|
|
En línea
|
|
|
|
apuromafo
Desconectado
Mensajes: 640
|
pensemoslo de otra forma entonces
el programa normal es
1 2 3 4 5
el programa con stolen estaras en 4 5 6
luego como se donde comenzo?, pues un bp en acces en 1 o en 2
pero como llego a eso?, normalmente todos comienzan por push ebp, o algun push o similar, luego hay 4 menos y por ahi intentar
en upx, el pushad guarda los registros, el popad los restaura, por eso el metodo sirve, pero si hiciera pushad y nunca popad, no serviria el metodo
el tema delicado ahi es que el valor de comienzo, nisiquiera se hubiera escrito, el segundo si..es solo eso
|
|
|
|
|
En línea
|
|
|
|
|
|