17 votos

¿Cómo se establece (restaura) el atributo com.apple.quarantine?

Hay preguntas con buenas respuestas que explican cómo eliminar el atributo ampliado de cuarentena de com.apple.apple pero me preguntaba cómo se puede restaurar / volver a ponerlo en su sitio.

Ya lo intenté:

xattr -w com.apple.quarantine $VALUE /Applications/AnApp.app

pero aparentemente sin saber cuál es el valor del atributo esto no logra nada.

Supongo que se trata del valor del atributo, que tiene el siguiente formato:

com.apple.quarantine: 0061;53822fd4;Google\x20Chrome;C1022EC2-E1B2-4896-AF74-B68F4BF97779

Lo que quiero hacer es que el Guardián de la Puerta me pregunte de nuevo si quiero ejecutar esta aplicación o el archivo, o no. Restaurar el mismo comportamiento como si el archivo se acabara de descargar de Internet y se ejecutara por primera vez.

27voto

klanomath Puntos 19587

Puedes copiar un atributo existente de com.apple.quarantine de un archivo arbitrario a un archivo proxy y luego aplicarlo a otros archivos arbitrarios. Sin embargo, si abres ciertos tipos de archivos (por ejemplo, archivos .txt) el atributo de cuarentena será ignorado.

Ejemplo:

xattr -p com.apple.quarantine /Users/user/dnscrypt-osxclient-1.0.12.dmg > quarantine.attr
xattr -w com.apple.quarantine "`cat quarantine.attr`" test.command 

Esto aplicará los datos reunidos del .dmg al archivo .command - incluyendo la fecha de descarga y la aplicación de descarga del archivo dmg original. La fecha y aplicación de descarga original del .command no lo hará ser restaurado, sin embargo

Fuente: Usando xattr para establecer la propiedad de cuarentena de Mac OSX


Formato del atributo de cuarentena:

flag;date;app_name;UUID;
  1. al menos el 0001-0003 levanta el diálogo "¿Realmente quieres abrir este archivo...?", pero el 0062 no lo hace.
  2. fecha (en el sello de tiempo hexadecimal de Unix, al menos 00000000-1c000000 son fechas desconocidas, un fecha que funciona es 1d000000: 02 Jun 1985 05:47:44 GMT)
  3. app (cualquier nombre de app permitido)
  4. Un UUID relacionado con una descarga de archivos que se puede encontrar en /Users/user/Library/Preferences/com.apple.LaunchServices.QuarantineEventsV2 (obviamente facultativo)

Así que usando 0001;55555555;Klanomathiner; en el archivo proxy mencionado anteriormente y aplicándolo a un archivo (en el ejemplo test.command) se elevará:

enter image description here

o 0001;66666666;A Cyborg from the future;

enter image description here

Después de abrir el archivo, la primera "bandera" se fijará en 0041 y al reabrirlo no se levantará nada.


Con un poco de magia bash/SQL puede incluso recuperar el UUID original y la fecha de descarga/app preguntando por el nombre del archivo en la base de datos sqlite - que el archivo com.apple.LaunchServices.QuarantineEventsV2 representa - y restaurar el atributo de cuarentena original. Pero soy demasiado perezoso para redactar esto ahora. Alguien más ya ha hecho trabajos similares o relacionados:

Lea com.apple.quarantine

/usr/bin/xattr -p com.apple.quarantine "${file}"

Poner en cuarentena com.apple.apple

application="cURL"
date=$(printf %x $(date +%s))
uuid=$(/usr/bin/uuidgen)
/usr/bin/xattr -w com.apple.quarantine "0002;${date};${application};${uuid}" "${file}"

Insertar UUID en la base de datos

download_url="http://example.com/file.zip"
date=$(($(date +%s) - 978307200))
/usr/bin/sqlite3 ~/Library/Preferences/com.apple.LaunchServices.QuarantineEventsV2 "INSERT INTO \"LSQuarantineEvent\" VALUES('${uuid}',${date},NULL,'${application}','${download_url}',NULL,NULL,0,NULL,'${url}',NULL);"

Compruebe si existe un UUID en la base de datos

/usr/bin/sqlite3 ~/Library/Preferences/com.apple.LaunchServices.QuarantineEventsV2 "SELECT * FROM LSQuarantineEvent WHERE LSQuarantineEventIdentifier == '${uuid}'"

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X