كيف يمكنني اكتشاف أن تطبيق iOS يعمل على هاتف مكسور الحماية؟

StackOverflow https://stackoverflow.com/questions/413242

  •  03-07-2019
  •  | 
  •  

سؤال

إذا كنت أريد أن يعمل تطبيقي بشكل مختلف على جهاز iPhone مكسور الحماية، كيف يمكنني تحديد ذلك؟

هل كانت مفيدة؟

المحلول

وهذا يعتمد ما تعنيه الهروب من السجن. في حالة بسيطة، يجب أن تكون قادرا على معرفة ما إذا تم تثبيت سيديا ويذهب بها ذلك - شيء من هذا القبيل

NSString *filePath = @"/Applications/Cydia.app";
if ([[NSFileManager defaultManager] fileExistsAtPath:filePath])
{
   // do something useful
}

لحبات اختراق، انها قليلا (الكثير) أكثر انخراطا.

نصائح أخرى

+(BOOL)isJailbroken {
    NSURL* url = [NSURL URLWithString:@"cydia://package/com.example.package"];
    return [[UIApplication sharedApplication] canOpenURL:url];
}

وتدقيق لا يسمح لل/Applications/Cydia.app مسار الملف على الهاتف العادي؟ لم اسمع ابدا من شركة آبل الكشف عن هذه ورفض التطبيق لذلك، ولكن أبل لا يمكن التنبؤ بها. سيديا ديه على سديا مخطط URL: // حيث يمكن التحقق من الناحية القانونية مع UIApplication canOpenURL:

وهذا هو رمز التي تجمع بين بعض الإجابات وجدت لهذه الحاجة، وسوف تعطيك أعلى بكثير نسبة النجاح:

BOOL isJailbroken()
{
#if !(TARGET_IPHONE_SIMULATOR)

   if ([[NSFileManager defaultManager] fileExistsAtPath:@"/Applications/Cydia.app"] ||
       [[NSFileManager defaultManager] fileExistsAtPath:@"/Library/MobileSubstrate/MobileSubstrate.dylib"] ||
       [[NSFileManager defaultManager] fileExistsAtPath:@"/bin/bash"] ||
       [[NSFileManager defaultManager] fileExistsAtPath:@"/usr/sbin/sshd"] ||
       [[NSFileManager defaultManager] fileExistsAtPath:@"/etc/apt"] ||
       [[NSFileManager defaultManager] fileExistsAtPath:@"/private/var/lib/apt/"] ||
       [[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"cydia://package/com.example.package"]])  {
         return YES;
   }

   FILE *f = NULL ;
   if ((f = fopen("/bin/bash", "r")) ||
      (f = fopen("/Applications/Cydia.app", "r")) ||
      (f = fopen("/Library/MobileSubstrate/MobileSubstrate.dylib", "r")) ||
      (f = fopen("/usr/sbin/sshd", "r")) ||
      (f = fopen("/etc/apt", "r")))  {
         fclose(f);
         return YES;
   }
   fclose(f);

   NSError *error;
   NSString *stringToBeWritten = @"This is a test.";
   [stringToBeWritten writeToFile:@"/private/jailbreak.txt" atomically:YES encoding:NSUTF8StringEncoding error:&error];
   [[NSFileManager defaultManager] removeItemAtPath:@"/private/jailbreak.txt" error:nil];
   if(error == nil)
   {
      return YES;
   }

#endif

   return NO;
}

وفحص إذا ما تم كسر نواة ليس اكثر من ذلك بكثير المشاركة.

ونصائح والخدع يجعل التحقق من التوقيع نواة من التعليمات البرمجية الموقعة تقريرا دائما هذا الرمز وقعت بشكل صحيح، هواتف متصلة لا يمكن تشغيل تعليمات برمجية مع توقيع سيئة.

وهكذا، وتشمل تنفيذ منفصلة في التطبيق مع توقيع سيئة. ويمكن أن يكون مجرد برنامج 3-الخط الذي يحتوي الرئيسي () وقيمة المقابل. ترجمة للتنفيذ دون رمز توقيع (إيقاف تشغيله في مشروع إعدادات-> البناء) والتوقيع عليه مع مفتاح مختلفة باستخدام "codesign" أداة سطر الأوامر.

هل لديك التطبيق EXEC للتنفيذ منفصل. إذا كان البرنامج لا يمكن الحصول على قيمة الإرجاع عند تشغيل الملف القابل للتنفيذ منفصل مع سيج سيئة، انها سجنت بالتأكيد. إذا كان تنفيذ منفصلة يعود A-OK، وفون الهاتف بالتأكيد.

BOOL isJailbroken()
{
#if TARGET_IPHONE_SIMULATOR
    return 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
}

يمكنك اكتشاف ما إذا كان الجهاز JailBroken أم لا عن طريق التحقق مما يلي:

  • تم تثبيت سيديا
  • التحقق من بعض مسارات النظام
  • قم بإجراء فحص سلامة وضع الحماية
  • إجراء التحقق من الارتباط الرمزي
  • تحقق مما إذا كنت تقوم بإنشاء وكتابة الملفات خارج Sandbox الخاص بك

توجد مكتبة مفتوحة المصدر قمت بإنشائها من مقالات وكتب مختلفة. جربه على جيثب!

وأنا أعيدت صياغتها في سويفت 2.3 الحل التي قدمتهاYossi

public static func jailbroken(application: UIApplication) -> Bool {
    guard let cydiaUrlScheme = NSURL(string: "cydia://package/com.example.package") else { return isJailbroken() }
    return application.canOpenURL(cydiaUrlScheme) || isJailbroken()
}


static func isJailbroken() -> Bool {

    if isSimulator {
        return false
    }

    let fileManager = NSFileManager.defaultManager()
    if fileManager.fileExistsAtPath("/Applications/Cydia.app") ||
        fileManager.fileExistsAtPath("/Library/MobileSubstrate/MobileSubstrate.dylib") ||
        fileManager.fileExistsAtPath("/bin/bash") ||
        fileManager.fileExistsAtPath("/usr/sbin/sshd") ||
        fileManager.fileExistsAtPath("/etc/apt") ||
        fileManager.fileExistsAtPath("/usr/bin/ssh") {
        return true
    }

    if canOpen("/Applications/Cydia.app") ||
        canOpen("/Library/MobileSubstrate/MobileSubstrate.dylib") ||
        canOpen("/bin/bash") ||
        canOpen("/usr/sbin/sshd") ||
        canOpen("/etc/apt") ||
        canOpen("/usr/bin/ssh") {
        return true
    }

    let path = "/private/" + NSUUID().UUIDString
    do {
        try "anyString".writeToFile(path, atomically: true, encoding: NSUTF8StringEncoding)
        try fileManager.removeItemAtPath(path)
        return true
    } catch {
        return false
    }
}

static func canOpen(path: String) -> Bool {
    let file = fopen(path, "r")
    guard file != nil else { return false }
    fclose(file)
    return true
}

والأسلوب الأكثر تطورا وأنا أعلم وباستخدام وظيفة objc_copyImageNames(). تقوم بإرجاع قائمة المكتبات التي تم تحميلها حاليا ولأن معظم الناس لديهم MobileSubstrate على أجهزة اي فون ويعتمد معظم أدوات الكراك IAP على ذلك، وعلى الأقل بعض المكتبات MobileSubstrate تظهر.

وأنا لست على علم بأي "واجهات برمجة التطبيقات" التي توجد لهذا الغرض. إذا كان هناك، ثم المنتج اخفاء الهروب من السجن ستغطي بسرعة لهم.

وكما الكثير من الناس يشيرون، بل هو لعبة القط والفأر. وبعد أن تصبح كل من اللاعبين الخبراء، يأتي كل ذلك ليحصل على هذه الخطوة الأولى. (الشخص الذي يحمل الجهاز).

ولقد وجدت العديد من الاقتراحات الجيدة للكشف عن الهروب من السجن في كتابه Zdziarski الجديد "القرصنة وتأمين دائرة الرقابة الداخلية تطبيقات". (وأنا شخصيا دفعت أكثر لأورايلي الكتاب الاليكتروني لأنها تسمح النسخ واللصق).

لا، أنا لا ينتمي مع الناشرين. ولكن لم أجد أنه كتاب جيد. أنا لا أحب أن مجرد نشر الأخطاء القراصنة حتى يتمكنوا من حلها، حتى ظننت أنني كنت أشير إلى الكتاب.

حاول تنفيذ التعليمات البرمجية غير الموقعة من خلال التطبيق الخاص بك.

عادةً ما تتميز الأجهزة التي تم كسر الحماية بها بالخصائص التالية:

  • تشغيل التعليمات البرمجية غير الموقعة
  • تم تثبيت Cydia
  • لديه ملفات الهروب من السجن
  • الوصول الكامل r/w إلى نظام الملفات بأكمله
  • سيتم تعديل بعض ملفات النظام (المحتوى وبالتالي لا يتطابق sha1 مع الملفات الأصلية)
  • عالق في إصدار محدد (إصدار قابل للكسر)

مجرد التحقق من وجود الملف لاكتشاف كسر الحماية محكوم عليه بالفشل.من السهل تجاوز هذه الشيكات.

وبعض الملفات المشتركة للتحقق من: /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

ومعظم الاختيار عن الملفات ذات الصلة سيديا.

وأنا أقترح تبحث عن الملفات التي ليست موجودة على "الفانيليا" آي فون. جميع مستلزمات الهروب من السجن رأيت تثبيت الغطاء الأمني. التي قد تكون مؤشرا جيدا للهاتف اي فون.

وماذا فعلنا غير ذلك، لدينا بالفعل تغذية RSS للتواصل مع مستخدمينا (<لأ href = "http://itunes.apple.com/us/app/stocks-live-portfolio-manager/id473206441؟mt = 8 "يختلط =" نوفولو "> الأسهم لايف )، وضعنا خبرا التي تنص شيئا من هذا القبيل:

<اقتباس فقرة>   

وبعض أجهزة اي فون لديهم مشاكل يقاتل يقاتل يقاتل، التي قطعناها على أنفسنا الإختراق حل هذه القضايا لكننا بحاجة إلى معرفة ما إذا كان هذا الجهاز فون أو لا، اضغط هنا حتى التطبيق على إصلاح المشكلة. إذا كنت من أي وقت مضى العودة إلى وضعها الطبيعي، أي إزالة الهروب من السجن، اضغط هنا.

وبعد ذلك قمت بمعالجة تفاعل المستخدم وتفعل ما هو مناسب، مثل يتصرف مختلفة الخ ...

وحاول أن تجد الملف الذي سديا أو جهاز فون خلق. أو محاولة لكتابة في ملف خارج الاسود التطبيق. إذا كنت تنجح لفعل ذلك، والجهاز قد تم اختراقه / اي فون من:)

- (BOOL)jailbroken
{
    NSFileManager * fileManager = [NSFileManager defaultManager];
    return [fileManager fileExistsAtPath:@"/private/var/lib/apt/"];
}

ستتبع هدفًا متحركًا، لكن يمكنك محاولة متابعة تقدم هذه الموارد لمعرفة مدى فعالية أسلوبك:

وهيريس بلادي الحلول:

extension UIDevice {
    func isJailBroken() -> Bool {
        var jailBroken = false
        let cydiaPath = "/Applications/Cydia.app"
        let aptPath = "/private/var/lib/apt/"
        if FileManager.default.fileExists(atPath: cydiaPath) {
            jailBroken = true
        }
        if FileManager.default.fileExists(atPath: aptPath) {
            jailBroken = true
        }
        return jailBroken
    }
}

ووالذي يطلق عليه داخل viewDidLoad() داخل تحكم إطلاق عرض الشاشة (أو أيا كان VC الذي تتصل به للمرة الأولى):

    if UIDevice.current.isJailBroken() {
       // show a blank screen or some other view controller
       let jailbreakVC = JailBrokenViewController()
       self.navigationController?.present(jailbreakVC, animated: true, completion:nil)
    } else {
     // continue executing your next View controller
     let nextVC = NextViewController()
     self.navigationController?.present(nextVC, animated: true, completion:nil)
    }

ومحاولة الوصول /Application/Preferences.app/General.plist يجب أن تكون قادرة على القيام بذلك على اي فون اي فون على غير جي بي الهاتف لن تكون قادرة على الوصول إليه

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top