To zależy, co masz na myśli mówiąc o jailbreak. W prostym przypadku powinieneś być w stanie sprawdzić, czy Cydia jest zainstalowana i przejść przez to - coś w stylu
NSString*filePath =@"/Applications/Cydia.app";if([[NSFileManager defaultManager] fileExistsAtPath:filePath]){// do something useful}
W przypadku zhakowanych jąder jest to trochę (dużo) bardziej skomplikowane.
Czy nie wystarczyłoby poszukać dowolnego pliku / katalogu poza piaskownicą? Podoba Ci się / etc?
Rhythmic Fistman
58
Zauważ, że nie wszyscy użytkownicy mają zainstalowaną Cydię - to nie jest dobry test i powinieneś raczej sprawdzić coś takiego jak / bin / bash, które / all / users / will / have.
Grant Paul
2
Gdzie apt przechowuje swoje informacje? Albo mógłbym po prostu wywołać polecenie system () i dowiedzieć się. Chcę się dowiedzieć, czy mają jakieś aplikacje i jeśli je mają, to ogranicz aplikację
Conradev
2
@RazorSharp W tym momencie prawie wszyscy użytkownicy mają Cydię. Prawdopodobnie wystarczy to teraz sprawdzić. Jeśli jednak chcesz, aby kontrola była w 100% niezawodna, powinieneś użyć kontroli opartej na jądrze, jak poniżej.
Grant Paul
1
FWIW sprawdzenie plików jest banalne do ominięcia. Można użyć mobilesubstrate, aby zaczepić fileExistsAtPath:i sprawić, że wróci NOna określoną ścieżkę, którą sprawdzasz.
toasted_flakes
55
To jest kod, który łączy kilka odpowiedzi, które znalazłem na tę potrzebę, i zapewni znacznie wyższy wskaźnik sukcesu:
@Porizm, to tylko połączenie niektórych odpowiedzi, które znalazłem. Niektóre z nich nie działały dla mnie, ale działały dla innych… więc z tym kodem nie ryzykujesz… Jeśli używasz tego, możesz być pewien na 99%. Jeśli chodzi o występ, możesz uruchomić go tylko raz na każdy bieg i zapisać gdzieś odpowiedź, nie musisz go uruchamiać za każdym razem ..
Yossi
3
@yossi i porizm apple zatwierdziły Twoją aplikację, która zawiera powyższy kod? proszę o odpowiedź
karthikPrabhu Alagu
4
Ta metoda powinna być wbudowaną funkcją C, a nie Objective-C. Zbyt łatwo jest odkryć i ominąć metody Objective-C, zwłaszcza jeśli je isJailbroken
nazwiesz
2
@Yossi Czy obejmuje to urządzenia po jailbreaku przy użyciu Taig?
Lakshay
3
@Lakshay Nie wiem .. Zapraszamy do sprawdzenia i dodania odpowiedzi :)
Sprawdzanie ścieżki pliku /Applications/Cydia.appnie jest dozwolone na zwykłym telefonie? Nigdy nie słyszałem, aby Apple to wykrył i odrzucił aplikację, ale Apple jest nieprzewidywalny. Cydia ma schemat adresu URL cydia: //, który można legalnie sprawdzić za pomocą aplikacji UIApplicationcanOpenURL:
To świetny sposób na sprawdzenie i nie wychodzi poza twoją piaskownicę. Jasne, jeśli jailbreaker nie ma zainstalowanej Cydii, zwróci NIE, ale myślę, że większość Jailbreaków instaluje Cydię.
Wim Haanstra
czy ten ciąg nie może zostać zmieniony, gdy aplikacja zostanie złamana?
NSRover
8
W przypadku iOS9.0 + musisz również dodać klucz LSApplicationQueriesSchemes w pliku app plist. W przeciwnym razie canOpenURL zawsze zwróci wartość false.
David V,
1
Zapewni to fałszywie dodatni wynik, jeśli użytkownik ma zainstalowaną aplikację zgodną ze schematem cydia: //, na przykład InstantTV.
Sprawdzenie, czy jądro jest zepsute, nie jest TAKIE dużo bardziej skomplikowane.
Jailbreaking sprawia, że jądro sprawdza podpis podpisanego kodu zawsze raportuje, że kod jest podpisany poprawnie, a nieprzerwane telefony nie mogą uruchamiać kodu ze złym podpisem.
Dlatego dołącz do aplikacji oddzielny plik wykonywalny ze złym podpisem. Może to być po prostu program składający się z trzech wierszy, który ma funkcję main () i wartość zwracaną. Skompiluj plik wykonywalny bez podpisywania kodu (wyłącz go w Ustawieniach projektu-> Kompiluj) i podpisz go innym kluczem, używając narzędzia wiersza poleceń „Codesign”.
Niech Twoja aplikacja wykonuje oddzielny plik wykonywalny. Jeśli twój program nie może uzyskać wartości zwracanej podczas uruchamiania oddzielnego pliku wykonywalnego z błędnym sig, z pewnością jest więziony. Jeśli oddzielny plik wykonywalny zwraca A-OK, telefon jest zdecydowanie jailbreak.
Czy w App Store można pobrać (pod-) plik wykonywalny, którego podpis jest nieprawidłowy?
fbrereto
34
Być może coś się zmieniło, ale czy wykonanie oddzielnego pliku wykonywalnego nie uniemożliwiłoby Ci zatwierdzenia do sklepu z aplikacjami?
Peter Zich,
4
Czy ktoś może odpowiedzieć na poprzednie komentarze? To ważne pytania.
Petr
Nikt naprawdę nie powstrzyma Cię przed zapisaniem Mach-O na dysku z nieprawidłowym podpisem. Jednak nie zgadzam się z odpowiedzią, że sprawdzenie, czy jądro jest zepsute, nie jest zaangażowane lub że jest to ostateczne sprawdzenie w jakikolwiek sposób.
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}
Najbardziej zaawansowaną metodą, jaką znam, jest użycie objc_copyImageNames()funkcji. Zwraca listę aktualnie załadowanych bibliotek, a ponieważ większość ludzi ma MobileSubstrate na urządzeniach po jailbreaku i większość narzędzi do łamania iAP jest od niej zależna, pojawią się przynajmniej niektóre biblioteki MobileSubstrate.
Czy masz jakieś linki do tego, jak wyglądają biblioteki MobileSubstrate / CydiaSubstrate? Nie mam telefonu po jailbreaku do zabawy, więc jeżdżę „na ślepo”, a wyszukiwania w Google w zasadzie przychodzą z twoim komentarzem powyżej.
chadbag
@chadbag Ja też nie mam, ale możesz poszukać debpliku MobileSubstrate, rozpakować go i umieścić na czarnej liście (prawie) wszystko .dylibto jest spakowane.
Maxthon Chan
Dzięki, rozgryzłem trochę kodu i mogę dodać więcej rzeczy na podstawie twojego komentarza. Wielkie dzięki!
chadbag
4
Nie znam żadnych „interfejsów API”, które istnieją w tym celu. Gdyby tak było, produkt maskujący jailbreak szybko je zakrył.
Jak wiele osób zwraca uwagę, jest to gra w kotka i myszkę. A kiedy obaj gracze stają się ekspertami, wszystko sprowadza się do tego, kto wykona pierwszy ruch. (Osoba trzymająca urządzenie.)
Znalazłem wiele dobrych sugestii dotyczących wykrywania jailbreaków w nowej książce Zdziarskiego „Hacking and Securing iOS Apps”. (Osobiście zapłaciłem więcej za eBook O'Reilly, ponieważ pozwalają na kopiowanie i wklejanie).
Nie, nie jestem powiązany z wydawcami. Ale uważam, że to dobra książka. Nie lubię po prostu publikować błędów hakerów, aby mogli je naprawić, więc pomyślałem, że wskażę książkę.
Proponuję poszukać plików, których nie ma na „waniliowym” iPhonie. Wszystkie zestawy jailbreak, które widziałem, instalują ssh. To może być dobry wskaźnik telefonu po jailbreaku.
ssh nigdy nie jest instalowany automatycznie, użytkownicy muszą zainstalować go samodzielnie.
Grant Paul
1
Nie nadążałem za sceną jailbreak. Ale jak sobie przypominam, kiedy to pisałem (styczeń '09), Ziphone i inni instalowali domyślnie ssh i podsystem bsd. Może to już nieprawda.
Gordon Wilson
12
zaufaj mi, kiedy powiem, że chpwn dotrzymał kroku scenie jailbreak.
Winfield Trail
3
To, co zrobiliśmy, to to, że mamy już kanał RSS do komunikacji z naszymi użytkownikami ( Stocks Live ), umieściliśmy wiadomość, która brzmi mniej więcej tak:
Niektóre urządzenia po jailbreaku mają problemy bla bla bla, zrobiliśmy hack, aby rozwiązać te problemy, ale musimy wiedzieć, czy jest to urządzenie po jailbreaku, czy nie, naciśnij tutaj, aby aplikacja rozwiązała problem. Jeśli kiedykolwiek wrócisz do normalności, tj. Usunąłeś jailbreak, naciśnij tutaj.
Następnie przetwarzasz interakcję użytkownika i robisz to, co jest właściwe, np. Zachowujesz się inaczej itp.
Spróbuj znaleźć plik, który tworzy Cydia lub urządzenie po jailbreaku. Lub spróbuj pisać w pliku poza czarną skrzynką aplikacji. Jeśli ci się to uda, urządzenie jest przejęte / po jailbreaku :)
Firma Apple zatwierdziła Twoją aplikację, która zawiera powyższy kod?
karthikPrabhu Alagu
3
Użyj następującego kodu dla Swift 4 i nowszych wersji: Dodaj następujący kod w appdelegate:
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}}
Krok 2: Wywołaj to w viewDidLoad()kontrolerze widoku ekranu startowego (lub jakimkolwiek VC, do którego dzwonisz po raz pierwszy):
// show a blank screen or some other view controllerlet viewController =UIDevice.current.isJailBroken()?JailBrokenViewController():NextViewController()self.navigationController?.present(viewController, animated:true, completion:nil)
Spróbuj uzyskać dostęp do /Application/Preferences.app/General.plist Powinieneś być w stanie to zrobić na iPhonie z jailbreakiem Na telefonie innym niż Jb nie będziesz mógł uzyskać do niego dostępu
Odpowiedzi:
To zależy, co masz na myśli mówiąc o jailbreak. W prostym przypadku powinieneś być w stanie sprawdzić, czy Cydia jest zainstalowana i przejść przez to - coś w stylu
W przypadku zhakowanych jąder jest to trochę (dużo) bardziej skomplikowane.
źródło
fileExistsAtPath:
i sprawić, że wróciNO
na określoną ścieżkę, którą sprawdzasz.To jest kod, który łączy kilka odpowiedzi, które znalazłem na tę potrzebę, i zapewni znacznie wyższy wskaźnik sukcesu:
źródło
isJailbroken
Sprawdzanie ścieżki pliku
/Applications/Cydia.app
nie jest dozwolone na zwykłym telefonie? Nigdy nie słyszałem, aby Apple to wykrył i odrzucił aplikację, ale Apple jest nieprzewidywalny. Cydia ma schemat adresu URL cydia: //, który można legalnie sprawdzić za pomocą aplikacji UIApplicationcanOpenURL:
źródło
Sprawdzenie, czy jądro jest zepsute, nie jest TAKIE dużo bardziej skomplikowane.
Jailbreaking sprawia, że jądro sprawdza podpis podpisanego kodu zawsze raportuje, że kod jest podpisany poprawnie, a nieprzerwane telefony nie mogą uruchamiać kodu ze złym podpisem.
Dlatego dołącz do aplikacji oddzielny plik wykonywalny ze złym podpisem. Może to być po prostu program składający się z trzech wierszy, który ma funkcję main () i wartość zwracaną. Skompiluj plik wykonywalny bez podpisywania kodu (wyłącz go w Ustawieniach projektu-> Kompiluj) i podpisz go innym kluczem, używając narzędzia wiersza poleceń „Codesign”.
Niech Twoja aplikacja wykonuje oddzielny plik wykonywalny. Jeśli twój program nie może uzyskać wartości zwracanej podczas uruchamiania oddzielnego pliku wykonywalnego z błędnym sig, z pewnością jest więziony. Jeśli oddzielny plik wykonywalny zwraca A-OK, telefon jest zdecydowanie jailbreak.
źródło
źródło
Możesz wykryć, czy urządzenie jest JailBroken, czy nie, sprawdzając następujące elementy:
Istnieje biblioteka open source, którą stworzyłem z różnych artykułów i książek. Wypróbuj na GitHub !
źródło
W Swift 2.3 przerobiłem rozwiązanie dostarczone przez @Yossi
źródło
Najbardziej zaawansowaną metodą, jaką znam, jest użycie
objc_copyImageNames()
funkcji. Zwraca listę aktualnie załadowanych bibliotek, a ponieważ większość ludzi ma MobileSubstrate na urządzeniach po jailbreaku i większość narzędzi do łamania iAP jest od niej zależna, pojawią się przynajmniej niektóre biblioteki MobileSubstrate.źródło
deb
pliku MobileSubstrate, rozpakować go i umieścić na czarnej liście (prawie) wszystko.dylib
to jest spakowane.Nie znam żadnych „interfejsów API”, które istnieją w tym celu. Gdyby tak było, produkt maskujący jailbreak szybko je zakrył.
Jak wiele osób zwraca uwagę, jest to gra w kotka i myszkę. A kiedy obaj gracze stają się ekspertami, wszystko sprowadza się do tego, kto wykona pierwszy ruch. (Osoba trzymająca urządzenie.)
Znalazłem wiele dobrych sugestii dotyczących wykrywania jailbreaków w nowej książce Zdziarskiego „Hacking and Securing iOS Apps”. (Osobiście zapłaciłem więcej za eBook O'Reilly, ponieważ pozwalają na kopiowanie i wklejanie).
Nie, nie jestem powiązany z wydawcami. Ale uważam, że to dobra książka. Nie lubię po prostu publikować błędów hakerów, aby mogli je naprawić, więc pomyślałem, że wskażę książkę.
źródło
Spróbuj wykonać w aplikacji niepodpisany kod.
Urządzenia po jailbreaku mają zwykle następujące cechy:
Samo sprawdzenie istnienia pliku w celu wykrycia jailbreak jest skazane na niepowodzenie. Te kontrole są łatwe do ominięcia.
źródło
Niektóre typowe pliki do sprawdzenia:
/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
Większość sprawdza pliki związane z Cydią.
źródło
Proponuję poszukać plików, których nie ma na „waniliowym” iPhonie. Wszystkie zestawy jailbreak, które widziałem, instalują ssh. To może być dobry wskaźnik telefonu po jailbreaku.
źródło
To, co zrobiliśmy, to to, że mamy już kanał RSS do komunikacji z naszymi użytkownikami ( Stocks Live ), umieściliśmy wiadomość, która brzmi mniej więcej tak:
Następnie przetwarzasz interakcję użytkownika i robisz to, co jest właściwe, np. Zachowujesz się inaczej itp.
źródło
Spróbuj znaleźć plik, który tworzy Cydia lub urządzenie po jailbreaku. Lub spróbuj pisać w pliku poza czarną skrzynką aplikacji. Jeśli ci się to uda, urządzenie jest przejęte / po jailbreaku :)
źródło
Użyj następującego kodu dla Swift 4 i nowszych wersji: Dodaj następujący kod w appdelegate:
func applicationDidBecomeActive (_ application: UIApplication) {
źródło
Oto moje rozwiązania: Krok 1
Krok 2: Wywołaj to w
viewDidLoad()
kontrolerze widoku ekranu startowego (lub jakimkolwiek VC, do którego dzwonisz po raz pierwszy):źródło
Spróbuj uzyskać dostęp do /Application/Preferences.app/General.plist Powinieneś być w stanie to zrobić na iPhonie z jailbreakiem Na telefonie innym niż Jb nie będziesz mógł uzyskać do niego dostępu
źródło