Google EL TIPO DE INFORMATICA

lunes, 24 de marzo de 2014

Crear un Access Point (Rogue AP) en Mac OS X y Captura de Datos con SSLStrip

En esta entrada veremos como crear un punto de acceso a Internet falso (o Rogue AP) en Mac OS Mavericks, usando la herramienta nativa de este sistema operativo para compartir Internet para crear una red Inalámbrica, configuraremos el Firewall del sistema para redireccionar todo el trafico que salga a traves de esta conexión a un puerto especifico en el equipo donde tendremos entonces la herramienta SSLStrip capturando el trafico. La función principal de SSLStrip no es solo la captura del trafico, sino mas bien permitir capturar datos en forma plana que generalmente se enviarían encriptados con SSL. Esto lo hace de la siguiente manera, cuando en una pagina, por ejemplo Facebook, hacemos clic en "Login" o "Acceder", se gestiona una sesión segura usando SSL (HTTPS) antes de enviar los datos digitados, lo que hace SSLStrip es que captura esa solicitud y evita que se establezca la sesión SSL, por lo que la conexión se mantiene en texto plano. Claro esto no siempre funciona, algunos sitios no permiten hacer el login si la conexión no es segura. La idea es mostrar porque debemos tener cuidado al conectarnos a una red Wireless abierta que encontremos, bien, habiendo dicho esto podemos empezar.

Creando la Red Wireless

Lo primero que haremos sera crear la red inalámbrica a la que queremos que las personas se conecten. Para esto compartiremos una conexión a Internet, esta conexión puede ser, por ejemplo, via un cable de red, o como en mi caso, puede ser a traves de un telefono celular via USB. Para esto iremos a System Preference --> Sharing. Veremos la siguiente ventana:

Comparitr Conexion Internet

Antes de activar la opción "Internet Sharing" de la sección de la izquierda debemos indicar cual sera la conexión que compartiremos y a traves de que medio la compartiremos. En nuestro caso, yo estoy compartiendo la conexión a Internet del Iphone a traves del cable USB, y la compartire a traves de la tarjeta Wi-Fi. Luego haremos clic en el boton "Wi-Fi Options..." para configurar el nombre de la red inalámbrica que crearemos y el password, como lo que queremos es hacer una red llamativa para que las personas se conecten, elegiremos como nombre "OPEN_INTERNET" o "OPEN_WIFI" y la configuraremos sin password, como se muestra en la próxima ventana:


Hacemos clic en OK y volveremos a la ventana anterior, donde seleccionaremos el recuadro "Internet Sharing" para habilitar esta conexión, con esto ya estaremos compartiendo nuestra conexión a Internet y regalando Internet al publico. Necesitamos ahora ver la interface que se creo para esta conexión Wireless y ver la dirección IP que tiene esta y que asignara a los usuarios, para esto ejecutamos en el comando "ifconfig" en una ventana Terminal, veremos algo como esto:



Como pueden ver, tengo ahora una interface llamada "bridge100", con la dirección IP 192.168.2.1, las computadoras que se conecten a esta red inalámbrica se le asignaran IP's en este mismo rango. Esta información la usaremos mas adelante cuando estemos configurando el Firewall.

Configuración Firewall Mac OS

Bien, en este punto ya debemos tener personas conectadas a nuestra red, ahora necesitaremos redirigir todo el trafico HTTP o HTTPS que salga por esta conexión hacia el puerto en que estará escuchando SSLStrip. Para esto configuraremos algunas reglas en el Firewall de Mac OS, que a partir de Lion se maneja con el con pf, este manejador de paquetes viene de FreeBSD. La configuración de pf se encuentra en /etc/pf.conf,  pero las reglas del Firewall no se encuentran directamente en este archivo,  sino que que indican aqui los archivos que contienen las reglas. A estos archivos se les llama "Anclas" (anchor en ingles). Así que lo que haremos sera crear nuestro propio archivo ancla donde definiremos las reglas necesarias, y luego haremos referencia a ellos en pf.conf. Estos archivos "ancla" se crean generalmente en "/etc/pf.anchors/", el archivo que crearemos lo llamaremos "rdr.proxy" y lo crearemos ejecutando "sudo vim /etc/pf.anchors/rdr.proxy", el contenido de este archivo sera el siguiente:


rdr pass on bridge100 inet proto tcp from any to any port 80 -> 192.168.2.1 port 8080
rdr pass on bridge100 inet proto tcp from any to any port 443 -> 192.168.2.1 port 8080

pass in log quick on bridge100 proto { tcp, udp } from any to 192.168.2.1 port 8080 keep state
pass in log quick on bridge100 proto { udp } from any to 192.168.2.1 port 53 keep state
pass in log quick on bridge100 proto { icmp } from any to any keep state
pass out inet proto tcp from any to any keep state
pass out inet proto udp from any to any keep state

Con las primeras 2 reglas configuramos el "Redirect" del trafico hacia el puerto 8080, como ven indicamos a cual interface se aplicaran estas reglas que en este caso es a la interface que se creo cuando activamos el "Internet Sharing", que como vimos fue la interface "bridge100".  Las siguientes reglas lo que permiten es el acceso o abrir el acceso al puerto 8080 donde esperara SSLStrip por el trafico de las personas que usen esta red, tambien permitimos el acceso al puerto UDP 53 para que los equipos puedan hacer consultas DNS. Luego que hayamos copiado estas lineas en el archivo podemos guardarlo e irnos al archivo /etc/pf.conf, donde agregaremos las siguientes lineas:

rdr-anchor "rdr.proxy"
load anchor "rdr.proxy" from "/etc/pf.anchors/rdr.proxy"

Como ven primero definimos el archivo con la linea "rdr-anchor..." y luego le indicamos cargue este archivo y le indicamos la ubicación donde se encuentra. Al hacer estas modificaciones, el archivo /etc/pf.conf se veria de esta manera:


Archivo pf.conf

El Firewall del Mac OS  (pf) viene desactivado por defecto, así que aun no estarán habilitadas las reglas que acabamos de agregar, para esto tendremos que ejecutar el siguiente comando:

#sudo pfctl -ef /etc/pf.conf

Cuando ejecutemos este comando, habremos cargado las reglas y activado pf en el sistema. Hay que tener en cuenta que al habilitar esto, todo el trafico de las personas que esten conectadas a la red inalámbrica que acabamos de crear se estará redireccionando al puerto 8080, y como aun no tenemos SSLStrip corriendo en el sistema no podrán navegar. Así que seria mejor ejecutarlo cuando ya este instalado y corriendo SSLStrip, así que pasemos al siguiente paso.

Instalando SSLStrip 

Ya entramos en la ultima parte, ahora solo nos resta instalar SSLStrip para hacer la captura de los datos. Lo pueden descargar desde este link. Esta herramienta esta desarrollada en Python, pero para ejecutarla en Mac OS sera necesario instalar algunos componentes. Esto podemos instalarlo usando MacPorts, que es un manejador de paquetes similar a APT-GET en Linux. Si no lo tienen pueden descargarlo desde este link y seguir las instrucciones (su instalación es sencilla). Una vez lo tengan instalado solo debemos ejecutar:

$ sudo port install py-twisted-web2
$ sudo port install py-openssl

SSLStrip requiere Python 2.5 o superior, si tienen varias versiones de Python en el sistema, es posible que necesiten ejecutar los comandos anteriores indicando la version al lado de "py", por ejemplo "sudo port install py25-twisted-web", una vez instalados estos componentes, nos movemos a la carpeta donde descargamos SSLStrip y entonces ejecutamos:

$ sudo python sslstrip.py -l 8080 -w captura.log

Con esto iniciamos sslstrip escuchando en el puerto 8080 (con la opción -l) y le indicamos que todo lo que capture lo guarde a un archivo llamado "captura.log". Cuando ejecutemos este archivo sslstrip se mantendrá corriendo y capturando hasta que lo cancelemos, se vera como se muestra a continuación:

Ejecutando SSLStrip.py

Ahora solo tenemos que esperar que las personas que esten cerca se conecten a nuestro AP y SSLStrip empezara a capturar sus logins y passwords. Como los datos se van copiando al archivo "captura.lo", podemos abrir otra ventana de Terminal y ejecutar "tail -f captura.log" para ir viendo los datos según van siendo capturados. Entonces, cuando una persona se conecte, por ejemplo a Facebook, veremos los datos que introduce aparecer en el archivo captura.log como se muestra a continuación:



Como ven, el incauto conectado a mi red intento conectarse a facebook, y como vemos SSLStrip nos trajo el username que utilizo (usuario-conectado) y el password (misuperpassword01). A parte de SSLStrip se puede utilizar un proxy, como Burp Proxy (del cual les hable en este post) y así se podría incluso tener mas control sobre el trafico de las personas que se conecten. Bueno, hasta aqui este post, espero que les sea de utilidad y lo piensen mejor la próxima vez que vayan a conectarse a una red inalámbrica publica o que no sea de confianza (... y aunque sea de confianza).

jueves, 6 de marzo de 2014

IPSec Site-to-Site VPN entre WatchGuard XTM y Linux OpenSwan

Supongamos que tenemos que conectar 2 oficinas a traves una conexión VPN, en una de las oficinas tenemos un equipo WatchGuard XTM como Gateway y en la otra tenemos un equipo Linux con OpenSwan (que es una implementación de IPSec para Linux). Podemos hacer la conexión VPN entre estos 2 equipos (y la red detras de ellos) usando IPSec, solo tenemos que asegurarnos de configurar correctamente los parámetros de  IPsec para cada fase, de manera que en la negociación de los algoritmos criptograficos a utilizar ambos equipos puedan elegir protocolos compatibles. Hay que tener en cuenta que basicamente la conexión IPSec en modo tunel (que es el modo a utilizar cuando queremos crear un VPN) se realizara en 2 fases: en la primera fase (llamada "Main Mode") los 2 puntos se autenticaran uno a otro mediante una clave compartida  o certificados y negociaran los algoritmos de encriptacion a utilizar durante el intercambio de esta clave, y en la segunda fase se negociara la politica IPSec que utilizaran, por ejemplo, el tipo de trafico y las direcciones o segmentos de red en ambos lados que utilizaran el tunel. Esta es una explicación bastante resumida de todo lo que hace IPSec (a mi entender), si quieren entender mejor todo lo que hace IPSec les recomiendo visitar este link.

Para la autenticación entre los puntos de nuestro VPN utilizaremos una clave compartida o "Shared Key", e identificaremos cada punto por la IP externa de cada uno. Vamos a llamar al punto donde esta el WatchGuard XTM el punto A, y su IP sera la 6.6.6.6, la red que estará detrás de este equipo sera la 192.168.1.0/24. El punto donde esta el equipo Linux con OpenSwan sera el punto B y su IP sera 7.7.7.7, la red detras de este sera 192.168.2.0/24. La clave compartida que utilizaremos para autenticarlos sera "MiClaveVpn". Así que el escenario se veria mas o menos de esta forma:

Dagrama Conexion VPN


Como ven, incluyo en el diagrama los routers instalados por el suplidor de Internet en ambos lados, mas adelante veran porque. Ya que tenemos claro el escenario, vamos a empezar la configuración desde el equipo WatchGuard, así que abriremos el "Policy Manager", en el menu superior hacemos clic en "VPN" y seleccionamos "Brach Office Gateways...":

WatchGuard VPN

En la ventana de "Gateways" que abrira, haremos clic en "Add" y nos abrira la siguiente ventana. En esta pondremos el nombre para esta conexión, para este ejemplo le puse "VPN01", insertaremos tambien aqui la clave compartida que definimos para esta conexión (MiClaveVPN). Luego haremos clic en el boton "Add" mostrado mas abajo:


En esta próxima ventana (mostrada en el siguiente grafico) insertaremos la información sobre los dos gateways, como la IP del punto remoto (OpenSwan) y la interface del WachGuard que utilizaremos para esta conexión. En la primera sección de esta ventana (Local Gateway) definiremos el ID de este punto para el tunel, que sera el nombre con el que se identificara el WatchGuard con el punto remoto. Seleccionamos la opción "By Domain Information" y hacemos clic en el boton "Configure" que se encuentra justo al lado, esto nos abrira una nueva ventana donde seleccionaremos "Domain Name", escribiremos al lado la IP con la cual llegaremos al otro punto (para el caso de este ejemplo seria "6.6.6.6") y hacemos clic en OK. Volveremos la ventana anterior donde seleccionaremos la interface externa del WatchGuard correspondiente a la IP con la cual haremos la conexión VPN (en el caso de este ejemplo, la interface externa utilizada se llama "Internet"). En la sección de mas abajo (Remote Gateway) indicaremos la IP del punto remoto, seleccionaremos "Static IP Address" e insertaremos la IP del punto remoto (para este caso 7.7.7.7). Luego al igual que en "Local Gateway" y seleccionaremos la opción "By Domain Information" y haremos clic en "Configure" para escribir en "Domain Name" la IP remota (7.7.7.7), este sera el nombre con el que WatchGuard esperara que se identifique el equipo Linux. Al final la ventana se veria de esta manera:

Configuracion Gateways WatchGuard

Hacemos clic en "Ok" y volveremos a la ventana inicial donde escribimos la clave compartida. En esta ventana haremos clic en el Tab "Phase 1 Settings". Desactivaremos la opción "Dead Peer Detection", se vera entonces de esta manera:

Configuracion VPN Gateways WatchGuard

Hacemos clic en "OK" y con esto hemos configurado los Gateways para esta conexión, ahora definiremos el "Tunel" que usara estos Gateways, donde indicaremos las redes detrás de cada Gateway y la dirección del trafico, o sea, si el trafico sera en una sola dirección o en ambas. Para este caso, y quizas para la mayoría, sera en ambas direcciones (bidireccional).  Hacemos clic nuevamente en "VPN" del "Policy Manager", seleccionamos "Brach Office Tunnel..." y luego hacemos clic en "Add". Debemos ponerle un nombre a esta Tunel un nombre, podemos nombrarlo "TUNEL-01", debajo seleccionaremos el Gateway que utilizaremos, que es el que creamos anteriormente "VPN01". Luego hacemos clic en el boton "Add" para indicar cuales seran las redes que transitaran por el tunel. En la local agregaremos "192.168.1.0/24" y en la remota "192.168.2.0/24", nos aseguramos que en la sección "Direction" este indicado "<==>", que indica que el trafico sera bireccional, y luego hacemos clic en OK. Luego hacemos clic en el tab "Phase 2 Settings", en la sección "IPSec Proposals" veremos agregado "ESP-AES-SHA1" por defecto. Agregaremos a esta lista dos mas haciendo clic en "Add", estas seran "ESP-3DES-SHA1" y "ESP-DES-SHA1". Hacemos clic en "OK" y ya tenemos configurado el Tunel para nuestra conexión, al final la ventana del tunel que creamos se veria de esta manera:


Ahora podemos guardar y aplicar la configuración en el WatchGuard y pasar entonces al equipo Linux con Openswan. Primero vamos a asegurarnos que IPTables este configurado adecuadamente, si necesitan un repaso de IPTables les recomiendo que visiten este post. Debemos tener una regla INPUT para la interface externa que permita el trafico UDP a los puertos 4500 y 500 desde la IP 6.6.6.6 (damos por sentado que ya tiene OpenSwan instalado). Si usan una regla "MASQUERADE" asignar la IP externa del equipo al trafico saliente a Internet, o si usan "SNAT", tendrán que hacer una excepcion para que el trafico que se dirija a la red remota con la cual nos conectaremos via VPN no vaya a ser afectada por el NAT configurado por estas reglas, la regla seria de esta manera:

iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -d ! 192.168.1.0/24 -j SNAT --to-source 7.7.7.7

Con esto le decimos a IPTables que enmascare cualquier trafico saliente de la red con excepción del trafico que vaya dirigido a la red remota. Basicamente esto es lo necesario en IPTables, vamos ahora a la configuración de OpenSwan. El archivo de configuración se encuentra en /etc/ipsec.conf, aqui configuraremos los parámetros de IPSec, como los puntos del VPN, las redes a enlazar, etc. el contenido de este archivo para este ejemplo seria el siguiente:

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
# basic configuration
config setup
        # NAT-TRAVERSAL support, see README.NAT-Traversal
        nat_traversal=yes
        protostack=netkey
        nhelpers=0
        uniqueids=yes

# Add connections here
conn $default
        keyingtries=3

conn vpn-watchguard
        authby=secret
        left=6.6.6.6
        leftsubnet=192.168.1.0/24 
        leftnexthop=6.6.6.5
        leftid=@6.6.6.6
        right=7.7.7.7
        rightid=@7.7.7.7
        rightnexthop=%defaultroute
        rightsubnet=192.168.2.0/24
        type=tunnel
        auto=start
        pfs=no

#Disable Opportunistic Encryption
include /etc/ipsec.d/examples/no_oe.conf

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------          

Todo lo que es "left" se refiere al otro lado de la conexión VPN. La sección "leftnexthop" que señalo en negrita de la configuración anterior, indica el proximo salto antes de llegar al equipo al equipo que manejara el VPN del otro lado del tunel (en este caso el WatchGuard), generalmente habra un router delante que es quien le da la conexión a Internet, como se muestra en el diagrama de mas arriba. El resto de esta configuración es bien descriptiva así que podemos continuar. El siguiente paso sera configurar el "Share Key" o clave compartida para esta conexión VPN, para esto editaremos el archivo "/etc/ipsec.conf" y agregaremos la siguiente linea:


@7.7.7.7 @6.6.6.6 : PSK "MiClaveVPN"

Con esto ya tenemos nuestro OpenSwan configurado para la conexión (mucho mas rapido verda?). Antes de iniciar el tunel, vamos a verificar que esto este bien con Openswan, ejecutaremos el comando "ipsec auto verify" y si todo esta bien deberia devolvernos algo como esto:

Salida del comando ipsec verify

Ahora para iniciar nuestro tunel podemos ejecutar desde este equipo el siguiente comando:


#ipsec auto --start vpn-watchguard 

Ya debe estar arriba nuestro VPN entre WatchGuard y OpenSwan, podemos verificarlo ejecutando "ipsec auto --status", aparecerán varias lineas, pero las que buscaremos serán las siguientes:


Y con esto ya tenemos nuestras redes conectadas via VPN a traves de dos equipos diferentes usando el standard IPSec. En caso de que les de algún error les recomiendo hacer el debugging desde Linux, pueden buscar en el archivo /var/log/auth.log ya que en este archivo Openswan va registrando cada actividad y es mas facil seguir cualquier error. 

lunes, 24 de febrero de 2014

Password por Defecto en Modems ADSL Huawei ADSL HG532e

En estos dias estaba en una oficina configurando el acceso a Internet y una nueva linea ADSL que se habia contratado. Necesitaba hacer algunos cambios a la configuración del Router y tenia que acceder al Manager para hacerlos. Como les habia comentado anteriormente, mucho de estos Routers/Modems ADSL venian con un usuario/password por defecto, desde un tiempo hacia aca lo que estan haciendo es que usan el serial del equipo, la MAC Address o la contraseña WEP/WAP del Wireless como clave para acceder a la administración. El Modem que instalo el suplidor fue un Huawei HG532e, procedi a conectarme al menu para hacer los cambios necesarios, generalmente la IP por defecto de estos equipos 10.0.0.1:

Ventana de Login Router Huawei

Para el caso de este Modem, el usuario/password es el mac address, lo que en cierta forma es una ventaja sobre el metodo antiguo de usar "admin/admin", ya que por lo menos para poder acceder al menu es necesario tener acceso fisico al equipo y evita que cualquiera a traves de Internet pueda entrar a nuestro Router. Asi que inserte el Mac Address y pude entrar sin problemas. Una vez habia hecho los cambios que necesitaba, me pase por la seccion "Mantenimiento" del menu para ver que opciones me presentaba y me llamo la atencion que en la parte de "cuentas de usuario" habia un "Drop-down" menu, o sea, que aparentemente habia mas de una cuenta creada en el router, aunque lo habia acabado de sacar de su caja. Al hacer clic encima de este elemento veo que efectivamente habia una cuenta "user" creada a parte de la cuenta con la que me habia logueado, como se ve a continuacion:

Lista Usuarios Modem Huawei

Al ver este usuario, me imagine el password que debía acompañarlo, así que cerre la sesión, intente logearme con ese usuario y al primer intento pude acceder al menu y con los mismos privilegios administrativos del usuario del Mac Address. Y si, el password era igual que el username: "user". Lo primero que hice fue entrar nuevamente con el usuario del Mac Address y eliminar esta cuenta. Luego senti curiosidad por ver si este usuario realmente venia en todos los modems de este modelo o si solo me habia caído a mi la dicha, así que revise la IP externa que tenia asignada el router en ese momento para hacer una búsqueda en todo ese rango a ver si encontraba modems de ese modelo y probar el usuario "user". Para esto utilizaria Nmap, pero antes tenia que ver como el Modem se identificaba y usar esa información para identificar los demás, así que ejecute el siguiente comando:

salida comando Nmap

Como ven, realice un escaneo a la IP del Modem con Nmap a los puertos 80 y 23 (HTTP y Telnet) con la opción "-sV" para que me muestre información de la version del servicio, en este caso el servicio Telnet en este Modem se identifica con "Huawei HG655b DSL router telnetd", así que ahora lo que resta es hacer un escaneo en un determinado rango de IP publicas y filtrar la salida para que nos muestre las que devuelvan esta linea. Utilice nuevamente Nmap pero ahora apuntando solo al puerto 23 y agregue tambien la opción "-oG - " para cambiar la forma en que se presentan los resultados y así poder filtrar mejor con "Grep" la salida, tambien amplie el rango del scan para que incluya las otras IP's vecinas del Modem en ese momento, este fue el resultado de la búsqueda de las primeras 100 IP's en ese rango:

Resultado Scan Nmap

Como ven solo entre las primeras 100 IP's aparecieron varios routers de este mismo modelo, es posible que incluso hayan mas y solo estaban apagados en ese momento. Lo interesante es que fui probando cada uno de estos Modems y efectivamente, TODOS los que encontre en este rango (y otros mas) tenian el usuario "user" con el mismo password!! Y bueno, que podría hacer alguien con el password de nuestro router ADSL? basicamente podrían controlar nuestro trafico en Internet, podrían alterar la configuración DNS ya que generalmente el mismo Modem hace el papel de servidor DNS para las computadoras que están detrás de el, tambien podrían crear reglas NAT que apunten a las computadoras detrás del router y exponerlas a Internet para realizar ataques sobre ellas y lograr acceso directo a estas.

En resumen, si tienen instalado uno de estos Routers/Modems en sus casas u oficinas, revisen la configuración en caso de que tengan este usuario creado y eliminenlo. Es posible que en otros modelos pase lo mismo, hasta ahora solo he probado este, asi que revisen su modem aunque no sea este modelo. Bueno, espero que les haya sido de utilidad, y esta información les haya llegado antes de que alguien mas entre en sus routers.

lunes, 17 de febrero de 2014

Shortcut para Aplicaciones Wine (Windows) en Mac OS X

En el Post anterior vimos como instalar aplicaciones Windows en Mac OS utilizando Wine, pero como vimos al final estas aplicaciones hay que invocarlas via Terminal (la ventana de comandos), lo cual puede ser un poco incomodo. Así que ahora veremos como crear un acceso directo (o Louncher) para la aplicación y colocarla en el Dock. Para esto primero tendremos que crear un pequeño script y también crear un icono para asignarle al script. Los iconos en Mac OS X no son simplemente un gráfico, son realmente varios archivos de la misma imagen en diferentes tamaños y resoluciones. Esto así para poder hacer el efecto de magnificacion en el Dock. Para crear el icono utilizaremos un aplicación que se encargara de crear las diferentes versiones del grafico. Bien, continuaremos con el ejemplo del post anterior con UltraVNC y vamos a crear el Luncher para esta aplicación. Para esto utilizaremos el AppleScript Editor que se encuentra en Utilities:

Ventana de AppleScript Editor

En caso de que no les haya abierto la ventana anterior al ejecutar AppleScript Editor, solo tienen que hacer clic en File-->New (o COMAND+N). En esta ventana entonces pegamos el siguiente código (extraído del site de Wine):

----------------------------------------------------------------------------------------------------------------------------------
on run
   
   --edit this to be the correct location and file to run (typically only edit after the "drive_c")
   set toRun to "$WINEPREFIX/drive_c/Program Files/UltraVNC/vncviewer.exe"
   --edit winePrefix if you are not using the default prefix
   set winePrefix to "$HOME/.wine"
   --edit wineLocation if your wine install is not the default location
   set wineLocation to "/usr/local/bin"
   --edit dyldFallbackLibraryPath to your X11 lib folder, this one is set for XQuartz on 10.6+
   set dyldFallbackLibraryPath to "/opt/X11/lib"

   -------------------------------------------------------
   --DO NOT EDIT ANYTHING BELOW THIS LINE
   -------------------------------------------------------
   set toRunPath to do shell script "WINEPREFIX=\"" & winePrefix & "\"; TEMPVAR=\"" & toRun & "\"; echo \"${TEMPVAR%/*}\""
   set toRunFile to do shell script "WINEPREFIX=\"" & winePrefix & "\"; TEMPVAR=\"" & toRun & "\"; TEMPVAR2=\"" & toRunPath & "\"; echo \"${TEMPVAR#$TEMPVAR2/}\""
   do shell script "PATH=\"" & wineLocation & ":$PATH\"; export WINEPREFIX=\"" & winePrefix & "\"; export DYLD_FALLBACK_LIBRARY_PATH=\"" & dyldFallbackLibraryPath & "\"; cd \"" & toRunPath & "\"; wine \"" & toRunFile & "\" > /dev/null 2>&1 &"
   
end run
----------------------------------------------------------------------------------------------------------------------------------

Básicamente en el script anterior solo tendremos que modificar la segunda linea (que empieza con "set toRun..") que es donde indicaremos la ruta donde esta el ejecutable de nuestro programa. La variable $WINEPREFIX al principio de esta linea indica la ruta default donde Wine instala las aplicaciones, esto es en la carpeta ".wine" dentro del profile del usuario que instalo la aplicación. Para el caso de nuestro ejemplo esta ruta sera "Program Files/UltraVNC/vncviewer.exe". Para probar que todo este bien con el código y que hayamos indicado correctamente la ruta al ejecutable, podemos probar que la aplicación abra haciendo clic en "Run", si todo esta bien, la aplicación debe ejecutarse como si la hubiésemos invocado desde la linea de comandos:

Ventana de AppleScript Editor

Si luego de un par de segundos no se ha ejecutado la aplicación, deben entonces revisar que hayan indicado correctamente la ruta al ejecutable, si se ejecuto sin problemas podemos entonces continuar y salvar el script. Para esto hacemos clic en File-->Export , nos traerá la siguiente ventana donde indicaremos que salvaremos el script como una aplicación e indicaremos en el nombre que le daremos (para este ejemplo lo nombre "UltraVNC" y lo salvare en la carpeta "Applications").

Salvar Script

Ya tenemos el louncher de nuestra aplicación creado, al hacer doble clic sobre el podremos ejecutar nuestra aplicación. Pero como habrán visto, se creo con el icono default de AppleScript, asi que ahora procederemos a crear un icono para nuestra aplicacion y agregarselo a nuestro louncher. Los iconos en Mac OS tienen la extensión "icns", pero para asignarle un icono al louncher no bastara con solo asignar esta extensión a un grafico y agregarlo, como les mencione al inicio este tipo de archivo es mas bien una colección de gráficos que tiene diferentes versiones de la imagen en diferentes tamañosAsí que para crear nuestro icono utilizaremos la aplicación "FastIcns" la cual pueden descargar en este link. Con esta aplicación solo tendremos que buscar el icono de la aplicación en Google, ya sea en PNG o JPG, para seguir con el ejemplo buscaremos el icono de UltraVNC en Google y lo descargaremos. Cuando ejecuten FastIcns verán un pequeno cubo en la pantalla, deben arrastrar ahi dentro el icono de la aplicación que descargaron. Luego salvar el archivo haciendo clic en "File-->Save As" y salvarlo como ICNS, como se muestra a continuación:

Crear icono con FastICNS

Una vez hemos salvado el archivo solo tenemos que ir al louncher, hacer clic encima y luego presionar la tecla "Command + I", o hacer clic en "File -->Get Info" y nos abrira la ventana de propiedades del archivo. Hacemos clic encima del icono generico que tiene el archivo (verán que se sombreara en azul) y arrastramos a esta area el archivo ICNS que acabamos de crear, con esto se le asignara el icono al louncher.

Asignar icono al Louncher

Y ya con esto tenemos nuestro louncher a la aplicación que instalamos con Wine que podemos ejecutar como cualquier otra haciendo solo un clic encima de su icono. Solo nos resta arrastrar el icono del louncher al Dock y lo tendremos como cualquier otra aplicación:

Icono de UltraVNC en Dock



lunes, 10 de febrero de 2014

Corriendo Aplicaciones de Windows en Mac OS X con Wine

Desde hace unos meses he estado trabajando con una MacBook Pro, la había estado utilizando como segunda computadora aprovechando la base Unix del sistema, así utilizaba algunas herramientas en ella. Hace poco decidí probar migrarme por completo a esta y utilizarla en el día a día, pero necesitaría buscar la forma de correr algunas aplicaciones que uso a diario en Windows, cosas sencillas como UltraVNC (si, se que hay versiones de VNC nativas para OS X, pero la versión que uso en el trabajo es UltraVNC y autenticando con Active Directory) entre otras mas, así que sobre esto les voy a hablar en este Post. Para correr aplicaciones Windows en Mac OS usaremos el ya conocido Wine que se usa en Linux para los mismos fines, y para instalar Wine, usaremos Homebrew, que si no lo han utilizado antes, verán que les sera de mucha utilidad.

Homebrew es un manejador de paquetes, es el "apt-get" o "yast" para Mac (o uno de ellos, también esta MacPorts) Con homebrew podemos instalar facilmente herramientas open-source sin tener que preocuparnos por sus dependencias, ya que Homebrew se encargara de gestionarlas e instalarlas. Para instalar Homebrew necesitaran primero instalar Xcode, pueden descargarlo desde el App Store. Una vez hayan instalado Xcode solo necesitan ejecutar la siguiente linea en una ventana de Terminal:

$ ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"

Luego que haya concluido la instalación, ejecutamos el siguiente comando para confirmar que todo ande bien con Brew y sus requisitos, en caso de que haya algún problema o haga falta algo, el nos lo hará saber. 

$ brew doctor

Este comando nos hará saber cualquier cosa que haya que corregir, si todo salió bien, podremos continuar con la instalación de Wine. Ya que tenemos Homebrew, la instalación de Wine es bastante sencilla. En una ventana de Terminal ejecutamos el siguiente comando:

$ brew install wine winetricks

Como sucede con otros gestores de paquetes como 'apt-get', podemos indicar varias aplicaciones a instalar, en este caso a parte de WINE instalaremos tambien WINETRICKS. Winetricks nos permitira instalar algunos componentes y librerias (DLL's) requeridas por algunas aplicaciones, lo podremos utilizar para instalar, por ejemplo, .NET Framework. Una vez ejecutemos el comando anterior, Homebrew se encargara de descargar wine y sus dependencias y los compilara, esto se tomara unos minutos. Cuando haya terminado este proceso ya tendremos Wine instalado y podemos pasar a instalar la aplicación Windows que queremos ejecutar. A esta altura, solo necesitamos la instalación del programa que queremos ejecutar en nuestra Mac. Usaremos como ejemplo la aplicación que les mencione al inicio, UltraVNC. Lo descargamos de esta pagina y guardamos la instalación en cualquier carpeta, por ejemplo en 'Downloads'. Abrimos nuevamente una Terminal, nos movemos a la carpeta donde tenemos la instalación del programa y ejecutamos el siguiente comando:

$ wine UltraVNC_1.0.9.6.1_Setup.exe

Si todo ha salido bien, veremos la siguiente ventana:

Instalacion VNC

De aquí en adelante solo tenemos que hacer como en cualquier instalación en Windows, presionar "Ok" y luego Next, Next, Next. Los programas que instala wine se ubican por defecto en:

 "/Users/usuario/.wine/drive_c/Program Files/Aplicacion"

Donde "usuario" es el home folder del usuario con el estamos logeados y ejecutamos wine, y "Aplicación" es el folder que creo la aplicación que instalamos, para el caso de este ejemplo esta carpeta es "UltraVNC". Así que para abrir nuestra aplicación ejecutaremos el comando:

 $ wine /Users/usuario/.wine/drive_c/Program \Files\UltraVNC/vncviewer.exe

Entonces abrirá nuestra aplicación:

UltraVNC

Y ya tenemos nuestra aplicación corriendo en Mac OS 10. Pero como seguramente están pensando, no resulta cómodo ejecutar la aplicación con esta linea de comando cada vez que necesitemos la aplicación, así que en el próximo post veremos como crear un acceso directo para la aplicación y crearle también su icono de acceso para el Dock, mientras tanto vayan instalando sus aplicaciones.

Crear Shortcuts Para Aplicaciones Wine en Mac OS X