0 votos

Para editar TrashIcon.icns usando un editor hexadecimal para acceder a los iconos oscuros

En /System/Library/CoreServices/CoreTypes.bundle/Contents/Resources hay un archivo llamado TrashIcon.icns. Alexander O'Mara, un tipo que es experto en seguridad en Mastercard, descubrió que este archivo contiene no solo íconos "brillantes" sino también "oscuros". Pero para acceder a los oscuros, necesitas modificar el archivo usando un editor hexadecimal.

Nunca he trabajado con editores hexadecimales y las instrucciones que dio no están muy claras para mí.

Alexander: No conozco ninguna herramienta existente, pero es bastante simple. Encuentra el fragmento dentro de TrashIcon.icns llamado FD D9 2F A8, cópialo y sobreescribe FD D9 2F A8 con icns. Eso hará que sea un archivo icns válido. A partir de ahí, puedes extraer los íconos individuales del archivo icns oscuro usando una herramienta como iconutil.

Yo: Muchas gracias. Pero no estoy seguro de entender la primera parte. [...]

Alexander: Recomiendo hacer una copia del archivo icns, encontrar FD D9 2F A8, seleccionar todo el código hexadecimal a la izquierda que viene antes, borrarlo, luego en el lado derecho sobreescribir los primeros 4 bytes con icns, y guardar.

https://github.com/Ji4n1ng/OpenInTerminal/issues/211

Sigo sin entender cómo "sobreescribir los primeros 4 bytes con icns", a pesar de no ser una persona analfabeta en informática o programación. ¿Podrías explicármelo? Probablemente un GIF animado sea la mejor opción.

3voto

Marc Wilson Puntos 146

En Ventura, el marcador indicado está en el offset 0x12b1e0 en ese archivo. Probablemente cerca del mismo offset en la versión Sonoma del archivo.

Así que utiliza dd para cortar la parte antes del marcador...

$ dd bs=1 skip=0x12b1e0 if=TrashIcon.icns of=tempfile     
939131+0 registros dentro
939131+0 registros fuera
939131 bytes transferidos en 3.979716 segundos (235979 bytes/seg)

Luego usa el editor hexadecimal de tu elección para parchar los primeros cuatro bytes. Yo usé qemacs.

Antes:

00000000  fd d9 2f a8 00 0e 54 7b  69 63 31 32 00 00 10 fe   ýÙ/¨..T{ic12...þ 
00000010  89 50 4e 47 0d 0a 1a 0a  00 00 00 0d 49 48 44 52   .PNG........IHDR 

Y después:

00000000  69 63 6e 73 00 0e 54 7b  69 63 31 32 00 00 10 fe   icns..T{ic12...þ 
00000010  89 50 4e 47 0d 0a 1a 0a  00 00 00 0d 49 48 44 52   .PNG........IHDR   

Y ahora es nuevamente un archivo de icono.

$ file tempfile 
tempfile: icono de Mac OS X, 939131 bytes, tipo "ic12"

2voto

David Anderson Puntos 2189

La pregunta del OP implica el uso de un editor hexadecimal. El usuario Marc Wilson ha señalado en un comentario que "... macOS incluye al menos un editor hexadecimal, que es xxd, y una aplicación segura para archivos binarios que puede ser utilizada como tal, que es vim." Además, también existen editores hexadecimales de terceros, como se muestra en la respuesta de Marc Wilson.

Esta respuesta demuestra cómo hacer los cambios necesarios sin depender de editores hexadecimales o herramientas de terceros. Dado que actualmente no tengo acceso a Sonoma, utilizaré Ventura 13.3.1 (a).

Nota: Esta respuesta asume que se está utilizando la versión de grep 2.6.0-FreeBSD, la cual está incluida en macOS Monterey y al menos en MacOS Sonoma. En este caso, la versión anterior de grep, 2.5.1-FreeBSD, no funcionará correctamente, la cual está incluida en macOS Big Sur y se remonta al menos a Mac OS X Snow Leopard.

Los comandos a continuación copian el archivo TrashIcon.icns a mi Escritorio.

cd ~/Escritorio
cp /System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/TrashIcon.icns .

A continuación, utiliza los comandos siguientes para determinar la ubicación de la primera ocurrencia de la secuencia de bytes FD D9 2F A8 en el archivo TrashIcon.icns. Tanto en bash como en zsh, la secuencia de bytes puede representarse como la cadena $'\xFD\xD9\x2F\xA8'. Básicamente, cada byte está precedido por \x y el resultado está precedido por $' y seguido por '. (Para una explicación del uso de los comandos, consulta esta respuesta).

(export LC_CTYPE=ASCII BS=$'\xFD\xD9\x2F\xA8'; cat TrashIcon.icns | tr -c "$BS" '\n' | grep -aoFbm1 "$BS" | sed 's/:.*//')

La salida de los comandos anteriores se muestra a continuación. Esta salida muestra que la secuencia de bytes comienza en el offset 1225184.

1225184

El siguiente comando copia el archivo TrashIcon.icns comenzando en el offset 1225184 al archivo tempfile. (Nota: 1225184=0x12b1e0)

dd bs=1 skip=1225184 if=TrashIcon.icns of=tempfile

La salida del comando anterior se muestra a continuación.

939131+0 registros dentro
939131+0 registros fuera
939131 bytes transferidos en 3.128151 segundos (300219 bytes/s)

El siguiente comando reemplaza los primeros 4 bytes del archivo tempfile con la cadena de caracteres ASCII de 4 bytes icns.

echo -n "icns" | dd bs=1 of=tempfile conv=notrunc

El comando siguiente muestra los valores hexadecimales y ASCII de los primeros 32 bytes del archivo tempfile. Nota: Los valores ASCII no imprimibles y los valores no ASCII se muestran como el carácter ..

hexdump -Cv -n 32 tempfile

La salida del comando anterior se muestra a continuación. Los valores hexadecimales son los mismos que se muestran en la respuesta de Marc Wilson.

00000000  69 63 6e 73 00 0e 54 7b  69 63 31 32 00 00 10 fe  |icns..T{ic12....|
00000010  89 50 4e 47 0d 0a 1a 0a  00 00 00 0d 49 48 44 52  |.PNG........IHDR|
00000020

El comando siguiente se puede usar para mostrar que tempfile es un archivo de icono.

file tempfile

La salida del comando anterior se muestra a continuación.

tempfile: icono de Mac OS X, 939131 bytes, tipo "ic12"

1voto

Oskar Puntos 1242

El valor de icns en ASCII es 69 63 6e 73, por lo que escribirías esos valores en una copia del archivo en lugar de FD D9 2F A8 después de hacer la modificación sugerida para eliminar el contenido a la izquierda de FD D9 2F A8

0voto

La respuesta de Mike es probablemente correcta, pero encontré una forma más rápida.

  1. Descarga icon_records, de Brielle Harrison, desde https://github.com/nyteshade/icon_record_extractor (o lee el código y compílalo tú mismo...)

  2. chmod +x icon_records para permitir que Terminal lo trate como ejecutable

  3. ./icon_records TrashIcon.icns dark

eso es todo

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