Itu tergantung apa yang Anda maksud dengan jailbreak. Dalam kasus sederhana, Anda harus dapat melihat apakah Cydia diinstal dan pergi dengan itu - sesuatu seperti
NSString*filePath =@"/Applications/Cydia.app";if([[NSFileManager defaultManager] fileExistsAtPath:filePath]){// do something useful}
Untuk kernel yang diretas, ini sedikit (banyak) lebih banyak terlibat.
Bukankah akan cukup untuk mencari setiap file / dir luar sandbox Anda? Suka / etc?
Rhythmic Fistman
58
Perhatikan bahwa tidak semua pengguna memasang Cydia - ini bukan pemeriksaan yang baik, dan Anda sebaiknya memeriksa sesuatu seperti / bin / bash yang / semua / pengguna / akan / miliki.
Berikan Paul
2
Di mana apt menyimpan informasinya? Atau bisakah saya memanggil perintah system () dan mencari tahu. Saya ingin mengetahui apakah mereka memiliki aplikasi tertentu, dan jika mereka memilikinya, maka batasi aplikasinya
conradev
2
@RazorSharp Pada titik ini, hampir semua pengguna memiliki Cydia. Mungkin cukup untuk memeriksanya sekarang. Namun, jika Anda ingin cek 100% andal, Anda ingin menggunakan cek berbasis kernel seperti di bawah ini.
Berikan Paul
1
FWIW pemeriksaan file sepele untuk memotong. Satu dapat menggunakan ponsel substrat untuk menghubungkan fileExistsAtPath:dan membuatnya kembali NOuntuk jalur spesifik yang Anda periksa.
toasted_flakes
55
Ini adalah kode yang menggabungkan beberapa jawaban yang saya temukan untuk kebutuhan ini, dan akan memberi Anda tingkat keberhasilan yang jauh lebih tinggi:
@Porizm, ini hanya kombinasi dari beberapa jawaban yang saya temukan. Beberapa dari mereka tidak bekerja untuk saya, tetapi bekerja untuk orang lain .. jadi dengan kode ini Anda tidak mengambil risiko .. Jika Anda menggunakan ini, Anda dapat 99% yakin. Mengenai kinerja, Anda dapat menjalankannya hanya sekali di setiap lari dan menyimpan jawabannya di suatu tempat, Anda tidak harus menjalankannya setiap kali ..
Yossi
3
@yossi dan apel porizm menyetujui aplikasi Anda yang berisi kode di atas? tolong balas
karthikPabab Alagu
4
Metode ini harus berupa fungsi C inline, bukan Objective-C. Terlalu mudah untuk menemukan dan mem-bypass metode Objective-C, terutama jika Anda menyebutnyaisJailbroken
progrmr
2
@Yossi apakah perangkat penutup ini di-jailbreak menggunakan Taig?
Lakshay
3
@Lakshay Saya tidak tahu .. Anda lebih dari diundang untuk memeriksa dan menambahkan di sini jawaban :)
Memeriksa jalur file /Applications/Cydia.apptidak diizinkan di ponsel biasa? Saya belum pernah mendengar Apple mendeteksi ini dan menolak aplikasi untuk itu, tetapi Apple tidak dapat diprediksi. Cydia memiliki skema URL cydia: // yang dapat diperiksa secara hukum dengan aplikasi UIAcanOpenURL:
Ini adalah cara yang bagus untuk memeriksa, dan itu tidak pergi ke luar kotak pasir Anda. Tentu, jika jailbreaker tidak menginstal Cydia, itu akan mengembalikan TIDAK, tapi saya pikir sebagian besar Jailbreak menginstal Cydia.
Wim Haanstra
dapatkah string ini tidak diubah ketika aplikasi di-crack?
NSRover
8
Untuk iOS9.0 + Anda juga perlu menambahkan kunci LSApplicationQueriesSchemes dalam daftar aplikasi. Kalau tidak, canOpenURL akan selalu mengembalikan false.
David V
1
Ini akan memberikan false-positive jika pengguna menginstal aplikasi yang sesuai dengan skema cydia: // seperti InstantTV.
thattyson
@ terima kasih terima kasih! Saya mencari tahu mengapa saya mendapatkan hasil positif palsu
rickrvo
52
Memeriksa apakah kernelnya rusak tidak banyak yang terlibat.
Jailbreaking membuat pemeriksaan tanda tangan kernel terhadap kode yang ditandatangani selalu melaporkan bahwa kode tersebut ditandatangani dengan benar, telepon yang tidak terputus tidak dapat menjalankan kode dengan tanda tangan yang buruk.
Jadi, sertakan executable terpisah dalam aplikasi dengan tanda tangan yang buruk. Itu bisa saja program 3-line yang memiliki main () dan nilai pengembalian. Kompilasi yang dapat dieksekusi tanpa menandatangani kode (matikan di Pengaturan Proyek-> Bangun) dan menandatanganinya dengan kunci yang berbeda menggunakan utilitas commandline "codesign".
Apakah aplikasi Anda mengeksekusi executable terpisah. Jika program Anda tidak bisa mendapatkan nilai kembali saat menjalankan executable terpisah dengan sig buruk, itu pasti dipenjara. Jika executable yang terpisah mengembalikan A-OK, ponsel ini pasti sudah di-jailbreak.
Bisakah Anda mendapatkan (sub-) executable yang tanda tangannya tidak valid seperti itu melalui App Store?
fbrereto
34
Mungkin banyak hal telah berubah tetapi tidakkah mengeksekusi executable terpisah mencegah Anda dari disetujui ke app store?
Peter Zich
4
Bisakah seseorang menjawab sebelum komentar? Ini pertanyaan penting.
Petr
Tidak ada yang benar-benar akan menghentikan Anda dari menulis Mach-O ke disk dengan tanda tangan yang tidak valid. Namun, saya tidak setuju dengan jawaban bahwa memeriksa bahwa kernel rusak tidak terlibat atau bahwa ini adalah pemeriksaan definitif dengan cara apa pun.
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}
Metode paling canggih yang saya tahu adalah menggunakan objc_copyImageNames()fungsi. Ini mengembalikan daftar pustaka yang saat ini dimuat dan karena kebanyakan orang memiliki MobileSubstrate pada perangkat yang di-jailbreak dan sebagian besar alat crack iAP bergantung padanya, setidaknya beberapa pustaka MobileSubstrate akan muncul.
Apakah Anda memiliki tautan tentang seperti apa perpustakaan MobileSubstrate / CydiaSubstrate? Saya tidak punya ponsel yang sudah di-jailbreak untuk dimainkan sehingga saya mengemudi "buta" dan pencarian Google pada dasarnya muncul dengan komentar Anda di atas.
chadbag
@chadbag Saya tidak punya satu juga, tetapi Anda dapat mencari debfile MobileSubstrate, membongkar dan blacklist (hampir) semua .dylibitu dikemas.
Maxthon Chan
Terima kasih, saya menemukan beberapa kode dan saya dapat menambahkan beberapa hal lagi berdasarkan komentar Anda. Terimakasih banyak!
chadbag
4
Saya tidak mengetahui adanya "API" yang ada untuk ini. Jika ada, maka produk mask-jailbreak akan segera menutupinya.
Seperti yang ditunjukkan oleh banyak orang, ini adalah permainan kucing-dan-tikus. Dan setelah kedua pemain menjadi ahli, semuanya tergantung siapa yang mendapatkan langkah pertama. (Orang yang memegang perangkat.)
Saya menemukan banyak saran bagus untuk mendeteksi jailbreak di buku baru Zdziarski "Meretas dan Mengamankan Aplikasi iOS". (Secara pribadi, saya membayar lebih untuk eBook O'Reilly karena mereka mengizinkan salin dan tempel.)
Tidak, saya tidak berafiliasi dengan penerbit. Tetapi saya menemukan buku yang bagus. Saya tidak suka hanya mempublikasikan kesalahan peretas sehingga mereka bisa memperbaikinya, jadi saya pikir saya akan menunjuk ke buku itu.
Saya sarankan mencari file yang tidak ada di iPhone "vanilla". Semua kit jailbreak yang saya lihat menginstal ssh. Itu mungkin indikator yang baik untuk telepon yang rusak.
ssh tidak pernah diinstal secara otomatis, pengguna harus menginstalnya sendiri.
Berikan Paul
1
Saya belum benar-benar mengikuti adegan jailbreak. Tapi seingat saya, ketika saya menulis ini (Jan '09), Ziphone dan yang lainnya menginstal ssh dan subsistem bsd secara default. Mungkin itu tidak benar lagi.
Gordon Wilson
12
percayalah ketika saya mengatakan bahwa chpwn telah mengikuti adegan jailbreak.
Jalur Winfield
3
Apa yang kami lakukan adalah, kami sudah memiliki umpan RSS untuk berkomunikasi dengan pengguna kami ( Stocks Live ), kami menempatkan item berita yang menyatakan sesuatu seperti ini:
Beberapa perangkat jailbroken memiliki masalah bla bla bla, kami melakukan peretasan untuk menyelesaikan masalah tersebut, tetapi kami perlu tahu apakah ini perangkat yang di-jailbreak atau tidak, tekan di sini sehingga aplikasi memperbaiki masalah tersebut. Jika Anda pernah kembali ke normal, yaitu menghapus jailbreak, tekan di sini.
Kemudian Anda memproses interaksi pengguna dan melakukan apa yang sesuai, seperti berperilaku berbeda dll ...
Cobalah untuk menemukan file yang dibuat oleh cydia atau perangkat yang sudah di-jailbreak. Atau coba tulis dalam file di luar kotak hitam aplikasi. Jika Anda berhasil melakukannya, perangkat ini akan dikompromikan / jailbreak :)
Apple menyetujui aplikasi Anda yang berisi kode di atas?
karthikPrabhu Alagu
3
Silakan gunakan kode berikut untuk Swift 4 dan di atas: Tambahkan kode berikut di delegasi app:
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}}
Langkah 2: Sebut di viewDidLoad()dalam di dalam controller tampilan layar peluncuran Anda (atau VC apa pun yang Anda panggil untuk pertama kalinya):
// show a blank screen or some other view controllerlet viewController =UIDevice.current.isJailBroken()?JailBrokenViewController():NextViewController()self.navigationController?.present(viewController, animated:true, completion:nil)
Cobalah Untuk Mengakses / Aplikasi / Preferensi.app/General.plist Anda harus dapat melakukannya pada iPhone yang sudah di-jailbreak Pada telepon non-Jb Anda tidak akan dapat mengaksesnya
Jawaban ini akan lebih menarik dengan kode sumber. IMHO: Ini akan memberi Anda upvote.
Johan Karlsson
5
-1 = Perangkat yang tidak rusak dapat juga membuka dan membaca file ini. (Diuji)
frankish
@JohanKarlsson Saya berasumsi bahwa pembaca di sini dapat menulis kode sumber mereka sendiri. Jika mereka tidak bisa - apa yang mereka lakukan di sini?
Jawaban:
Itu tergantung apa yang Anda maksud dengan jailbreak. Dalam kasus sederhana, Anda harus dapat melihat apakah Cydia diinstal dan pergi dengan itu - sesuatu seperti
Untuk kernel yang diretas, ini sedikit (banyak) lebih banyak terlibat.
sumber
fileExistsAtPath:
dan membuatnya kembaliNO
untuk jalur spesifik yang Anda periksa.Ini adalah kode yang menggabungkan beberapa jawaban yang saya temukan untuk kebutuhan ini, dan akan memberi Anda tingkat keberhasilan yang jauh lebih tinggi:
sumber
isJailbroken
Memeriksa jalur file
/Applications/Cydia.app
tidak diizinkan di ponsel biasa? Saya belum pernah mendengar Apple mendeteksi ini dan menolak aplikasi untuk itu, tetapi Apple tidak dapat diprediksi. Cydia memiliki skema URL cydia: // yang dapat diperiksa secara hukum dengan aplikasi UIAcanOpenURL:
sumber
Memeriksa apakah kernelnya rusak tidak banyak yang terlibat.
Jailbreaking membuat pemeriksaan tanda tangan kernel terhadap kode yang ditandatangani selalu melaporkan bahwa kode tersebut ditandatangani dengan benar, telepon yang tidak terputus tidak dapat menjalankan kode dengan tanda tangan yang buruk.
Jadi, sertakan executable terpisah dalam aplikasi dengan tanda tangan yang buruk. Itu bisa saja program 3-line yang memiliki main () dan nilai pengembalian. Kompilasi yang dapat dieksekusi tanpa menandatangani kode (matikan di Pengaturan Proyek-> Bangun) dan menandatanganinya dengan kunci yang berbeda menggunakan utilitas commandline "codesign".
Apakah aplikasi Anda mengeksekusi executable terpisah. Jika program Anda tidak bisa mendapatkan nilai kembali saat menjalankan executable terpisah dengan sig buruk, itu pasti dipenjara. Jika executable yang terpisah mengembalikan A-OK, ponsel ini pasti sudah di-jailbreak.
sumber
sumber
Anda dapat mendeteksi apakah suatu perangkat adalah JailBroken atau tidak dengan memeriksa yang berikut ini:
Ada perpustakaan open source yang saya buat dari berbagai artikel dan buku. Cobalah di GitHub !
sumber
Saya mengerjakan ulang di Swift 2.3 solusi yang disediakan oleh @Yossi
sumber
Metode paling canggih yang saya tahu adalah menggunakan
objc_copyImageNames()
fungsi. Ini mengembalikan daftar pustaka yang saat ini dimuat dan karena kebanyakan orang memiliki MobileSubstrate pada perangkat yang di-jailbreak dan sebagian besar alat crack iAP bergantung padanya, setidaknya beberapa pustaka MobileSubstrate akan muncul.sumber
deb
file MobileSubstrate, membongkar dan blacklist (hampir) semua.dylib
itu dikemas.Saya tidak mengetahui adanya "API" yang ada untuk ini. Jika ada, maka produk mask-jailbreak akan segera menutupinya.
Seperti yang ditunjukkan oleh banyak orang, ini adalah permainan kucing-dan-tikus. Dan setelah kedua pemain menjadi ahli, semuanya tergantung siapa yang mendapatkan langkah pertama. (Orang yang memegang perangkat.)
Saya menemukan banyak saran bagus untuk mendeteksi jailbreak di buku baru Zdziarski "Meretas dan Mengamankan Aplikasi iOS". (Secara pribadi, saya membayar lebih untuk eBook O'Reilly karena mereka mengizinkan salin dan tempel.)
Tidak, saya tidak berafiliasi dengan penerbit. Tetapi saya menemukan buku yang bagus. Saya tidak suka hanya mempublikasikan kesalahan peretas sehingga mereka bisa memperbaikinya, jadi saya pikir saya akan menunjuk ke buku itu.
sumber
Coba jalankan kode yang tidak ditandatangani melalui aplikasi Anda.
Perangkat yang di-jailbreak biasanya memiliki karakteristik sebagai berikut:
Hanya memeriksa keberadaan file untuk deteksi jailbreak pasti gagal. Pemeriksaan ini mudah dilewati.
sumber
Beberapa file umum untuk diperiksa:
/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
Sebagian besar memeriksa file terkait Cydia.
sumber
Saya sarankan mencari file yang tidak ada di iPhone "vanilla". Semua kit jailbreak yang saya lihat menginstal ssh. Itu mungkin indikator yang baik untuk telepon yang rusak.
sumber
Apa yang kami lakukan adalah, kami sudah memiliki umpan RSS untuk berkomunikasi dengan pengguna kami ( Stocks Live ), kami menempatkan item berita yang menyatakan sesuatu seperti ini:
Kemudian Anda memproses interaksi pengguna dan melakukan apa yang sesuai, seperti berperilaku berbeda dll ...
sumber
Cobalah untuk menemukan file yang dibuat oleh cydia atau perangkat yang sudah di-jailbreak. Atau coba tulis dalam file di luar kotak hitam aplikasi. Jika Anda berhasil melakukannya, perangkat ini akan dikompromikan / jailbreak :)
sumber
Silakan gunakan kode berikut untuk Swift 4 dan di atas: Tambahkan kode berikut di delegasi app:
func applicationDidBecomeActive (_ application: UIApplication) {
sumber
Inilah solusi saya: Langkah 1
Langkah 2: Sebut di
viewDidLoad()
dalam di dalam controller tampilan layar peluncuran Anda (atau VC apa pun yang Anda panggil untuk pertama kalinya):sumber
Cobalah Untuk Mengakses / Aplikasi / Preferensi.app/General.plist Anda harus dapat melakukannya pada iPhone yang sudah di-jailbreak Pada telepon non-Jb Anda tidak akan dapat mengaksesnya
sumber