Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: SuperNovato en 20 Diciembre 2010, 19:12 pm



Título: Duda sobre saltos, de apihooking
Publicado por: SuperNovato en 20 Diciembre 2010, 19:12 pm
en los tutos de mazard para saltar de api a funcionfalsa, y vicerversa se usa el JMP con codigo 0xE9, y se deben hacer una operacion para calcular la distancia relativa y continuar la ejecucion normal de la api hookeada, ¿se podria hacer un salto directo a una direccion en vezde un salto relativo?

es decir en vez de :
JMP - calcular salto relativo a funcion

directamente asi:
JMP - direccion de funcion


Título: Re: Duda sobre saltos, de apihooking
Publicado por: [Zero] en 21 Diciembre 2010, 23:36 pm
Salto jmp absoluto creo que no hay, aunque recuerdo que arkangel me había dicho que sí hay, no sé en que quedó al final. Si quieres hacerlo de forma absoluta puedes hacerlo así, por ejemplo:

Código
  1. push DirAbsoluta
  2. ret
  3.  

o así:

Código
  1. mov eax,DirAbsoluta
  2. jmp eax
  3.  

o cualquier cosa así  :P. En mi ClsHookApi (http://foro.elhacker.net/analisis_y_diseno_de_malware/srccasm_clshookapi-t281292.0.html) lo hago con push-ret.

Saludos


Título: Re: Duda sobre saltos, de apihooking
Publicado por: SuperNovato en 22 Diciembre 2010, 01:31 am
gracias zero, estoy viendo tu code, muy bueno.

salu2


Título: Re: Duda sobre saltos, de apihooking
Publicado por: Karman en 22 Diciembre 2010, 05:05 am
acá tenes unas cuantas variantes:

Código
  1. case DETOUR_TYPE_STC_JC:
  2.        pDirApi[0] = 0xF9;
  3.        pDirApi[1] = 0x0F;
  4.        pDirApi[2] = 0x82;
  5.        *(DWORD*)&pDirApi[3]=(DWORD)(newDirApi-pDirApi)-7;
  6.      break;
  7.      case DETOUR_TYPE_CLC_JNC:
  8.        pDirApi[0] = 0xF8;
  9.        pDirApi[1] = 0x0F;
  10.        pDirApi[2] = 0x83;
  11.        *(DWORD*)&pDirApi[3]=(DWORD)(newDirApi-pDirApi)-7;
  12.      break;
  13.      case DETOUR_TYPE_NOP_NOP_JMP:
  14.        pDirApi[0]=0x90;
  15.        pDirApi[1]=0x90;
  16.        pDirApi[2]=0xE9;
  17.        *(DWORD*)&pDirApi[3]=(DWORD)(newDirApi-pDirApi)-7;
  18.      break;
  19.      case DETOUR_TYPE_PUSH_EAX_RET:
  20.        pDirApi[0]=0xB8;
  21.        *(DWORD*)&pDirApi[1]=(DWORD)newDirApi;
  22.        pDirApi[5]=0x50;
  23.        pDirApi[6]=0xC3;
  24.      break;
  25.      case DETOUR_TYPE_NOP_PUSH_RET:
  26.        pDirApi[0]=0x90;
  27.        pDirApi[1]=0x68;
  28.        *(DWORD*)&pDirApi[2]=(DWORD)newDirApi;
  29.        pDirApi[6]=0xC3;
  30.      break;
  31.      case DETOUR_TYPE_JMP_EAX:
  32.        pDirApi[0]=0xB8;
  33.        *(DWORD*)&pDirApi[1]=(DWORD)newDirApi;
  34.        pDirApi[5]=0xFF;
  35.        pDirApi[6]=0xE0;
  36.      break;
  37.      case DETOUR_TYPE_JMP_JMP:
  38.        pDirApi[-5]=0xE9;
  39.        *(DWORD*)&pDirApi[-4]=(DWORD)(newDirApi-pDirApi);
  40.        pDirApi[0]=0xEB;
  41.        pDirApi[1]=0xF9;
  42.      break;
  43.      case DETOUR_TYPE_PUSH_RET:
  44.        pDirApi[0]=0x68;
  45.        *(DWORD*)&pDirApi[1]=(DWORD)newDirApi;
  46.        pDirApi[5]=0xC3;
  47.      break;
  48.      case DETOUR_TYPE_NOP_JMP:
  49.        pDirApi[0]=0x90;
  50.        pDirApi[1]=0xE9;
  51.        *(DWORD*)&pDirApi[2]=(DWORD)(newDirApi-pDirApi)-6;
  52.      break;
  53.      default://DETOUR_TYPE_JMP
  54.        pDirApi[0]=0xE9;
  55.        *(DWORD*)&pDirApi[1]=(DWORD)(newDirApi-pDirApi)-5;
  56.      break;

y las instrucciones ASM referentes a jmps:

Código
  1. EB cb JMP rel8 Jump short, relative, displacement relative to next instruction.
  2. E9 cw JMP rel16 Jump near, relative, displacement relative to next instruction.
  3. E9 cd JMP rel32 Jump near, relative, displacement relative to next instruction.
  4. FF /4 JMP r/m16 Jump near, absolute indirect, address given in r/m16.
  5. FF /4 JMP r/m32 Jump near, absolute indirect, address given in r/m32.
  6. EA cd JMP ptr16:16 Jump far, absolute, address given in operand.
  7. EA cp JMP ptr16:32 Jump far, absolute, address given in operand.
  8. FF /5 JMP m16:16 Jump far, absolute indirect, address given in m16:16.
  9. FF /5 JMP m16:32 Jump far, absolute indirect, address given in m16:32.

S2