Bueno en el tutorial ricardo narvaja explica algo más o menos así:
CitarVemos 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
push ebp, escribe en stack..que direccion? mira el stack , en la maquina de ricardo deberia ser 12FFc4
cuando se detiene en el oep, y no esta en la misma direccion donde ejecutan todos los programas, hay estolen, es para eso..y si coloca el bp en access en la direccion, significa que posiblemente encontrara la primera escritura en ese lugar..
es eso
verifica como se llaman las ventanas en:
http://foro.elhacker.net/ingenieria_inversa/taller_de_cracking_desde_cero_actualizado_27julio2008-t180886.0.html
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
dejame adivinar... mh...
despues de que dice que el stolen byte es "push ebp"...
la siguiente instruccion cual es? "mov ebp, esp"?
Así es efectivamente pero no logro entender lo que comenté anteriormente
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í
porque es la entrada normal a un procedimiento
Citar
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++.
Entiendo lo que comentaste pero lo que no entiendo es por que se intenta buscar en 12FFC0 y no más atrás de la pila y no entiendo eso por que los stolen byte son más que uno si fuera uno entendería pero son muchos, Gracias por la paciencia :D
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)
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
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:
Citar 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 12FFC0
No sé si esté bien esta analogía pero así lo logro entender
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