Zusammenfassung der iOS-Jailbreak-Erkennung

Vorwort

Im vorherigen Artikel habe ich alle zusammengebracht, um einen Tweak zu erstellen, der die Jailbreak-Erkennung blockiert. In diesem Artikel lernen und klären wir gemeinsam mit allen die Jailbreak-Erkennungspunkte im iOS-System und verbessern gemeinsam unsere Optimierung.

Erkennen Sie Dateien mit Jailbreak

• Prinzip: Nach dem Jailbreak werden zusätzliche Dateien generiert. Sie können feststellen, ob ein Jailbreak durchgeführt werden soll, indem Sie beurteilen, ob diese Dateien vorhanden sind.

• Schlüsselfunktionen: fileExistsAtPath, fopen, access usw.

NSString *path = @"/Applications/Cydia.app";
NSFileManager *fileManager = [NSFileManager defaultManager];
BOOL isDirectory = NO;
if([fileManager fileExistsAtPath:path isDirectory:&isDirectory]){
    return 已越狱;
}

Erkennung privater Verzeichnisse

• Prinzip: Die Berechtigungen ändern sich nach dem Jailbreak und Sie können Dateiinformationen im privaten Verzeichnis abrufen oder Dateien im privaten Verzeichnis lesen und schreiben.

• Schlüsselfunktionen: stat, statfs, isWritableFileAtPath, isReadableFileAtPath, isExecutableFileAtPath, isDeletableFileAtPath, writeToFile, removeItemAtPath usw.

struct stat stat_info;
if(stat("/Application/Cydia.app", &stat_info) == 0) {
    return 已越狱;
}

NSError* mrror;
NSString *test = @"jailbreak";
NSString *path = @"/private/................./test.txt";
if([test writeToFile:path atomically:YES encoding:NSStringEncodingConversionAllowLossy error:&mrror]) {
    return 已越狱;
}

Jailbreak-Software erkennen

• Prinzip: Versuchen Sie, die Jailbreak-Software über das URL-Schema zu öffnen. Wenn sie geöffnet werden kann, bedeutet dies, dass sie einen Jailbreak aufweist.

• Schlüsselfunktion: canOpenURL

if([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"cydia://package/com.example.package"]])
{
    return 已越狱;
}

Erkennen Sie, ob das Systemverzeichnis zu einem Link wird

• Prinzip: Nach dem Jailbreak werden einige Dateiverzeichnisse in andere Bereiche verschoben, die ursprünglichen Dateispeicherorte müssen jedoch gültig sein, sodass ein symbolischer Link erstellt wird, der auf den ursprünglichen Pfad verweist.

• Tastenfunktion: lstat

struct stat sym;
if(lstat("/bin/bash", &sym) == 0 || sym.st_mode & S_IFLNK)
{
    return 已越狱;
}

Dynamische Bibliothekserkennung

• Prinzip 1: Verwenden Sie _dyld_get_image_name, um die dynamische Bibliothek abzurufen, und durchlaufen Sie die Informationen, um festzustellen, ob eine abnormale dynamische Bibliothek vorhanden ist

• Schlüsselfunktion: _dyld_get_image_name

int dyld_count = _dyld_image_count();
for (int i = 0; i < dyld_count; i++) {
    const char * imageName = _dyld_get_image_name(i);
    char * substr = "/Library/MobileSubstrate/MobileSubstrate.dylib";
    if(strcmp(imageName,substr) == 0){
        return 已越狱;
    }
}

• Prinzip 2: Einige nach dem Jailbreak installierte Plug-Ins können Systemfunktionen ersetzen, die erkennen können, ob einige Schlüsselfunktionen aus der dynamischen Bibliothek des Systems stammen.

• Tastenfunktion: dladdr

int ret;
Dl_info dylib_info;
int (*func_stat)(const char *,struct stat *) = stat;
if ((ret = dladdr(func_stat, &dylib_info))) {
    if (strcmp(dylib_info.dli_fname,"/usr/lib/system/libsystem_kernel.dylib") != 0) {
        return 已越狱;
    }
}

• Prinzip 3: Im Allgemeinen werden Anti-Jailbreak-Plugins „hook_dyld_get_image_name“ verwenden, was zu keiner Übereinstimmung führt. Sie können den Rückruf verwenden, wenn das Bild geladen wird, um die dynamischen Bibliotheksinformationen aus dem MachO-Header zu erkennen. Es sollte beachtet werden, dass bei Verwendung von dladdr to Erkennen Sie die Bibliotheksinformationen. Möglicherweise wird auch ein Fehler zurückgegeben, und es ist eine weitere Beurteilung erforderlich.

• Tastenfunktion: dladdr

+ (void)load {
  static dispatch_once_t onceToken;
  dispatch_once(&onceToken, ^{
    _dyld_register_func_for_add_image(_check_image);
  });
}
static void _check_image(const struct mach_header *header, intptr_t slide) {
    char *path = "/usr/lib/substrate";
    Dl_info info;

    dladdr(header, &info);
    if(info.dli_fname != NULL) {
        if (strstr(info.dli_fname,path)) {
            return 已越狱;
        }
    }
}

Erkennung von Umgebungsvariablen

• Prinzip: Beim Injizieren dynamischer Bibliotheken werden dynamische Bibliotheken über DYLD_INSERT_LIBRARIES injiziert, und ob der Jailbreak vorliegt, wird durch Erkennen der Umgebungsvariablen des aktuell ausgeführten Programms bestimmt

• Schlüsselfunktion: getenv

if(!(NULL == getenv("DYLD_INSERT_LIBRARIES"))) {
    return 已越狱;
}

Erkennung von Systemaufrufen

• Prinzip: Das Prinzip ist dasselbe wie bei anderen Erkennungsmethoden, die aufrufende Methode ist jedoch unterschiedlich

• Schlüsselfunktionen: syscall (SYS_syscall, SYS_access, SYS_stat, SYS_stat64, SYS_open, SYS_lstat, SYS_lstat64 usw.)

if(syscall(SYS_access, "/bin/sh", F_OK) == 0){
    return 已越狱;
}

Erkennung von Befehlssatzaufrufen

• Prinzip: Dasselbe wie das Prinzip des Systemaufrufs, mit der Ausnahme, dass nicht die vom System gekapselte Funktion Syscall verwendet wird, sondern direkt die Assembly-Ausführung verwendet wird.

• Schlüsselfunktionen: svc 0x80 (SYS_syscall, SYS_access, SYS_stat, SYS_stat64, SYS_open, SYS_lstat, SYS_lstat64 usw.)

MOV             X0, #0
MOV             W16, #1  //SYS_exit
SVC             0x80

Andere Möglichkeiten zur Erkennung

• Prinzip 1: Überprüfen Sie, ob es eine Klasse gibt, die Ausnahmen injiziert

• Schlüsselfunktionen: NSClassFromString usw.

• Prinzip 2: Erkennen Sie die Integrität der Sandbox, z. B. können Geräte ohne Jailbreak keine untergeordneten Prozesse usw. forken.

• Schlüsselfunktionen: fork, posix_spawn, popen, system usw.

• Prinzip 3: Überprüfen Sie, ob eine lokale SSH-Verbindung ausgeführt werden kann. Auf den meisten Geräten mit Jailbreak ist normalerweise OpenSSH installiert. Wenn die SSH-Verbindung erfolgreich erkannt werden kann, bedeutet dies, dass die Maschine einen Jailbreak aufweist.
Fügen Sie hier eine Bildbeschreibung ein

Guess you like

Origin blog.csdn.net/u010671061/article/details/134499666