Sie werden einem sich bewegenden Ziel folgen, aber Sie können versuchen, den Fortschritt dieser Ressourcen zu verfolgen, um festzustellen,
Michael Bishop
Antworten:
90
Es kommt darauf an, was du mit Jailbreak meinst. Im einfachen Fall sollten Sie in der Lage sein zu sehen, ob Cydia installiert ist, und danach vorgehen - so etwas wie
NSString*filePath =@"/Applications/Cydia.app";if([[NSFileManager defaultManager] fileExistsAtPath:filePath]){// do something useful}
Für gehackte Kernel ist es etwas (viel) komplizierter.
Wäre es nicht genug sein , suchen jede Datei / dir außerhalb der Sandbox? Wie / etc?
Rhythmic Fistman
58
Beachten Sie, dass nicht alle Benutzer Cydia installiert haben - dies ist keine gute Prüfung, und Sie sollten lieber nach etwas wie / bin / bash suchen, das / alle / Benutzer / werden / haben.
Grant Paul
2
Wo speichert apt seine Informationen? Oder könnte ich einfach einen system () - Befehl aufrufen und es herausfinden. Ich möchte herausfinden, ob sie bestimmte Apps haben, und wenn sie sie haben, dann schränken Sie die App ein
conradev
2
@RazorSharp Zu diesem Zeitpunkt haben fast alle Benutzer Cydia. Es ist wahrscheinlich genug, um das jetzt zu überprüfen. Wenn Sie jedoch eine 100% zuverlässige Prüfung wünschen, sollten Sie eine kernelbasierte Prüfung wie unten verwenden.
Grant Paul
1
FWIW die Dateiprüfungen sind trivial zu umgehen. Man kann mobilesubstrate verwenden, fileExistsAtPath:um es einzuhaken und NOfür den spezifischen Pfad, den Sie überprüfen, zurückzukehren.
Toasted_flakes
55
Dies ist ein Code, der einige Antworten kombiniert, die ich für diesen Bedarf gefunden habe, und der Ihnen eine viel höhere Erfolgsquote bietet:
@Porizm, dies ist nur eine Kombination aus einigen Antworten, die ich gefunden habe. Einige von ihnen haben nicht für mich gearbeitet, aber für andere. Mit diesem Code gehen Sie also kein Risiko ein. Wenn Sie diesen Code verwenden, können Sie zu 99% sicher sein. In Bezug auf die Leistung können Sie es nur einmal bei jedem Lauf ausführen und die Antwort irgendwo speichern. Sie müssen es nicht jedes Mal ausführen.
Yossi
3
@yossi und porizm apple haben Ihre App genehmigt, die den obigen Code enthält? Bitte antworten Sie
karthikPrabhu Alagu
4
Diese Methode sollte eine inline C-Funktion sein, nicht Objective-C. Es ist zu einfach, Objective-C-Methoden zu entdecken und zu umgehen, besonders wenn Sie es nennenisJailbroken
Programm
2
@Yossi deckt dies Geräte ab, die mit Taig einen Jailbreak haben?
Lakshay
3
@ Lakshay Ich weiß nicht .. Sie sind mehr als eingeladen, hier eine Antwort zu überprüfen und hinzuzufügen :)
Das Überprüfen des Dateipfads /Applications/Cydia.appist auf einem normalen Telefon nicht zulässig? Ich habe noch nie davon gehört, dass Apple dies erkannt und eine App dafür abgelehnt hat, aber Apple ist unvorhersehbar. Cydia hat ein URL-Schema cydia: //, das mit UIApplication legal überprüft werden kanncanOpenURL:
Dies ist eine großartige Möglichkeit, dies zu überprüfen, und es geht nicht außerhalb Ihres Sandkastens. Sicher, wenn auf dem Jailbreaker Cydia nicht installiert ist, wird NO zurückgegeben, aber ich denke, die meisten Jailbreaks installieren Cydia.
Wim Haanstra
Kann diese Zeichenfolge nicht geändert werden, wenn die App geknackt wird?
NSRover
8
Für iOS9.0 + müssen Sie außerdem den LSApplicationQueriesSchemes-Schlüssel in der App-Liste hinzufügen. Andernfalls gibt canOpenURL immer false zurück.
David V
1
Dies liefert ein falsch-positives Ergebnis, wenn der Benutzer eine App installiert hat, die dem cydia: // Schema wie InstantTV entspricht.
Thattyson
@ Thattyson danke! Ich wollte überprüfen, warum ich falsch positive
Ergebnisse erhielt
52
Zu überprüfen, ob der Kernel defekt ist, ist nicht viel komplizierter.
Durch Jailbreaking wird bei der Signaturprüfung des Kernels für signierten Code immer gemeldet, dass der Code korrekt signiert ist. Auf nicht unterbrochenen Telefonen kann kein Code mit einer schlechten Signatur ausgeführt werden.
Fügen Sie daher eine separate ausführbare Datei mit einer schlechten Signatur in die App ein. Es könnte nur ein dreizeiliges Programm sein, das main () und einen Rückgabewert hat. Kompilieren Sie die ausführbare Datei ohne Codesignatur (deaktivieren Sie sie unter Projekteinstellungen-> Erstellen) und signieren Sie sie mit einem anderen Schlüssel mit dem Befehlszeilenprogramm "Codesign".
Lassen Sie Ihre App die separate ausführbare Datei ausführen. Wenn Ihr Programm beim Ausführen der separaten ausführbaren Datei mit dem fehlerhaften Sig den Rückgabewert nicht erhalten kann, ist es definitiv inhaftiert. Wenn die separate ausführbare Datei A-OK zurückgibt, ist das Telefon definitiv jailbroken.
Können Sie über den App Store eine (Sub-) ausführbare Datei erhalten, deren Signatur so ungültig ist?
fbrereto
34
Vielleicht haben sich die Dinge geändert, aber würde die Ausführung einer separaten ausführbaren Datei Sie nicht daran hindern, für den App Store zugelassen zu werden?
Peter Zich
4
Kann jemand vor Kommentaren antworten? Das sind wichtige Fragen.
Petr
Niemand wird Sie wirklich davon abhalten, ein Mach-O mit einer ungültigen Signatur auf die Festplatte zu schreiben. Ich bin jedoch nicht mit der Antwort einverstanden, dass die Überprüfung, ob der Kernel defekt ist, nicht beteiligt ist oder dass dies in irgendeiner Weise eine endgültige Überprüfung ist.
Saagarjha
20
BOOL isJailbroken(){#if TARGET_IPHONE_SIMULATORreturn NO;#else
FILE *f = fopen("/bin/bash","r");if(errno == ENOENT){// device is NOT jailbroken
fclose(f);return NO;}else{// device IS jailbroken
fclose(f);return YES;}#endif}
Die ausgefeilteste Methode, die ich kenne, ist die Verwendung von objc_copyImageNames()Funktionen. Es gibt eine Liste der aktuell geladenen Bibliotheken zurück. Da die meisten Benutzer MobileSubstrate auf Geräten mit Jailbreak haben und die meisten iAP-Crack-Tools davon abhängen, werden zumindest einige MobileSubstrate-Bibliotheken angezeigt.
Haben Sie Links dazu, wie MobileSubstrate / CydiaSubstrate-Bibliotheken aussehen? Ich habe kein Telefon mit Jailbreak, mit dem ich herumspielen kann, also fahre ich "blind" und die Google-Suche liefert im Grunde Ihren obigen Kommentar.
Chadbag
@chadbag Ich habe auch keine, aber Sie können nach der debDatei von MobileSubstrate suchen, sie entpacken und (fast) alles auf .dylibdie schwarze Liste setzen , was sie gepackt hat.
Maxthon Chan
Vielen Dank, ich habe einen Code herausgefunden und kann basierend auf Ihrem Kommentar weitere Dinge hinzufügen. Danke vielmals!
Chadbag
4
Mir sind keine "APIs" bekannt, die dafür existieren. Wenn dies der Fall wäre, würde ein Produkt mit Jailbreak-Maskierung sie schnell verdecken.
Wie viele Leute betonen, handelt es sich um ein Katz-und-Maus-Spiel. Und nachdem beide Spieler Experten geworden sind, kommt es darauf an, wer den ersten Zug bekommt. (Person, die das Gerät hält.)
In Zdziarskis neuem Buch "Hacking and Securing iOS Apps" habe ich viele gute Vorschläge zur Erkennung von Jailbreak gefunden. (Ich persönlich habe mehr für das O'Reilly eBook bezahlt, weil sie das Kopieren und Einfügen ermöglichen.)
Nein, ich bin nicht mit dem Verlag verbunden. Aber ich fand es ein gutes Buch. Ich mag es nicht, nur die Fehler von Hackern zu veröffentlichen, damit sie sie beheben können, also dachte ich, ich würde auf das Buch verweisen.
Ich würde vorschlagen, nach Dateien zu suchen, die auf einem "Vanille" iPhone nicht vorhanden sind. Alle Jailbreak-Kits, die ich gesehen habe, installieren ssh. Das könnte ein guter Indikator für ein Telefon mit Jailbreak sein.
ssh wird niemals automatisch installiert, Benutzer müssen es selbst installieren.
Grant Paul
1
Ich habe mit der Jailbreak-Szene nicht wirklich Schritt gehalten. Aber wie ich mich erinnere, haben Ziphone und andere, als ich dies schrieb (Januar '09), standardmäßig ssh und das bsd-Subsystem installiert. Vielleicht stimmt das nicht mehr.
Gordon Wilson
12
Vertrauen Sie mir, wenn ich sage, dass chpwn mit der Jailbreak-Szene Schritt gehalten hat.
Winfield Trail
3
Wir haben bereits einen RSS-Feed für die Kommunikation mit unseren Benutzern ( Stocks Live ). Wir haben eine Nachricht veröffentlicht, die ungefähr so lautet:
Einige Geräte mit Jailbreak haben Probleme bla bla bla. Wir haben einen Hack durchgeführt, um diese Probleme zu lösen. Wir müssen jedoch wissen, ob dies ein Gerät mit Jailbreak ist oder nicht. Klicken Sie hier, damit die App das Problem behebt. Wenn Sie jemals wieder normal werden, dh den Jailbreak entfernt haben, klicken Sie hier.
Dann verarbeiten Sie die Benutzerinteraktion und tun, was angemessen ist, wie sich anders zu verhalten usw.
Versuchen Sie, eine Datei zu finden, die von einem Gerät mit Cydia- oder Jailbreak erstellt wurde. Oder versuchen Sie, in eine Datei außerhalb der Blackbox der App zu schreiben. Wenn Ihnen dies gelingt, ist das Gerät kompromittiert / jailbroken :)
Apple hat Ihre App genehmigt, die den obigen Code enthält?
karthikPrabhu Alagu
3
Bitte verwenden Sie folgenden Code für Swift 4 und höher: Fügen Sie den folgenden Code in das Appdelegate ein:
private func getJailbrokenStatus()->Bool{if TARGET_IPHONE_SIMULATOR !=1{// Check 1 : existence of files that are common for jailbroken devicesifFileManager.default.fileExists(atPath:"/Applications/Cydia.app")||FileManager.default.fileExists(atPath:"/Library/MobileSubstrate/MobileSubstrate.dylib")||FileManager.default.fileExists(atPath:"/bin/bash")||FileManager.default.fileExists(atPath:"/usr/sbin/sshd")||FileManager.default.fileExists(atPath:"/etc/apt")||FileManager.default.fileExists(atPath:"/private/var/lib/apt/")||UIApplication.shared.canOpenURL(URL(string:"cydia://package/com.example.package")!){returntrue}// Check 2 : Reading and writing in system directories (sandbox violation)let stringToWrite ="Jailbreak Test"do{try stringToWrite.write(toFile:"/private/JailbreakTest.txt", atomically:true, encoding:String.Encoding.utf8)//Device is jailbrokenreturntrue}catch{returnfalse}}else{returnfalse}}
Schritt 2: Rufen Sie es in viewDidLoad()Ihrem Startbildschirm-View-Controller auf (oder in welcher VC auch immer Sie zum ersten Mal aufrufen):
// show a blank screen or some other view controllerlet viewController =UIDevice.current.isJailBroken()?JailBrokenViewController():NextViewController()self.navigationController?.present(viewController, animated:true, completion:nil)
Versuchen Sie, auf /Application/Preferences.app/General.plist zuzugreifen. Sie sollten dies auf einem iPhone mit Jailbreak tun können. Auf einem Telefon ohne JB können Sie nicht darauf zugreifen
Antworten:
Es kommt darauf an, was du mit Jailbreak meinst. Im einfachen Fall sollten Sie in der Lage sein zu sehen, ob Cydia installiert ist, und danach vorgehen - so etwas wie
Für gehackte Kernel ist es etwas (viel) komplizierter.
quelle
fileExistsAtPath:
um es einzuhaken undNO
für den spezifischen Pfad, den Sie überprüfen, zurückzukehren.Dies ist ein Code, der einige Antworten kombiniert, die ich für diesen Bedarf gefunden habe, und der Ihnen eine viel höhere Erfolgsquote bietet:
quelle
isJailbroken
Das Überprüfen des Dateipfads
/Applications/Cydia.app
ist auf einem normalen Telefon nicht zulässig? Ich habe noch nie davon gehört, dass Apple dies erkannt und eine App dafür abgelehnt hat, aber Apple ist unvorhersehbar. Cydia hat ein URL-Schema cydia: //, das mit UIApplication legal überprüft werden kanncanOpenURL:
quelle
Zu überprüfen, ob der Kernel defekt ist, ist nicht viel komplizierter.
Durch Jailbreaking wird bei der Signaturprüfung des Kernels für signierten Code immer gemeldet, dass der Code korrekt signiert ist. Auf nicht unterbrochenen Telefonen kann kein Code mit einer schlechten Signatur ausgeführt werden.
Fügen Sie daher eine separate ausführbare Datei mit einer schlechten Signatur in die App ein. Es könnte nur ein dreizeiliges Programm sein, das main () und einen Rückgabewert hat. Kompilieren Sie die ausführbare Datei ohne Codesignatur (deaktivieren Sie sie unter Projekteinstellungen-> Erstellen) und signieren Sie sie mit einem anderen Schlüssel mit dem Befehlszeilenprogramm "Codesign".
Lassen Sie Ihre App die separate ausführbare Datei ausführen. Wenn Ihr Programm beim Ausführen der separaten ausführbaren Datei mit dem fehlerhaften Sig den Rückgabewert nicht erhalten kann, ist es definitiv inhaftiert. Wenn die separate ausführbare Datei A-OK zurückgibt, ist das Telefon definitiv jailbroken.
quelle
quelle
Sie können feststellen, ob ein Gerät JailBroken ist oder nicht, indem Sie Folgendes überprüfen:
Es gibt eine Open-Source-Bibliothek, die ich aus verschiedenen Artikeln und Büchern erstellt habe. Probieren Sie es auf GitHub aus !
quelle
Ich habe in Swift 2.3 die von @Yossi bereitgestellte Lösung überarbeitet
quelle
Die ausgefeilteste Methode, die ich kenne, ist die Verwendung von
objc_copyImageNames()
Funktionen. Es gibt eine Liste der aktuell geladenen Bibliotheken zurück. Da die meisten Benutzer MobileSubstrate auf Geräten mit Jailbreak haben und die meisten iAP-Crack-Tools davon abhängen, werden zumindest einige MobileSubstrate-Bibliotheken angezeigt.quelle
deb
Datei von MobileSubstrate suchen, sie entpacken und (fast) alles auf.dylib
die schwarze Liste setzen , was sie gepackt hat.Mir sind keine "APIs" bekannt, die dafür existieren. Wenn dies der Fall wäre, würde ein Produkt mit Jailbreak-Maskierung sie schnell verdecken.
Wie viele Leute betonen, handelt es sich um ein Katz-und-Maus-Spiel. Und nachdem beide Spieler Experten geworden sind, kommt es darauf an, wer den ersten Zug bekommt. (Person, die das Gerät hält.)
In Zdziarskis neuem Buch "Hacking and Securing iOS Apps" habe ich viele gute Vorschläge zur Erkennung von Jailbreak gefunden. (Ich persönlich habe mehr für das O'Reilly eBook bezahlt, weil sie das Kopieren und Einfügen ermöglichen.)
Nein, ich bin nicht mit dem Verlag verbunden. Aber ich fand es ein gutes Buch. Ich mag es nicht, nur die Fehler von Hackern zu veröffentlichen, damit sie sie beheben können, also dachte ich, ich würde auf das Buch verweisen.
quelle
Versuchen Sie, nicht signierten Code über Ihre Anwendung auszuführen.
Geräte mit Jailbreak weisen normalerweise die folgenden Eigenschaften auf:
Nur die Überprüfung der Existenz von Dateien auf Jailbreak-Erkennung ist zum Scheitern verurteilt. Diese Überprüfungen sind leicht zu umgehen.
quelle
Einige häufig verwendete Dateien, nach denen gesucht werden muss:
/Library/MobileSubstrate/MobileSubstrate.dylib
/Applications/Cydia.app
/var/cache/apt
/var/lib/apt
/var/lib/cydia
/var/log/syslog
/var/tmp/cydia.log
/bin/bash
/bin/sh
/usr/sbin/sshd
/usr/libexec/ssh-keysign
/etc/ssh/sshd_config
/etc/apt
Die meisten suchen nach Cydia-bezogenen Dateien.
quelle
Ich würde vorschlagen, nach Dateien zu suchen, die auf einem "Vanille" iPhone nicht vorhanden sind. Alle Jailbreak-Kits, die ich gesehen habe, installieren ssh. Das könnte ein guter Indikator für ein Telefon mit Jailbreak sein.
quelle
Wir haben bereits einen RSS-Feed für die Kommunikation mit unseren Benutzern ( Stocks Live ). Wir haben eine Nachricht veröffentlicht, die ungefähr so lautet:
Dann verarbeiten Sie die Benutzerinteraktion und tun, was angemessen ist, wie sich anders zu verhalten usw.
quelle
Versuchen Sie, eine Datei zu finden, die von einem Gerät mit Cydia- oder Jailbreak erstellt wurde. Oder versuchen Sie, in eine Datei außerhalb der Blackbox der App zu schreiben. Wenn Ihnen dies gelingt, ist das Gerät kompromittiert / jailbroken :)
quelle
Bitte verwenden Sie folgenden Code für Swift 4 und höher: Fügen Sie den folgenden Code in das Appdelegate ein:
func applicationDidBecomeActive (_ application: UIApplication) {
quelle
Hier sind meine Lösungen: Schritt 1
Schritt 2: Rufen Sie es in
viewDidLoad()
Ihrem Startbildschirm-View-Controller auf (oder in welcher VC auch immer Sie zum ersten Mal aufrufen):quelle
Versuchen Sie, auf /Application/Preferences.app/General.plist zuzugreifen. Sie sollten dies auf einem iPhone mit Jailbreak tun können. Auf einem Telefon ohne JB können Sie nicht darauf zugreifen
quelle