cabeceras

Iniciado por XKC, 27 Junio 2017, 14:18 PM

0 Miembros y 1 Visitante están viendo este tema.

XKC

Hola a todos, estoy mirando cosillas por github y tengo dudas con algunas cosas.
Os dejo el link:
https://github.com/graniet/fsociety-ransomware-MrRobot/tree/master/source
Alguien me puede explicar este fragmento de codigo?

#if defined(WIN32) || defined(_WIN32) || defined(__WIN32) && !defined(_CYGWIN_) //Por que tantas comprobaciones, no valdria solo defined(win32)??
    #define WIN32_WINNT 0x0500 // Para que es esto???
    #include <windows.h>
#endif

Despues en ciertos pasos dentro del codigo hace

/*
* Estas comprobaciones las hace para poder compilar el codigo y ejecutarlo en una plataforma diferente a windows??
* Si es asi en la linea 21 del main.cpp hace esto:
*      char *folder = "/root/Bureau"; //¿es una ruta UNIX, no funcionara en windows?, me he perdido...
*/
#if defined(win32)
Hace alguna cosa..
#else
Otras funciones
#endif
Para poder atacar y vencer con seguridad, ataca donde ellos no puedan defenderse.
Para defenderte y resistir firme, defiéndete en donde ellos no atacarán.

MAFUS

Las primera comprobación es larga porqué debe preveer todas las distintas formas en que las APIs definen código para Windows y que no formen parte de Cygwin que recrea un entorno Linux dentro de windows.

El WIN32_WINNT es un símbolo para que las APIs activen, en durante la compilación condicional, ciertas funciones y tipos de datos.

Sobre la ruta que marcas sí, es una ruta *nix y no, no funciona con windows (pero sí bajo cygwin)

Lo último es la compilación condicional que compilará una cosa si está definido el símbolo win32 o el otro si no lo está (por ser otro S.O.)

XKC

Cita de: MAFUS en 27 Junio 2017, 14:37 PM
Las primera comprobación es larga porqué debe preveer todas las distintas formas en que las APIs definen código para Windows y que no formen parte de Cygwin que recrea un entorno Linux dentro de windows.

El WIN32_WINNT es un símbolo para que las APIs activen, en durante la compilación condicional, ciertas funciones y tipos de datos.

Sobre la ruta que marcas sí, es una ruta *nix y no, no funciona con windows (pero sí bajo cygwin)

Lo último es la compilación condicional que compilará una cosa si está definido el símbolo win32 o el otro si no lo está (por ser otro S.O.)
osea, que este codigo esta reparado para compilarse bajo cualquier entorno.
¿Si solo quisieras utilizarlo sobre windows bastaria con omitir todas las comprobaciones de las API ?
Otra cosa, como funciona esto sobre entornos windows si la ruta es *nix?
Gracias por tu respuesta.
Para poder atacar y vencer con seguridad, ataca donde ellos no puedan defenderse.
Para defenderte y resistir firme, defiéndete en donde ellos no atacarán.