国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

IOS - 越獄檢測

這篇具有很好參考價值的文章主要介紹了IOS - 越獄檢測。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

判斷是否能打開越獄軟件

利用URL Scheme來查看是否能夠代開比如cydia這些越獄軟件

    //Check cydia URL hook canOpenURL 來繞過
    if([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"cydia://package/com.avl.com"]])
    {
        return YES;
    }

    if([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"cydia://package/com.example.package"]])
    {
        return YES;
    }
 frida-trace -U -f 包名  -m  "+[NSURL URLWithString:]"

包名 可以用 frida-ps -Ua來查看, 然后更改生成的js路徑腳本

 /*
 * Auto-generated by Frida. Please modify to match the signature of +[NSURL URLWithString:].
 * This stub is currently auto-generated from manpages when available.
 *
 * For full API reference, see: https://frida.re/docs/javascript-api/
 */

{
  /**
   * Called synchronously when about to call +[NSURL URLWithString:].
   *
   * @this {object} - Object allowing you to store state for use in onLeave.
   * @param {function} log - Call this function with a string to be presented to the user.
   * @param {array} args - Function arguments represented as an array of NativePointer objects.
   * For example use args[0].readUtf8String() if the first argument is a pointer to a C string encoded as UTF-8.
   * It is also possible to modify arguments by assigning a NativePointer object to an element of this array.
   * @param {object} state - Object allowing you to keep state across function calls.
   * Only one JavaScript function will execute at a time, so do not worry about race-conditions.
   * However, do not use this to store function arguments across onEnter/onLeave, but instead
   * use "this" which is an object for keeping state local to an invocation.
   */
  onEnter(log, args, state) {
	var URLName = ObjC.Object(args[2]);
	if(URLName.containsString_) {
		if(URLName.containsString_("http://") ||
		   URLName.containsString_("https://") ||
		   URLName.containsString_("file://")
		) {

		} else {
			if(URLName.containsString_("://")) {
				log(`+[NSURL URLWithString:]` + URLName);
				args[2] = ObjC.classes.NSString.stringWithString_("xxxxxx://");
			}
		}
	}

  },

  /**
   * Called synchronously when about to return from +[NSURL URLWithString:].
   *
   * See onEnter for details.
   *
   * @this {object} - Object allowing you to access state stored in onEnter.
   * @param {function} log - Call this function with a string to be presented to the user.
   * @param {NativePointer} retval - Return value represented as a NativePointer object.
   * @param {object} state - Object allowing you to keep state across function calls.
   */
  onLeave(log, retval, state) {
  }
}

判斷是否可以訪問一些越獄的文件

越獄后會產(chǎn)生額外的文件,通過判斷是否存在這些文件來判斷是否越獄了,可以用fopen和FileManager兩個不同的方法去獲取

BOOL fileExist(NSString* path)
{
    NSFileManager *fileManager = [NSFileManager defaultManager];
    BOOL isDirectory = NO;
    if([fileManager fileExistsAtPath:path isDirectory:&isDirectory]){
        return YES;
    }
    return NO;
}

BOOL directoryExist(NSString* path)
{
    NSFileManager *fileManager = [NSFileManager defaultManager];
    BOOL isDirectory = YES;
    if([fileManager fileExistsAtPath:path isDirectory:&isDirectory]){
        return YES;
    }
    return NO;
}

BOOL canOpen(NSString* path)
{
    FILE *file = fopen([path UTF8String], "r");
    if(file==nil){
        return fileExist(path) || directoryExist(path);
    }
    fclose(file);
    return YES;
}

 
 NSArray* checks = [[NSArray alloc] initWithObjects:@"/Application/Cydia.app",
                       @"/Library/MobileSubstrate/MobileSubstrate.dylib",
                       @"/bin/bash",
                       @"/usr/sbin/sshd",
                       @"/etc/apt",
                       @"/usr/bin/ssh",
                       @"/private/var/lib/apt",
                       @"/private/var/lib/cydia",
                       @"/private/var/tmp/cydia.log",
                       @"/Applications/WinterBoard.app",
                       @"/var/lib/cydia",
                       @"/private/etc/dpkg/origins/debian",
                       @"/bin.sh",
                       @"/private/etc/apt",
                       @"/etc/ssh/sshd_config",
                       @"/private/etc/ssh/sshd_config",
                       @"/Applications/SBSetttings.app",
                       @"/private/var/mobileLibrary/SBSettingsThemes/",
                       @"/private/var/stash",
                       @"/usr/libexec/sftp-server",
                       @"/usr/libexec/cydia/",
                       @"/usr/sbin/frida-server",
                       @"/usr/bin/cycript",
                       @"/usr/local/bin/cycript",
                       @"/usr/lib/libcycript.dylib",
                       @"/System/Library/LaunchDaemons/com.saurik.Cydia.Startup.plist",
                       @"/System/Library/LaunchDaemons/com.ikey.bbot.plist",
                       @"/Applications/FakeCarrier.app",
                       @"/Library/MobileSubstrate/DynamicLibraries/Veency.plist",
                       @"/Library/MobileSubstrate/DynamicLibraries/LiveClock.plist",
                       @"/usr/libexec/ssh-keysign",
                       @"/usr/libexec/sftp-server",
                       @"/Applications/blackra1n.app",
                       @"/Applications/IntelliScreen.app",
                       @"/Applications/Snoop-itConfig.app"
                       @"/var/lib/dpkg/info", nil];
    //Check installed app
    for(NSString* check in checks)
    {
        if(canOpen(check))
        {
            return YES;
        }
    }
 frida-trace -U -f 包名  -m  "-[NSFileManager fileExistsAtPath:]"
/*
 * Auto-generated by Frida. Please modify to match the signature of -[NSFileManager fileExistsAtPath:].
 * This stub is currently auto-generated from manpages when available.
 *
 * For full API reference, see: https://frida.re/docs/javascript-api/
 */

{
  /**
   * Called synchronously when about to call -[NSFileManager fileExistsAtPath:].
   *
   * @this {object} - Object allowing you to store state for use in onLeave.
   * @param {function} log - Call this function with a string to be presented to the user.
   * @param {array} args - Function arguments represented as an array of NativePointer objects.
   * For example use args[0].readUtf8String() if the first argument is a pointer to a C string encoded as UTF-8.
   * It is also possible to modify arguments by assigning a NativePointer object to an element of this array.
   * @param {object} state - Object allowing you to keep state across function calls.
   * Only one JavaScript function will execute at a time, so do not worry about race-conditions.
   * However, do not use this to store function arguments across onEnter/onLeave, but instead
   * use "this" which is an object for keeping state local to an invocation.
   */
  onEnter(log, args, state) {
	var fileName = ObjC.Object(args[2]);
	if(fileName.containsString_) {
		if(fileName.containsString_("apt") ||
	       fileName.containsString_("MobileSubstrate") ||
	       fileName.containsString_("Cydia") ||
	       fileName.containsString_("bash") ||
	       fileName.containsString_("ssh") ||
		   fileName.containsString_("/bin/sh") ||
	       fileName.containsString_("Applications") ||
		   fileName.containsString_("/bin/su") ||
		   fileName.containsString_("dpkg") 
	    ) {
			console.log('fileExistsAtPath called from:\n' +
				Thread.backtrace(this.context, Backtracer.ACCURATE)
					.map(DebugSymbol.fromAddress).join('\n') + '\n');
		   args[2] = ObjC.classes.NSString.stringWithString_("/xxxxxx");
		   log(`-[NSFileManager fileExistsAtPath: ${fileName}`);
	    }
	}
	//log(`-[NSFileManager fileExistsAtPath: ${fileName}`);
	
  },

  /**
   * Called synchronously when about to return from -[NSFileManager fileExistsAtPath:].
   *
   * See onEnter for details.
   *
   * @this {object} - Object allowing you to access state stored in onEnter.
   * @param {function} log - Call this function with a string to be presented to the user.
   * @param {NativePointer} retval - Return value represented as a NativePointer object.
   * @param {object} state - Object allowing you to keep state across function calls.
   */
  onLeave(log, retval, state) {

  }
}

關(guān)鍵詞檢測 :JailBroken 及 JailBreak 等;

使用frida腳本簡單干掉:

在啟動就注入進(jìn)去, -f是通過spawn,也就是重啟apk注入js

frida -U -f 包名 --no-pause -l 過越獄檢測.js文章來源地址http://www.zghlxwxcb.cn/news/detail-507347.html

//越獄檢測- 簡單先將返回1的Nop掉
var resolver = new ApiResolver('objc');
resolver.enumerateMatches('*[* *Jailb*]', {
    onMatch: function (match) {
        let funcName = match.name;
        let funcAddr = match.address;
        Interceptor.attach(ptr(funcAddr), {
            onEnter: function (args) {

            }, onLeave: function (retval) {
                if (retval.toInt32() === 1) {
                    retval.replace(0);
                }
                console.log(funcName, retval);
            }
        });
    }, onComplete: function () {

    }
});
resolver.enumerateMatches('*[* *JailB*]', {
    onMatch: function (match) {
        let funcName = match.name;
        let funcAddr = match.address;
        Interceptor.attach(ptr(funcAddr), {
            onEnter: function (args) {

            }, onLeave: function (retval) {
                if (retval.toInt32() === 1) {
                    retval.replace(0);
                }
                console.log(funcName, retval);
            }
        });
    }, onComplete: function () {

    }
});
resolver.enumerateMatches('*[* *jailB*]', {
    onMatch: function (match) {
        let funcName = match.name;
        let funcAddr = match.address;
        Interceptor.attach(ptr(funcAddr), {
            onEnter: function (args) {

            }, onLeave: function (retval) {
                if (retval.toInt32() === 1) {
                    retval.replace(0);
                }
                console.log(funcName, retval);
            }
        });
    }, onComplete: function () {

    }
});

到了這里,關(guān)于IOS - 越獄檢測的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 利用邏輯回歸判斷病人肺部是否發(fā)生病變

    利用邏輯回歸判斷病人肺部是否發(fā)生病變

    ? ? ? 大家好,我是帶我去滑雪! ? ? ? 判斷肺部是否發(fā)生病變可以及早發(fā)現(xiàn)疾病、指導(dǎo)治療和監(jiān)測疾病進(jìn)展,以及預(yù)防和促進(jìn)肺部健康,定期進(jìn)行肺部評估和檢查對于保護(hù)肺健康、預(yù)防疾病和提高生活質(zhì)量至關(guān)重要。本期將利用相關(guān)醫(yī)學(xué)臨床數(shù)據(jù)結(jié)合邏輯回歸判斷病人肺部

    2024年02月11日
    瀏覽(24)
  • 利用C語言去判斷是否為整數(shù)

    利用C語言去判斷是否為整數(shù)

    整型 int: 例如: int a=-3.2;? ?----? 輸出:-3 ? ? ? ? ? ? int b=4.75;? ----- 輸出:4 直接取整數(shù)部分?。?! 故引出判斷方法: C語言中可以有強制轉(zhuǎn)換類型的操作!??! ?if (? float? ? ==? ? int )? ?return true; ? ps:個人經(jīng)驗,心得理解分享! (僅供參考)

    2024年02月08日
    瀏覽(22)
  • 利用Matlab判斷系統(tǒng)是否可控可觀測

    利用Matlab判斷系統(tǒng)是否可控可觀測

    自動控制系統(tǒng)中,經(jīng)常會遇到需要判斷系統(tǒng)是否可控可觀測的情況,Matlab在這方面處理很方便快捷。 對于一個線性時不變動態(tài)方程來講,系統(tǒng)是否可控可以使用判據(jù) [ B , A B , A 2 B , . . . , A n ? 1 B ] [B ,AB ,A^2B,...,A^{n-1}B] [ B , A B , A 2 B , . . . , A n ? 1 B ] 進(jìn)行判斷,也就是判斷這

    2024年02月03日
    瀏覽(28)
  • 第四節(jié)(1):EXCEL中判斷一個WORD文件是否被打開

    第四節(jié)(1):EXCEL中判斷一個WORD文件是否被打開

    《VBA信息獲取與處理》教程(10178984)是我推出第六套教程,目前已經(jīng)是第一版修訂了。這套教程定位于最高級,是學(xué)完初級,中級后的教程。這部教程給大家講解的內(nèi)容有:跨應(yīng)用程序信息獲得、隨機信息的利用、電子郵件的發(fā)送、VBA互聯(lián)網(wǎng)數(shù)據(jù)抓取、VBA延時操作,剪貼板應(yīng)用

    2024年02月07日
    瀏覽(19)
  • 利用OpenCV判斷圖像是否過亮或過暗

    在處理圖像自動亮度調(diào)節(jié)時,需要判斷圖像是否過亮或者過暗,從而根據(jù)圖像給出的結(jié)果,進(jìn)行調(diào)節(jié)。方法如下:

    2024年02月15日
    瀏覽(18)
  • 利用JavaRestClient實現(xiàn)創(chuàng)建、刪除索引庫,判斷索引庫是否存在

    利用JavaRestClient實現(xiàn)創(chuàng)建、刪除索引庫,判斷索引庫是否存在

    在elasticsearch提供的API中,與elasticsearch一切交互都封裝在一個名為RestHighLevelClient的類中,必須先完成這個對象的初始化,建立與elasticsearch的連接。 1)引入es的RestHighLevelClient依賴: 注:導(dǎo)入的依賴的版本要和打開的es的版本對應(yīng) ?2)初始化RestHighLevelClient: ? ?把建庫的json封

    2024年02月11日
    瀏覽(84)
  • Unity利用正則表達(dá)式判斷字符串是否滿足要求

    首先該方法屬于C#,是C#提供的,不是unity提供的,但我使用這個是在unity中使用的,故此我將其歸入unity筆記。 該方式可用于注冊、登錄等等需要用戶輸入的場景,用以判斷字符串是否滿足正則表達(dá)式的要求 首先介紹該API 這里開始介紹,大家可以看看官方的文檔Regex.IsMatch 方

    2024年01月16日
    瀏覽(23)
  • 利用java語言中的stream流操作判斷一個數(shù)組中是否有重復(fù)元素

    判斷數(shù)組中是否有重復(fù)元素可以說是每一個編程語言初學(xué)者都會遇到的題目,常見的各種搜索算法本文不做贅述了,我們這次介紹的是利用java語言中特有的stream流操作來判斷通用類型數(shù)組是否包含重復(fù)元素。 首先我們聲明一個泛型方法: 表明該方法適用于所有類型的數(shù)組。

    2024年02月12日
    瀏覽(51)
  • 【車道線檢測】邊緣檢測+Hough變換車道線視頻自動檢測(判斷是否偏離)【含Matlab源碼 4083期】

    【車道線檢測】邊緣檢測+Hough變換車道線視頻自動檢測(判斷是否偏離)【含Matlab源碼 4083期】

    ?博主簡介:熱愛科研的Matlab仿真開發(fā)者,修心和技術(shù)同步精進(jìn),Matlab項目合作可私信。 ??個人主頁:海神之光 ??代碼獲取方式: 海神之光Matlab王者學(xué)習(xí)之路—代碼獲取方式 ??座右銘:行百里者,半于九十。 更多Matlab仿真內(nèi)容點擊?? Matlab圖像處理(進(jìn)階版) 路徑規(guī)劃

    2024年04月08日
    瀏覽(19)
  • Python-opencv實現(xiàn)目標(biāo)檢測定位:判斷固定顏色物體是否在規(guī)定區(qū)域內(nèi)

    Python-opencv實現(xiàn)目標(biāo)檢測定位:判斷固定顏色物體是否在規(guī)定區(qū)域內(nèi)

    主要實現(xiàn)實時檢測視頻或者攝像頭中出現(xiàn)的固定顏色(本例中使用綠色)是否在規(guī)定的區(qū)域范圍內(nèi),并將結(jié)果反饋到原視頻上。 實現(xiàn)的效果如下圖所示: 1、當(dāng)綠色物體出現(xiàn)在屏幕中的黑框中時,在視頻左上角反饋一個“True”的信息。 2、當(dāng)綠色物體出現(xiàn)在屏幕中但沒有完全

    2024年01月17日
    瀏覽(15)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包