檢測iOS客戶端是否越獄

fpkoko發表於2017-12-14

一般來說做iOS APP都會加入檢測越獄的方法,現將幾種知道的方法寫在下面

0x1:

_dyld_image_count 和_dyld_get_image_name()
_dyld_image_count //可以獲得APP載入的dylib的數量
_dyld_get_image_name() //可以獲得第x個dylib的全路徑

上圖所示, 只需要判斷路徑.或者dylib的名字就好.
越獄之後外掛的dylib的路徑為/Library/MobileSubstrate/DynamicLibraries
別忘了<mach-o/dyld.h>標頭檔案
複製程式碼

第一種方法 也是微信所使用的:

程式碼
微信檢測
微信檢測

0x2:

利用URL Scheme

NSURL* url=[NSURL URLWithString:@"cydia://package/com.example.package"];
UIApplication* app=[UIApplication sharedApplication];
BOOL isJailBroken=[app canOpenURL:url];
if(isJailBroken){
NSLog(@"已經被越獄");
}else{
NSLog(@"未越獄");
}
複製程式碼

這也是QQ檢查越獄的一種機制

QQ檢測越獄

0x3:

檢測目錄
@"/etc/ssh/sshd_config";
@"/usr/libexec/ssh-keysign";
@"/usr/sbin/sshd";
@"/bin/sh";
@"/bin/bash";
@"/etc/apt";
@"/Application/Cydia.app/";
@"/Library/MobileSubstrate/MobileSubstrate.dylib"
NSFileManager* fileManager=[NSFileManager defaultManager];
[fileManager fileExistsAtPath:] //以上任意一種
只要返回結果是1 那就是越獄了的

複製程式碼

QQ檢測
也是QQ檢測越獄的一種方式

一般來說客戶端可以做適當的混淆,或者函式名不要那麼的明顯,比如:isJailbroken...很明顯一看就是檢測越獄的..記得曾經看到有人用[ woHaveMeiHaveZiYou]來檢測.也是妥妥的.

相關文章