Ho bisogno di un modo stabile per tentare di eseguire un eseguibile senza segno su un dispositivo iOS per verificare se il dispositivo è stato jailbroken (cioè consente l'esecuzione di codice non firmato).Esecuzione di codice non firmato in un'applicazione iOS per testare il jailbreak
Ho scritto un piccolo file eseguibile che essenzialmente non fa nulla.
int main(int argc, char *argv[]) {
return 23;
}
Che ho compilato ed eseguito con successo su un dispositivo iOS (sia Jailbroken e non).
Ho quindi aggiunto questo eseguibile a un pacchetto di app e distribuito l'app su un dispositivo iOS.
Ciò risulta in una versione di sola lettura dell'eseguibile sul dispositivo. Ho provato a chmod questo file per dargli autorizzazioni di esecuzione, ma questo non è riuscito, quindi l'ho copiato nella directory tmp per l'app, dove sono stato in grado di chmod con permessi eseguibili.
Altre domande hanno suggerito di usare execve per chiamare l'eseguibile, ma questo sostituirà il processo in esecuzione con quello nuovo, che ucciderà l'app. Fork() fallisce sempre, quindi non è un'opzione. System() richiede una shell, e sarebbe possibile avere un jailbreak senza una shell che permetta comunque l'esecuzione di codice non firmato, quindi è fuori. Forcelle Popen(), quindi non funzionerà. È interessante notare che, da quello che ho scoperto, chiamare execv sul mio eseguibile in un dispositivo normale causa un errore "Operazione non consentita", mentre chiamarlo su un dispositivo jailbroken causa un errore "Autorizzazione negata". Questo da solo potrebbe funzionare per il rilevamento del jailbreak, tranne nel caso in cui se si verifica un jailbreak in cui l'esecuzione di execv è consentita, l'App si bloccherà immediatamente mentre il processo verrà sostituito.
In base a this, iBooks esegue il rilevamento del jailbreak in questo modo, ma sembra utilizzare il file binario di fairplayd per eseguire le chiamate execve.
Qualcuno ha suggerimenti per eseguire un file eseguibile o utilizzare fairplayd?
sistema passa un comando alla shell ed eseguire codice non firmato non significa necessariamente avere una shell. – richie
Per me, il sistema restituisce sempre 32512, a indicare che non è possibile trovare il file, indipendentemente dal fatto che il telefono sia jailbroken o meno. – richie
@richie, ok scusa. Devo averlo eseguito nel mio piccolo programma "ciao mondo" jailbreak (installato in '/ Applications /'), che è quello che faccio di solito quando rispondo alle domande di jailbreak. Ricevo lo stesso codice di ritorno con 'system()'. Ho aggiornato la mia risposta con un'altra alternativa, che usa 'execlp'. Ho fatto in modo di testare questo con un'app che si installa su '/ var/mobile/Applications'. Di nuovo, mi scuso. – Nate