Tema destacado: Recuperar cuenta de Google, GMail, Youtube
Autor
|
Tema: Re posicionar un call near? (Leído 888 veces)
|
.:UND3R:.
Desconectado
Mensajes: 1.960
Ingeniería inversa
|
a través de qué fórmula puedo saber que valores HEX debe tener un call en el dump (después de E8) me explico
si copio y pego un call en otra dirección no funciona ya que apunta a otra dirección y no a la que apuntaba estando en la posición original, no sé si se entiende
Saludos
|
|
|
|
|
En línea
|
|
|
|
Иōҳ
Desconectado
Mensajes: 454
|
Claro, tienes que poner el desplazamiento que hay desde el call hasta el procedimiento que quieres llamar, date cuenta que cuando vez los opcdes de un CALL, acaso vez la dirección?, que crees que es... has la prueba sea negativo o positivo ese desplazamiento, sumalo y veras a donde te lleva.
Nox
|
|
|
|
|
En línea
|
|
|
|
MCKSys Argentina
Desconectado
Mensajes: 1.222
Diviérte crackeando, que para eso estamos!
|
Para evitar todos los calculos, transforma el CALL en un PUSH+RET. Por Ej.: CALL 123456 es igual que PUSH 123456 RET El unico problema es que necesitas 1 bytes mas... 
|
|
|
|
|
En línea
|
--------------------- MCKSys Argentina
"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."
|
|
|
Иōҳ
Desconectado
Mensajes: 454
|
El unico problema es que necesitas 1 bytes mas...  Eso, tienes que tener cuidado de que no pises demás bytes, que si no je.. Nox
|
|
|
|
|
En línea
|
|
|
|
.:UND3R:.
Desconectado
Mensajes: 1.960
Ingeniería inversa
|
Muchas gracias de todas formas el método de MCKSys Argentina no me sirve en esta ocasión pero si lo guardaré para otra circunstancia que que lo encontré muy llamativo Иōҳ, no logro dar con el call :S te comentó: Está es la posición correcta en donde hay dos call que quiero copiar: 00890E97 C1E8 10 SHR EAX,10 00890E9A A3 28E64500 MOV DWORD PTR DS:[45E628],EAX 00890E9F E8 FC84B9FF CALL UnPackMe.004293A0 00890EA4 85C0 TEST EAX,EAX 00890EA6 75 0A JNZ SHORT 00890EB2 00890EA8 6A 1C PUSH 1C 00890EAA E8 B164B9FF CALL UnPackMe.00427360
si en la primera call coloco follow in dump me muestra lo siguiente: 00890E9F E8 FC 84 B9 FF Si copio todo en otra ruta me aparece lo siguiente: 0042923E A3 28E64500 MOV DWORD PTR DS:[45E628],EAX 00429243 E8 FC84B9FF CALL FFFC1744 00429248 85C0 TEST EAX,EAX 0042924A 75 0A JNZ SHORT UnPackMe.00429256 0042924C 6A 1C PUSH 1C 0042924E E8 B164B9FF CALL FFFBF704 No logro entender muy bien
|
|
|
|
|
En línea
|
|
|
|
.:UND3R:.
Desconectado
Mensajes: 1.960
Ingeniería inversa
|
Si me explicaran la fórmula o el método para poder saber el valor que debe tener el call se los agradecería,ya que quiero aplicarlo a un script por que son muchas call a modificar, muchas gracias
|
|
|
|
|
En línea
|
|
|
|
MCKSys Argentina
Desconectado
Mensajes: 1.222
Diviérte crackeando, que para eso estamos!
|
1) Obtienes la direccion donde esta el CALL (890E9F) 2) Obtienes los bytes del CALL (FC84B9FF) 3) Inviertes los bytes del CALL (FFB984FC). Asi obtienes un nuemro que puede ser positivo o negativo. 4) Le sumas a la direccion de 1) los bytes invertidos. Listo. Ya tienes la VA de la funcion... Saludos! Ah! Sumale 5 (los bytes que ocupa el CALL) 
|
|
|
|
« Última modificación: 14 Septiembre 2011, 02:57 por MCKSys Argentina »
|
En línea
|
--------------------- MCKSys Argentina
"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."
|
|
|
.:UND3R:.
Desconectado
Mensajes: 1.960
Ingeniería inversa
|
Me ha funcionado de maravilla. una cosa más me podrías explicar un poco más detallada la fórmula? (Quiero saber que es lo que hago) 1) Obtienes la direccion donde esta el CALL (890E9F) 2) Obtienes los bytes del CALL (FC84B9FF) 3) Inviertes los bytes del CALL (FFB984FC). Asi obtienes un nuemro que puede ser positivo o negativo. 4) Le sumas a la direccion de 1) los bytes invertidos.
Listo. Ya tienes la VA de la funcion...
Saludos!
Ah! Sumale 5 (los bytes que ocupa el CALL) Muchas gracias
|
|
|
|
|
En línea
|
|
|
|
Иōҳ
Desconectado
Mensajes: 454
|
1) Obtienes la direccion donde esta el CALL (890E9F) 2) Obtienes los bytes del CALL (FC84B9FF) 3) Inviertes los bytes del CALL (FFB984FC). Asi obtienes un nuemro que puede ser positivo o negativo. 4) Le sumas a la direccion de 1) los bytes invertidos.
Muy bueno  , yo lo hago de otra forma (creo, je... tengo que revisar el code que tengo por ahí para acordarme)  EDITO: Ve, no vi esto, ya lo iba acotar. Ah! Sumale 5 (los bytes que ocupa el CALL)  Esto nunca yo lo supe tan solo me puse a ver como era esto del call y jmp, y a lo ortodoxo saque la forma de hacerlo, y luego me di cuenta de los 5 bytes del call o jmp :B, tan solo es cuestion de ser observador  . Pd: en este tiempo no tenía internet, todo lo hacía con lo que sabía y tenía a la mano y que era muy poco  . Nox.
|
|
|
|
« Última modificación: 14 Septiembre 2011, 06:58 por Иōҳ »
|
En línea
|
|
|
|
MCKSys Argentina
Desconectado
Mensajes: 1.222
Diviérte crackeando, que para eso estamos!
|
Me ha funcionado de maravilla. una cosa más me podrías explicar un poco más detallada la fórmula? (Quiero saber que es lo que hago)
El tema es que los JMPs y los CALLs son relativos a la posicion en la que estan. Siguiendo tu ejemplo, tienes un CALL: 00890E9F E8 FC84B9FF CALL UnPackMe.004293A0
Como vez Olly te decodifica ya la direccion a la que saltara/llamara el CALL, pero si lo ves a nivel de BYTES, el valor que tiene el opcode de CALL (E8) es FFB984FC. Este valor es la distancia en bytes desde esa posicion (00890E9F) al inicio del CALL en si (4293A0). Ahora, para calcular efectivamente la direccion, deberas sumarle a la direccion donde esta el CALL, el valor de "distancia" y ademas la cantidad de bytes que ocupa la instruccion CALL... Eso es todo 
|
|
|
|
|
En línea
|
--------------------- MCKSys Argentina
"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."
|
|
|
|
|
apuromafo
Desconectado
Mensajes: 640
|
en script seria la direccion le buscas con gci lugar,destination y el lugar en el result tambien el size es importante, hay calls falsos que son espacios mal alineados, revisa los script que alguna vez envie luego haces un eval y asm con el destino
/// con respecto a la idea del push+ret = jmp, el call puede tener retorno, ese es la diferencia de un salto y un call cuando llama el call retorna automaticamente al esp+4
deberia ser
push lugarpostret push lugarorigen ret lugarpostret:aqui
luego habra algo como esto en lugarorigen: push ebp instrucciones Ret->deberia apuntar al postret
/// pd: en los script el destino de los push debe hacerse manual, pero de los call y jmp dword ,call dword es posible
saludos Apuromafo
|
|
|
|
|
En línea
|
|
|
|
|
|