elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ASM (Moderador: Eternal Idol)
| | | |-+  [ASM] Calcular direccion de CALL
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: [ASM] Calcular direccion de CALL  (Leído 9,234 veces)
Lambda


Desconectado Desconectado

Mensajes: 371



Ver Perfil WWW
[ASM] Calcular direccion de CALL
« en: 12 Mayo 2009, 00:45 am »

Vereis, estoy programando X programa y para ello necesito llamar a una funcion "dinamicamente", o sea, tengo que generar el codigo binario a partir de un unsigned long que contiene la direccion de la funcion a llamar, la verdad es que nunca habia echo esto, por lo tanto al igual que hice con el push, hice esto.

Código
  1. BYTE CallSignature[5];
  2.  
  3. CallSignature[0] = 0xE8; //! CALL opcode
  4. *(DWORD*)( CallSignature + 1 ) = dwFunctionAddress;
  5.  

Pero en ese momento me di cuenta de que las direcciones de los calls son relativas y no absolutas, estuve buscando por google y no encontre nada que me aclarara como calcular la direccion.

Alguien tiene idea de como calcular la direccion que habria que poner justo despues del 0xE8?


En línea

Arkangel_0x7C5


Desconectado Desconectado

Mensajes: 361



Ver Perfil
Re: [ASM] Calcular direccion de CALL
« Respuesta #1 en: 12 Mayo 2009, 00:59 am »

mira esto.

Cita de: Intel Hex Opcodes And Mnemonics
        E8 cw CALL rel16 Call near, relative, displacement relative to next instruction
        E8 cd CALL rel32 Call near, relative, displacement relative to next instruction
        FF /2 CALL r/m16 Call near, absolute indirect, address given in r/m16
        FF /2 CALL r/m32 Call near, absolute indirect, address given in r/m32
        9A cd CALL ptr16:16 Call far, absolute, address given in operand

        9A cp CALL ptr16:32 Call far, absolute, address given in operand
        FF /3 CALL m16:16 Call far, absolute indirect, address given in m16:16
        FF /3 CALL m16:32 Call far, absolute indirect, address given in m16:32
puedes usar relativos y no relativos
El que creo que te puede ir mejor es el de FF15 call no relativo

Saludos


« Última modificación: 12 Mayo 2009, 01:01 am por Arcangel_0x7C5 » En línea

Lambda


Desconectado Desconectado

Mensajes: 371



Ver Perfil WWW
Re: [ASM] Calcular direccion de CALL
« Respuesta #2 en: 12 Mayo 2009, 01:17 am »

mira esto.

Cita de: Intel Hex Opcodes And Mnemonics
        E8 cw CALL rel16 Call near, relative, displacement relative to next instruction
        E8 cd CALL rel32 Call near, relative, displacement relative to next instruction
        FF /2 CALL r/m16 Call near, absolute indirect, address given in r/m16
        FF /2 CALL r/m32 Call near, absolute indirect, address given in r/m32
        9A cd CALL ptr16:16 Call far, absolute, address given in operand

        9A cp CALL ptr16:32 Call far, absolute, address given in operand
        FF /3 CALL m16:16 Call far, absolute indirect, address given in m16:16
        FF /3 CALL m16:32 Call far, absolute indirect, address given in m16:32
puedes usar relativos y no relativos
El que creo que te puede ir mejor es el de FF15 call no relativo

Saludos

Si, ya habia visto eso buscando en google, el problema es que no puedo pasar de 5 bytes ya que tengo que sobreescribir un CALL en un ejecutable para que apunte al mio, (no es hooking, puedo hacerlo como si fuera hooking pero prefiero hacerlo de esta manera, ya que para lo que quiero hacer es mas limpio)
En línea

Arkangel_0x7C5


Desconectado Desconectado

Mensajes: 361



Ver Perfil
Re: [ASM] Calcular direccion de CALL
« Respuesta #3 en: 12 Mayo 2009, 01:35 am »

entonces, usa la que tu dijiste, es relativa a la siguiente instrucción. el uno seria el primer vite de la siguiente o algo asi.

Saludos
En línea

Lambda


Desconectado Desconectado

Mensajes: 371



Ver Perfil WWW
Re: [ASM] Calcular direccion de CALL
« Respuesta #4 en: 12 Mayo 2009, 02:29 am »

entonces, usa la que tu dijiste, es relativa a la siguiente instrucción. el uno seria el primer vite de la siguiente o algo asi.

Saludos

Ese es el problema, que no se como calcularlo xD, he estado haciendo varias sumas y restas y ninguna me da lo que creo que me tiene que dar.

Código
  1. 0054A033   . 52             PUSH EDX
  2. 0054A034   . 83C1 0C        ADD ECX,0C
  3. 0054A037   . 03FD           ADD EDI,EBP
  4. 0054A039   . E8 A2AAEEFF    CALL 00434AE0
  5. 0054A03E   . 8B00           MOV EAX,DWORD PTR DS:[EAX]
  6. 0054A040   . 50             PUSH EAX
  7. 0054A041   . 57             PUSH EDI
  8.  

Por que en ese CALL a 0x00434AE0 los 4 bytes siguientes al E8 son 0xA2AAEEFF? es lo que no se resolver.
En línea

bizco


Desconectado Desconectado

Mensajes: 698


Ver Perfil
Re: [ASM] Calcular direccion de CALL
« Respuesta #5 en: 12 Mayo 2009, 02:37 am »

pero que necesitas cambiar este call  CALL 00434AE0  a un de tu codigo? este codigo esta en una dll?
En línea

Lambda


Desconectado Desconectado

Mensajes: 371



Ver Perfil WWW
Re: [ASM] Calcular direccion de CALL
« Respuesta #6 en: 12 Mayo 2009, 02:39 am »

pero que necesitas cambiar este call  CALL 00434AE0  a un de tu codigo? este codigo esta en una dll?

Si, el CALL a la nueva direccion sera una direccion de una DLL
En línea

Arkangel_0x7C5


Desconectado Desconectado

Mensajes: 361



Ver Perfil
Re: [ASM] Calcular direccion de CALL
« Respuesta #7 en: 12 Mayo 2009, 02:44 am »

restando, y si es negativo seria hacia atras. recuerda que para leer tu un numero hex. tienes que invertirlo.
ej:

a2aaeeff se leeria 0xFFEEAAA2

Saludos
En línea

Lambda


Desconectado Desconectado

Mensajes: 371



Ver Perfil WWW
Re: [ASM] Calcular direccion de CALL
« Respuesta #8 en: 12 Mayo 2009, 02:48 am »

restando, y si es negativo seria hacia atras. recuerda que para leer tu un numero hex. tienes que invertirlo.
ej:

a2aaeeff se leeria 0xFFEEAAA2

Saludos

Si, eso ya lo sabia que habia que leerlos al reves, pero bueno, sigo sin aclararme que hay que restar a que XD, igual, mañana por la mañana lo mirare por que ahora con la hora que es tengo mi calculadora bastante espesa xD
En línea

Arkangel_0x7C5


Desconectado Desconectado

Mensajes: 361



Ver Perfil
Re: [ASM] Calcular direccion de CALL
« Respuesta #9 en: 12 Mayo 2009, 03:16 am »

quizad esto te sirva.



Cita de: OnllyDbg
$-3EB                                    FUNC.401B08:

$00            E8 10FCFFFF         CALL MIEXE.00404B08


$+15         E8 FBFBFFFF          CALL MIEXE.00404B08

saludos
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
COMO CREAR O CALCULAR UNA DIRECCION IP COMPATIBLE CON UNA YA EXISTENTE.
Redes
apoklipziz2007 9 7,051 Último mensaje 29 Agosto 2012, 02:46 am
por burbu_1
Como calcular la ip que ocupa una vlan con la direccion, mascara y la subredes?
Redes
Synth3tik0 0 2,990 Último mensaje 23 Julio 2016, 06:47 am
por Synth3tik0
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines