Source: blog de Pepe Berba — Le 14 décembre 2025, Pepe Berba présente « applescript-decompiler », un outil capable de reconstruire le code lisible de scripts AppleScript compilés en mode run-only, avec des démonstrations sur des échantillons XCSSET et OSAMiner.
🛠️ L’auteur souligne que les scripts AppleScript, de plus en plus exploités par des malwares macOS, tirent parti de l’automatisation UI et des Apple events, et que la variante « run-only » complique l’analyse. En s’appuyant sur applescript-disassembler, l’outil comble un manque de tooling que Microsoft Threat Intelligence jugeait jusque-là difficile, voire infaisable à résoudre en décompilation directe.
🍎 Démo XCSSET: la sortie décompilée concorde avec des sources connues (Trend Micro 2020, SentinelOne 2022, Microsoft 2025). Les modules « a » (bootstrap), « listing » et « notes_app » retrouvent leurs structures (collecte système, logiques liées aux navigateurs, vérification de XProtect, création d’une fausse app Notes avec retries TCC). Un module de persistance (« xmyyeqjx ») récupère le numéro de série et l’utilisateur, construit un LaunchDaemon plist via echo, et enregistre un nom de fichier passé en argument. Des échantillons obfusqués (ex. « ukkc ») recèlent une commande de déchiffrement avec une clé AES publiée par Microsoft.
🪪 Démo OSAMiner: l’outil facilite l’analyse d’échantillons plus anciens. Le billet met en évidence un déchiffrement de chaînes par décalage de caractères (-100), des anti-sandboxes (vérification ≥100 Go de disque via System Events, attente si le plist a <1 jour, boucle jusqu’à connectivité Internet), une exécution « fileless » (drop → run → delete), le redémarrage d’un LaunchAgent via launchctl exécuté dans Terminal par Apple events (rendant l’attribution plus difficile), ainsi que l’impairment (arrêt d’Activity Monitor, détection/kill d’antivirus via ps et journaux d’installation). Des échantillons se déguisent en plist et exfiltrent des données encodées en hex.
🧩 Obfuscations et internals: le billet présente des techniques d’obfuscation courantes (substitution de variables, ASCII Character X, tableaux d’entiers), et des analyseurs automatiques (NaiveStringAnalyzer, OSAMinerDecryptAnalyzer) pour déofbusquer. Il détaille aussi les bases du décompilateur: modélisation VM/stack, AST, expressions, appels de handlers, Apple events, structures de contrôle, gestion de blocs imbriqués et rendu du code.
Conclusion: article de type « nouveaux outils » et « analyse technique », visant à valider et expliquer un décompilateur pour AppleScript run-only et à illustrer ses usages sur des campagnes macOS.
IOC(s):
- Clé AES: 27860c1670a8d2f3de7bbc74cd754121
- Identifiants d’échantillons (hashs tronqués): 3864…555d, d5fb…a2df, c175…8c60, af08…396f, f3bc…2a2b, 1835…b1c7
TTP(s):
- Abus d’AppleScript run-only comme obfuscation et exécution par Apple events
- Persistance via LaunchDaemon/LaunchAgent plist
- Anti-sandbox: vérification d’espace disque (≥100 Go), âge de fichier plist (>1 jour), attente connectivité
- Fileless: drop → exécution → suppression rapide
- Defense Evasion: kill d’Activity Monitor, détection/kill d’AV via ps et logs
- Masquerading: fichiers se faisant passer pour des .plist
- Obfuscation: variables, ASCII tokens, tableaux d’octets/entiers; décryptage par décalage de caractères
- Exfiltration via encodage hex depuis un plist
🔗 Source originale : https://pberba.github.io/security/2025/12/14/decompiling-run-only-applescripts/