iOS Basic Testing Operations

Supporta HackTricks

Riepilogo dell'Identificazione e Accesso ai Dispositivi iOS

Identificazione del UDID di un Dispositivo iOS

Per identificare un dispositivo iOS in modo univoco, si utilizza una sequenza di 40 cifre nota come UDID. Su macOS Catalina o versioni successive, questo può essere trovato nell'app Finder, poiché iTunes non è più presente. Il dispositivo, una volta connesso tramite USB e selezionato in Finder, rivela il suo UDID tra le altre informazioni quando si clicca sui dettagli sotto il suo nome.

Per le versioni di macOS precedenti a Catalina, iTunes facilita la scoperta dell'UDID. Istruzioni dettagliate possono essere trovate qui.

Gli strumenti da riga di comando offrono metodi alternativi per recuperare l'UDID:

  • Utilizzando lo strumento I/O Registry Explorer ioreg:

$ ioreg -p IOUSB -l | grep "USB Serial"
  • Utilizzando ideviceinstaller per macOS (e Linux):

$ brew install ideviceinstaller
$ idevice_id -l
  • Utilizzando system_profiler:

$ system_profiler SPUSBDataType | sed -n -e '/iPad/,/Serial/p;/iPhone/,/Serial/p;/iPod/,/Serial/p' | grep "Serial Number:"
  • Utilizzando instruments per elencare i dispositivi:

$ instruments -s devices

Accesso alla Shell del Dispositivo

L'accesso SSH è abilitato installando il pacchetto OpenSSH dopo il jailbreak, consentendo connessioni tramite ssh root@<device_ip_address>. È fondamentale cambiare le password predefinite (alpine) per gli utenti root e mobile per proteggere il dispositivo.

SSH tramite USB diventa necessario in assenza di Wi-Fi, utilizzando iproxy per mappare le porte del dispositivo per le connessioni SSH. Questa configurazione consente l'accesso SSH tramite USB eseguendo:

$ iproxy 2222 22
$ ssh -p 2222 root@localhost

Applicazioni shell on-device, come NewTerm 2, facilitano l'interazione diretta con il dispositivo, particolarmente utile per la risoluzione dei problemi. Shell SSH inverse possono anche essere stabilite per l'accesso remoto dal computer host.

Reimpostazione delle Password Dimenticate

Per reimpostare una password dimenticata al valore predefinito (alpine), è necessario modificare il file /private/etc/master.passwd. Questo comporta la sostituzione dell'hash esistente con l'hash per alpine accanto alle voci utente root e mobile.

Tecniche di Trasferimento Dati

Trasferimento di File Dati dell'App

Archiviazione e Recupero tramite SSH e SCP: È semplice archiviare la directory Data dell'applicazione utilizzando tar e poi trasferirla usando scp. Il comando qui sotto archivia la directory Data in un file .tgz, che viene poi prelevato dal dispositivo:

tar czvf /tmp/data.tgz /private/var/mobile/Containers/Data/Application/8C8E7EB0-BC9B-435B-8EF8-8F5560EB0693
exit
scp -P 2222 root@localhost:/tmp/data.tgz .

Strumenti per l'interfaccia grafica

Utilizzando iFunbox e iExplorer: Questi strumenti GUI sono utili per gestire file sui dispositivi iOS. Tuttavia, a partire da iOS 8.4, Apple ha limitato l'accesso di questi strumenti al sandbox dell'applicazione a meno che il dispositivo non sia jailbroken.

Utilizzando Objection per la gestione dei file

Shell interattiva con Objection: Lanciare objection fornisce accesso alla directory Bundle di un'app. Da qui, puoi navigare nella directory Documenti dell'app e gestire i file, inclusi il download e l'upload da e verso il dispositivo iOS.

objection --gadget com.apple.mobilesafari explorer
cd /var/mobile/Containers/Data/Application/72C7AAFB-1D75-4FBA-9D83-D8B4A2D44133/Documents
file download <filename>

Ottenere ed Estrarre App

Acquisire il File IPA

Link di Distribuzione Over-The-Air (OTA): Le app distribuite per il testing tramite OTA possono essere scaricate utilizzando lo strumento di download delle risorse dei servizi ITMS, che è installato tramite npm e utilizzato per salvare il file IPA localmente.

npm install -g itms-services
itms-services -u "itms-services://?action=download-manifest&url=https://s3-ap-southeast-1.amazonaws.com/test-uat/manifest.plist" -o - > out.ipa

Estrazione del Binario dell'App

  1. Da un IPA: Decomprimi l'IPA per accedere al binario dell'app decrittografato.

  2. Da un Dispositivo Jailbroken: Installa l'app ed estrai il binario decrittografato dalla memoria.

Processo di Decrittografia

Panoramica della Decrittografia Manuale: I binari delle app iOS sono crittografati da Apple utilizzando FairPlay. Per fare reverse-engineering, è necessario estrarre il binario decrittografato dalla memoria. Il processo di decrittografia prevede il controllo del flag PIE, la modifica dei flag di memoria, l'identificazione della sezione crittografata e poi l'estrazione e la sostituzione di questa sezione con la sua forma decrittografata.

Controllo e Modifica del Flag PIE:

otool -Vh Original_App
python change_macho_flags.py --no-pie Original_App
otool -Vh Hello_World

Identificazione della Sezione Cifrata e Dumping della Memoria:

Determina gli indirizzi di inizio e fine della sezione cifrata utilizzando otool e dumpa la memoria dal dispositivo jailbroken utilizzando gdb.

otool -l Original_App | grep -A 4 LC_ENCRYPTION_INFO
dump memory dump.bin 0x8000 0x10a4000

Sovrascrivere la Sezione Cifrata:

Sostituisci la sezione cifrata nel binario originale dell'app con il dump decrittografato.

dd bs=1 seek=<starting_address> conv=notrunc if=dump.bin of=Original_App

Finalizzazione della Decrittazione: Modifica i metadati del binario per indicare l'assenza di crittografia utilizzando strumenti come MachOView, impostando cryptid a 0.

Decrittazione (Automatica)

frida-ios-dump

Lo strumento frida-ios-dump è impiegato per decrittare ed estrarre automaticamente le app dai dispositivi iOS. Inizialmente, è necessario configurare dump.py per connettersi al dispositivo iOS, il che può essere fatto tramite localhost sulla porta 2222 tramite iproxy o direttamente tramite l'indirizzo IP del dispositivo e la porta.

Le applicazioni installate sul dispositivo possono essere elencate con il comando:

$ python dump.py -l

Per eseguire il dump di un'app specifica, come Telegram, si utilizza il seguente comando:

$ python3 dump.py -u "root" -p "<PASSWORD>" ph.telegra.Telegraph

Questo comando avvia il dump dell'app, risultando nella creazione di un file Telegram.ipa nella directory corrente. Questo processo è adatto per dispositivi jailbroken, poiché le app non firmate o firmate falsamente possono essere reinstallate utilizzando strumenti come ios-deploy.

flexdecrypt

Lo strumento flexdecrypt, insieme al suo wrapper flexdump, consente l'estrazione di file IPA da applicazioni installate. I comandi di installazione per flexdecrypt sul dispositivo includono il download e l'installazione del pacchetto .deb. flexdump può essere utilizzato per elencare e dumpare app, come mostrato nei comandi qui sotto:

apt install zip unzip
wget https://gist.githubusercontent.com/defparam/71d67ee738341559c35c684d659d40ac/raw/30c7612262f1faf7871ba8e32fbe29c0f3ef9e27/flexdump -P /usr/local/bin; chmod +x /usr/local/bin/flexdump
flexdump list
flexdump dump Twitter.app

bagbak

bagbak, un altro strumento basato su Frida, richiede un dispositivo jailbroken per la decrittazione delle app:

bagbak --raw Chrome

r2flutch

r2flutch, utilizzando sia radare che frida, serve per la decrittazione e il dumping delle app. Maggiori informazioni possono essere trovate sulla sua pagina GitHub.

Installazione delle App

Sideloading si riferisce all'installazione di applicazioni al di fuori dell'App Store ufficiale. Questo processo è gestito dal daemon installd e richiede che le app siano firmate con un certificato rilasciato da Apple. I dispositivi jailbroken possono bypassare questo tramite AppSync, consentendo l'installazione di pacchetti IPA falsamente firmati.

Strumenti di Sideloading

  • Cydia Impactor: Uno strumento per firmare e installare file IPA su iOS e file APK su Android. Guide e risoluzione dei problemi possono essere trovate su yalujailbreak.net.

  • libimobiledevice: Una libreria per Linux e macOS per comunicare con dispositivi iOS. I comandi di installazione e gli esempi di utilizzo per ideviceinstaller sono forniti per installare app tramite USB.

  • ipainstaller: Questo strumento da riga di comando consente l'installazione diretta delle app sui dispositivi iOS.

  • ios-deploy: Per gli utenti macOS, ios-deploy installa app iOS dalla riga di comando. Decomprimere l'IPA e utilizzare il flag -m per il lancio diretto dell'app fanno parte del processo.

  • Xcode: Utilizza Xcode per installare app navigando su Finestra/Dispositivi e Simulatori e aggiungendo l'app a App Installate.

Consentire l'Installazione di Applicazioni su Dispositivi Non iPad

Per installare applicazioni specifiche per iPad su dispositivi iPhone o iPod touch, il valore UIDeviceFamily nel file Info.plist deve essere cambiato in 1. Questa modifica, tuttavia, richiede la ri-firma del file IPA a causa dei controlli di validazione della firma.

Nota: Questo metodo potrebbe fallire se l'applicazione richiede capacità esclusive per i modelli di iPad più recenti mentre si utilizza un iPhone o un iPod touch più vecchio.

Riferimenti

Support HackTricks

Last updated