
Strumento di modifica della memoria per IPA ri-firmata che supporta app iOS in esecuzione su iPhone e Apple Silicon Mac senza jailbreak.
Ipa-medit è uno strumento di ricerca e patch della memoria per ipa resignati senza jailbreak. Supporta app iOS su iPhone e Mac Apple Silicon. È stato creato per il testing di sicurezza dei giochi mobile. Molti giochi mobile hanno il rilevamento del jailbreak, ma ipa-medit non richiede jailbreak, quindi la modifica della memoria può essere effettuata senza bypassare il rilevamento del jailbreak.
La modifica della memoria è il modo più semplice per barare nei giochi, ed è uno degli elementi da controllare nel test di sicurezza. Esistono anche strumenti di cheating che possono essere usati facilmente come GameGem e iGameGuardian. Tuttavia, non c'erano strumenti disponibili per dispositivi non jailbroken e CUI, Apple Silicon Mac. Quindi l'ho creato come strumento di test di sicurezza. La versione Android è sterrasec/apk-medit.

$ brew install --HEAD libplist
$ brew install --HEAD usbmuxd
$ brew install --HEAD libimobiledevice
$ brew install --HEAD ideviceinstaller
Scarica il binario da GitHub Releases e inseriscilo nel tuo $PATH.
Puoi compilarlo usando il comando make. Per compilare è necessario il compilatore Go. Se stai targetizzando un'app iOS che gira su un Mac Apple Silicon, dovrai firmarla, ma script/codesign.sh verrà eseguito e firmato automaticamente.
$ git clone [email protected]:sterrasec/ipa-medit.git
$ cd ipa-medit
$ make build
Il file .ipa di destinazione deve essere firmato con un certificato installato sul tuo computer. Se desideri modificare la memoria su applicazioni di terze parti, utilizza uno strumento come ipautil per la ri-firma.
$ ipautil decode tap1000000.ipa # unzip
$ ipautil build Payload # re-sign and generate .ipa file
Per avviarlo, devi specificare il percorso del file eseguibile contenuto nel file .ipa con -bin e il bundle id con -id.
$ unzip tap1000000.ipa
$ ipa-medit -bin="./Payload/tap1000000.app/tap1000000" -id="jp.hoge.tap1000000"
Per avviarlo, devi specificare il nome del processo con -name o il pid con -pid. Il nome del processo e il pid dell'app iOS possono essere controllati nel Monitoraggio Attività.
$ ipa-medit -name <process name>
Ecco i comandi disponibili in un prompt interattivo.
Cerca l'intero specificato nella memoria.
> find 999986
Success to halt process
Scanning: 0x00000001025e4000-0x00000001025e8000
Scanning: 0x00000001025f4000-0x00000001025fc000
Scanning: 0x0000000102604000-0x0000000102608000
....
Scanning: 0x000000016eb34000-0x000000016ebbc000
Scanning: 0x000000016ebc0000-0x000000016ebe8000
Scanning: 0x000000016ebec000-0x000000016ec74000
Scanning: 0x000000016ec78000-0x000000016ed00000
Found: 1!!
Address: 0x10a2feea0
Per impostazione predefinita, vengono cercati solo gli interi quando si targetizzano app iOS su iPhone, perché l'API LLDB è lenta. Quando si targetizza un'app iOS su Apple Silicon Mac, verranno cercate anche le stringhe.
Puoi anche specificare il tipo di dato come string, word, dword, qword.
> find dword 999994
Search Double Word...
Target Value: 999994([58 66 15 0])
Found: 1!!
Address: 0x11378aea0
Filtra i risultati di ricerca precedenti che corrispondono ai risultati di ricerca correnti.
> filter 999842
Success to halt process
Found: 1!!
Address: 0x1087beea0
Scrive il valore specificato all'indirizzo trovato dalla ricerca.
> patch 10
Successfully patched!
Si collega al processo di destinazione.
> attach
Success to halt process
Si scollega dal processo collegato.
> detach
Success to continue process
Ottiene informazioni sul processo di destinazione. Funziona solo se si targetizza un'app iOS su iPhone.
> ps
SBProcess: pid = 926, state = running, threads = 37, executable = tap1000000
State: Running
thread #1: tid = 0x545ee, 0x00000001bd6552d0 libsystem_kernel.dylib`mach_msg_trap + 8, queue = 'com.apple.main-thread'
thread #3: tid = 0x54619, 0x00000001bd67a184 libsystem_kernel.dylib`__workq_kernreturn + 8
thread #4: tid = 0x5461a, 0x00000001bd67a184 libsystem_kernel.dylib`__workq_kernreturn + 8
thread #5: tid = 0x5461b, 0x00000001bd67a184 libsystem_kernel.dylib`__workq_kernreturn + 8
thread #6: tid = 0x5461c, 0x00000001bd67a184 libsystem_kernel.dylib`__workq_kernreturn + 8
thread #7: tid = 0x5461d, 0x00000001bd6552d0 libsystem_kernel.dylib`mach_msg_trap + 8, name = 'com.apple.uikit.eventfetch-thread'
thread #8: tid = 0x5461e, 0x00000001bd6791ac libsystem_kernel.dylib`__psynch_cvwait + 8, name = 'GC Finalizer'
thread #9: tid = 0x5461f, 0x00000001bd65530c libsystem_kernel.dylib`semaphore_wait_trap + 8, name = 'Job.Worker 0'
thread #10: tid = 0x54620, 0x00000001bd65530c libsystem_kernel.dylib`semaphore_wait_trap + 8, name = 'Job.Worker 1'
thread #11: tid = 0x54621, 0x00000001bd65530c libsystem_kernel.dylib`semaphore_wait_trap + 8, name = 'Job.Worker 2'
...
thread #35: tid = 0x54659, 0x00000001bd6552d0 libsystem_kernel.dylib`mach_msg_trap + 8, name = 'AURemoteIO::IOThread'
thread #36: tid = 0x54662, 0x00000001bd679814 libsystem_kernel.dylib`__semwait_signal + 8
thread #37: tid = 0x54663, 0x00000001bd6552d0 libsystem_kernel.dylib`mach_msg_trap + 8, name = 'com.apple.CoreMotion.MotionThread'
thread #38: tid = 0x54664, 0x00000001bd65530c libsystem_kernel.dylib`semaphore_wait_trap + 8, name = 'Loading.PreloadManager'
Per uscire da medit, usa il comando exit o Ctrl-D.
> exit
Bye!
Se ottieni l'errore /private/var/containers/Bundle/Application/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/hoge.app: error: failed to get reply to handshake packet e non riesci a comunicare correttamente con il dispositivo iOS e lldb, avvia Xcode e compila un'app, e funzionerà.
Se ottieni l'errore Could not connect to lockdownd. e non riesci a comunicare correttamente con il dispositivo iOS e ideviceinstaller, avvia Xcode e compila un'app, e funzionerà. Se questo non risolve il problema, aggiorna ideviceinstaller e libimobiledevice alle ultime versioni usando l'esempio di comandi nella sezione Requisiti.
Questo può essere risolto installando l'ultimo codice senza versione di libimobiledevice e ideviceinstaller aggiungendo l'opzione --HEAD quando si esegue brew install.
Licenza MIT