AppleScript es un lenguaje de programación desarrollado por
Apple para automatizar tareas en
macOS y en aplicaciones de Apple (y compatibles de terceros). Con
AppleScript, los usuarios pueden crear
scripts para automatizar tareas comunes como abrir aplicaciones, enviar correos electrónicos o modificar documentos de texto. Y también le puedes sacar partido para hacer algo de
macOS Hacking.
Figura 1: macOS Hacking - Cómo automatizar el envío de iMessages con AppleScriptImagen Dall-e 2 "happy hacker in Van Gogh style" Lo que vamos a ver hoy difiere un poco del trabajo que hicimos con
AppScrapping iMessages, donde lo que usamos es un modelo para
APIficar al app de iMessages para poder utilizarla desde
scripts de
pentesting, como por ejemplo para saber si un número de teléfono estaba asociado a una cuenta de
iMessages o no.
En el ejemplo de hoy, para interactuar con las distintas partes del sistema y las aplicaciones existen los llamados diccionarios. Los diccionarios son documentos especiales que contienen información sobre la sintaxis, los comandos y los objetos de una aplicación específica. Al utilizar estos diccionarios en conjunto con el editor de scripts de AppleScript, los desarrolladores pueden obtener información detallada sobre cómo interactuar con una aplicación en particular mediante scripts.
Los diccionarios de las aplicaciones son una herramienta muy valiosa para los desarrolladores ya que les proporciona información sobre los comandos y objetos disponibles para una aplicación específica. Esto es especialmente útil para aquellos que no están familiarizados con la estructura interna de una aplicación o que buscan documentación detallada sobre cómo utilizar una aplicación con
AppleScript.
Figura 4: Algunos diccionarios posibles en las aplicaciones instaladas en macOS
Los diccionarios de aplicaciones están compuestos por cuatro elementos principales: comandos, clases, propiedades y elementos.
- Los comandos: son acciones que se pueden realizar en una aplicación, como abrir una ventana o enviar un mensaje. Los comandos (se indican con una C dentro de un círculo azul) se pueden enviar a una aplicación mediante la sintaxis de "tell" de AppleScript.
- Las clases: (se representan con una C dentro de un cuadrado morado) son tipos de objetos en una aplicación, como una ventana o un mensaje. Las clases proporcionan información sobre los objetos con los que se puede trabajar y las propiedades y comandos disponibles para esos objetos.
- Las propiedades: (aparecen como una P dentro de un cuadrado morado) son características o valores de un objeto, como el título de una ventana o el contenido de un mensaje. Las propiedades se pueden leer y, en algunos casos, modificar.
- Los elementos: (una E dentro de un cuadrado amarillo) son objetos individuales dentro de una clase, como una ventana específica o un mensaje específico. Los elementos se pueden seleccionar y trabajar mediante AppleScript.
En definitiva, los diccionarios, junto con el editor de
scripts de
AppleScript y otros diccionarios del sistema, hacen que sea fácil automatizar tareas y trabajar con aplicaciones en
macOS.
Automatización de envío de iMessages con AppleScript
El diccionario de la aplicación de
Mensajes de
Apple para enviar
iMessages proporciona información sobre la sintaxis, los comandos y los objetos disponibles para trabajar con la aplicación de
Mensajes en
AppleScript. Con este diccionario, los desarrolladores pueden automatizar tareas como enviar y recibir mensajes, gestionar chats y contactos, y realizar otras acciones en la aplicación de
Mensajes.
Figura 5: Diccionario de la aplicación iMessage (que se usa también en iOS)
Para automatizar el envío de un mensaje a un usuario en particular con
AppleScript, se podrá usar el comando "
send" del objeto "
message" del diccionario de la aplicación de
Mensajes. El código sería algo similar a esto:
set messageBody to "Hola, ¿cómo estás?"
set recipient to "+1234567890"
tell application "Messages"
set theBuddy to buddy recipient
send messageBody to theBuddy
end tell
En este ejemplo, se establece el texto del mensaje como
"Hola, ¿cómo estás?" y el destinatario como un número de teléfono (también podría ser una cuenta de email registrada). Luego, el
script utiliza el comando "
tell" para especificar que se está trabajando con la aplicación de
Mensajes. Dentro del bloque "
tell", se establece una variable para el destinatario del mensaje utilizando el comando "
buddy", y, por último, se utiliza el comando "
send" para enviar el mensaje.
Hay que tener en cuenta que para enviar mensajes mediante este método es necesario que en el dispositivo se encuentre configurado el servicio de
iMessage y se haya iniciado sesión en la cuenta de
iMessage, ademas si el usuario a quien quieres mandar el mensaje no tiene configurado
iMessage o no tiene una conexión activa no podrás mandarle el mensaje a menos que uses un método diferente, por ejemplo,
SMS.
Integración con Python
Como ocurre con otros muchos proyectos, es posible trabajar conjuntamente con
AppleScripts y
Python. Para ello existen librerías como
py-applescript o
applescript.py que ayudan a realizar esta integración de manera sencilla. El siguiente ejemplo muestra el mismo código anterior pero adaptado a
Python:
Figura 7: Código en Python para usar AppleScript en iMessages
Antes de su ejecución se debe instalar la librería
applescript.py haciendo uso del comando
pip:
La variable
r almacena el resultado de la ejecución, pudiendo acceder a
r.code para obtener el código de salida (
0 si se ha ejecutado bien), r.out para obtener el texto de salida (si lo hubiera, por ejemplo, al utilizar un
AppleScript contra la terminal y lanzar un comando que muestre salida por pantalla), o r.error para obtener un mensaje de error en caso de que se produzca. Como puede verse, es bastante sencilla la integración con
Python aunque esto no quita que sea necesario saber como se construyen los
AppleScripts.
En definitiva, en
macOS hay distintas formas para automatizar acciones, como Automator, los nuevos Atajos del sistema o los mencionados
AppleScripts. Es cierto que para poder escribir
AppleScripts hay que tener un mayor conocimiento técnico, así como conocer el lenguaje, la sintaxis y el uso de
AppleScripts, pero también permite realizar acciones más complejas como la interacción con partes del sistema, aplicaciones nativas y aplicaciones de terceros compatibles.