Come impostare (ripristinare) l'attributo com.apple.quarantine?

5

Ci sono domande con buone risposte che spiegano come rimuovere l'attributo esteso com.apple.quarantine, ma mi stavo chiedendo come si ripristina / si reimposta?

Ho provato questo:

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

ma a quanto pare non sapendo quale valore dell'attributo dovrebbe essere questo non ottiene nulla.

Suppongo che riguardi il valore dell'attributo, che è del seguente formato:

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

Quello che voglio fare è far sì che Gatekeeper mi chieda se voglio eseguire questa app o file, oppure no. Ripristina lo stesso comportamento come se il file fosse appena scaricato da Internet e venga eseguito per la prima volta.

    
posta ILIV 10.10.2016 - 10:20
fonte

1 risposta

10

È possibile copiare un attributo com.apple.quarantine esistente di un file arbitrario in un file proxy e quindi applicarlo a altri file arbitrari. Se apri determinati tipi di file (ad esempio file .txt), l'attributo di quarantena verrà comunque ignorato.

Esempio:

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 

Questo applicherà i dati raccolti da .dmg al file .command - inclusa la data di download e l'app di download del file dmg originale. Tuttavia, la data di download originale / app di non sarà ripristinata.

Fonte: Uso di xattr per impostare la proprietà di quarantena di Mac OSX

Formato dell'attributo di quarantena:

flag;date;app_name;UUID;
  1. almeno 0001-0003 viene visualizzata la finestra di dialogo "Vuoi veramente aprire questo file ...", ma 0062 no.
  2. date (in Unix timestamp esadecimale almeno 00000000-1c000000 sono date sconosciute, una precoce data che funziona è 1d000000: 02 giugno 1985, 05:47:44 GMT)
  3. app (qualsiasi nome app consentito)
  4. Un UUID relativo a un download di file che può essere trovato in /Users/user/Library/Preferences/com.apple.LaunchServices.QuarantineEventsV2 (ovviamente facoltativo)

Quindi utilizzando 0001;55555555;Klanomathiner; nel file proxy menzionato sopra e applicandolo a un file (nell'esempio test.command) salirà:

o0001;66666666;ACyborgfromthefuture;

Dopoaverapertoilfile,ilprimo"flag" sarà impostato su 0041 e la riapertura non salirà nulla.

Con alcuni bash / SQL-magic potresti persino recuperare l'UUID originale e la data / l'app di download interrogando il nome del file nel database sqlite - che rappresenta il file com.apple.LaunchServices.QuarantineEventsV2 - e ripristinare l'originale attributo di quarantena. Ma sono troppo pigro per disegnarlo ora. Qualcun altro ha già fatto lavoro simile / correlato:

Leggi com.apple.quarantine

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

Imposta com.apple.quarantine

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

Inserisci UUID nel database

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);"

Verifica se UUID esiste nel database

/usr/bin/sqlite3 ~/Library/Preferences/com.apple.LaunchServices.QuarantineEventsV2 "SELECT * FROM LSQuarantineEvent WHERE LSQuarantineEventIdentifier == '${uuid}'"
    
risposta data 10.10.2016 - 13:22
fonte

Leggi altre domande sui tag