App檢測全方位剖析

一、App檢測設備

為了保障軟體的安全性,開發者需要對使用環境進行檢測,其中設備型號、操作系統版本、是否越獄等都是非常重要的因素。

在iOS設備上,可以使用UIDevice類獲取各種硬體和軟體信息,如設備類型、iOS版本、是否越獄等。在Android平台上,常用的設備檢測方法是檢測是否具有root許可權,若有則認為該設備不安全。

// iOS設備檢測示例代碼- (BOOL)isJailBroken {    BOOL jailBroken = NO;    NSString *cydiaPath = @"/Applications/Cydia.app";    NSString *aptPath = @"/private/var/lib/apt/";    if ([[NSFileManager defaultManager] fileExistsAtPath:cydiaPath]) {        jailBroken = YES;    }    if ([[NSFileManager defaultManager] fileExistsAtPath:aptPath]) {        jailBroken = YES;    }    return jailBroken;}

// Android設備檢測示例代碼private boolean isRoot() {    Process process = null;    try {        process = Runtime.getRuntime().exec("/system/xbin/which su");        BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream()));        String suPath = in.readLine();        if (suPath != null) {            return true;        }        return false;    } catch (Throwable e) {        return false;    } finally {        if (process != null) {            process.destroy();        }    }}

二、App檢測Root不讓使用

檢測到設備已經root後,有一些應用會強制退出,或者拒絕繼續運行。

這裡介紹兩種比較常見的檢測方式:一種是檢測root文件系統的一些文件,如 /system/bin/su、/su/bin/su、/magisk,如果文件存在則認為設備已經被root。另一種方式是使用Xposed框架,Hook掉進程和文件,從而可以繞過檢測。

// 檢測文件是否存在,判斷設備是否已rootprivate boolean isRoot() {    String[] paths = {"/system/bin/su", "/system/usr/su", "/system/xbin/su",     "/system/su", "/sbin/su", "/vendor/bin/su", "/su/bin/su", "/magisk"};    for (String path : paths) {        if (new File(path).exists()) {            return true;        }    }    return false;}

// 使用Xposed框架,繞過Root檢測示例代碼public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable{    if (lpparam.packageName.equals("com.app")) {        findAndHookMethod("android.os.SystemProperties", lpparam.classLoader, "get", String.class, new XC_MethodHook() {            @Override            protected void beforeHookedMethod(MethodHookParam param) throws Throwable {                if ("ro.build.selinux".equals(param.args[0])) {                    param.setResult("Permissive");                }                super.beforeHookedMethod(param);            }        });    }}

三、App檢測代理

在網路安全中,代理被廣泛使用,以保護用戶的隱私和安全。但是有些應用會禁止使用代理,此時我們需要進行代理檢測,確保代理不被應用檢測到。

常用的檢測方式是檢測當前應用的網路請求是否經過了代理,以及檢測當前設備是否開啟了系統級代理。如果經過代理,則直接攔截請求,否則直接發送請求。

// 檢測代理是否開啟示例代碼private boolean isProxyEnabled() {    String proxyHost = System.getProperty("http.proxyHost");    String proxyPort = System.getProperty("http.proxyPort");    return !TextUtils.isEmpty(proxyHost) && !TextUtils.isEmpty(proxyPort);}

// 設置系統級代理示例代碼public void setProxy() {    System.setProperty("http.proxyHost", "192.168.1.1");    System.setProperty("http.proxyPort", "8888");}

四、App檢測平台

有些應用只開放了特定平台的下載和使用,例如iOS應用只能在iOS設備上下載。為了安裝和使用這些應用程序,我們可以通過模擬平台信息的方式來繞過平台檢測,讓應用檢測到我們的設備為目標平台設備。

// Java代碼模擬iOS設備System.setProperty("http.agent", "Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us)\n" +        " AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B314 Safari/531.21.10");

// Android代碼模擬iOS設備WebView webView = new WebView(context);WebSettings settings = webView.getSettings();settings.setUserAgentString("Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us)\n" +        " AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B314 Safari/531.21.10");

五、App檢測不到NFC

NFC作為近場通訊技術,現在已經被廣泛應用於移動設備支付、門禁卡等領域,但是有些應用會進行NFC檢測,如果檢測到設備不支持NFC,則會禁止應用使用。

針對這種情況,我們可以通過hook掉檢測函數,繞過NFC檢測。

// Hook掉NFC檢測函數示例代碼public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable{    if (lpparam.packageName.equals("com.app")) {        findAndHookMethod("com.app.NFCManager", lpparam.classLoader, "checkNFC", new XC_MethodReplacement() {            @Override            protected Object replaceHookedMethod(MethodHookParam param) throws Throwable {                return true;            }        });    }}

六、App檢測WiFi連接

在有些應用中,需要在特定的WiFi環境下使用,例如內部WiFi。此時如果WiFi連接不上,則應用會直接崩潰或強制退出。

解決這個問題的方法比較簡單,只需要將設備的WiFi模塊關閉,或者截獲應用檢測WiFi的函數,使其直接返回有連接的狀態。

// 關閉WiFi模塊示例代碼WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);wifiManager.setWifiEnabled(false);

// Hook掉WiFi檢測函數示例代碼public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) {    if (lpparam.packageName.equals("com.app")) {        XposedHelpers.findAndHookMethod("com.app.WifiUtils", lpparam.classLoader,        "isWifiConnected", new XC_MethodReplacement() {            @Override            protected Object replaceHookedMethod(MethodHookParam param) throws Throwable {                return true;            }        });    }}

七、App檢測投屏怎麼辦

有些應用會檢測設備是否進行了投屏操作,如果發現投屏則會強制退出或者提示不允許投屏。

針對這種情況,我們可以使用Xposed插件來hook掉投屏檢測函數,或者使用投屏模塊來偽裝不進行投屏操作。

// Hook掉投屏檢測函數示例代碼public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable{    if (lpparam.packageName.equals("com.app")) {        findAndHookMethod("com.app.CastManager", lpparam.classLoader, "isCasting", new XC_MethodReplacement() {            @Override            protected Object replaceHookedMethod(MethodHookParam param) throws Throwable {                return false;            }        });    }}

八、App檢測代理不能抓包

在進行移動應用安全測試時,我們需要使用抓包工具來分析應用的數據流程,但是有些應用會禁止使用代理抓包工具,因此我們需要使用代理繞過工具來繞過該檢測。

// 使用Frida抓包繞過代理檢測示例代碼var MyClass = Java.use('com.app.MyClass');MyClass.getHttp = function (str) {    Java.use("java.net.Proxy").$init(Java.use("java.net.Proxy$Type").DIRECT,                                      Java.use("java.net.InetSocketAddress").$new("127.0.0.1", 8888));    return this.getHttpNoProxy(str);}

九、App檢測Frida原理

Frida是一款非常強大的動態分析工具,可以幫助我們分析應用的數據流程、函數調用、加密演算法等。但是有些應用會對Frida進行檢測,如果檢測到Frida則會強制退出。

為了繞過這個檢測,我們可以通過hook掉檢測函數、反射修改值、修改寄存器等方法來繞過Frida檢測。

// 使用Frida hook掉Frida檢測函數var MyClass = Java.use('com.app.MyClass');MyClass.checkFrida = function () {    return false;}

// 使用Frida反射修改Frida檢測值示例代碼Java.use("com.app.MyClass").__staticInitializer__.overload().implementation = function() {    var MyClass = Java.use("com.app.MyClass");    var fild = MyClass.class.getDeclaredField("isFrida");    fild.setAccessible(true);    fild.set(null, false);}

十、App檢測抓包閃退

在進行應用抓包時,有時會遇到抓包軟體崩潰或者強制退出的情況,這種情況往往是由抓包軟體的檢測或者應用的檢測導致的。

解決這種問題的方法比較簡單,我們可以使用一些抓包模塊,或者通過hook掉檢測函數和調用函數等方法來繞過檢測。

// 使用Xposed hook掉crash檢測函數示例代碼public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) {    if (lpparam.packageName.equals("com.app")) {        XposedHelpers.findAndHookMethod("com.app.CrashManager", lpparam.classLoader,                "checkCrash", new XC_MethodReplacement() {            @Override            protected Object replaceHookedMethod(MethodHookParam param) throws Throwable {                return false;            }        });    }}

// 使用Frida防止應用檢測抓包模塊Java.perform(function() {    var System = Java.use('java.lang.System');    System.loadLibrary.implementation = function(library) {        try {            if (library.includes('charles')) {                return false;            }        } catch(e) {}        return this.loadLibrary.call(this, library);    };});

原創文章,作者:UMWR,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/148725.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
UMWR的頭像UMWR
上一篇 2024-11-03 15:17
下一篇 2024-11-03 15:17

相關推薦

  • 如何將Python開發的網站變成APP

    要將Python開發的網站變成APP,可以通過Python的Web框架或者APP框架,將網站封裝為APP的形式。常見的方法有: 一、使用Python的Web框架Django Dja…

    編程 2025-04-28
  • Coursera App全面解析

    Coursera App是一款面向在線學習的應用程序,通過Coursera App用戶可以更加方便地學習各種知識技能,大大方便了用戶的在線學習體驗。 一、多格式課程 Courser…

    編程 2025-04-27
  • Python app開發指南

    無論是移動端應用開發還是Web後台開發,Python作為一門高效易用的編程語言,已經成為了眾多軟體開發者的首選。學習Python開發,可以快速高效地創建各種應用,為用戶提供出色的用…

    編程 2025-04-27
  • 蛋卷基金APP下載攻略

    如果你想了解如何下載蛋卷基金APP,請聽我慢慢道來。 一、下載步驟 1、首先,在應用商店中搜索「蛋卷基金」。 <p>打開應用商店,搜索「蛋卷基金」</p> …

    編程 2025-04-27
  • 老虎證券app官網下載

    老虎證券是一家提供在線股票交易服務的綜合性經紀商。老虎證券app是老虎證券的官方移動應用,它可以為投資者提供包括股票、期貨、外匯和數字貨幣的多種交易服務。本文將介紹老虎證券app的…

    編程 2025-04-27
  • Python模擬手機App簽到

    本文將為大家詳細介紹如何使用Python對手機App進行模擬簽到。隨著App的普及,許多App需要用戶簽到才能獲取積分、道具等獎勵,手動簽到十分麻煩,使用Python可以輕鬆地進行…

    編程 2025-04-27
  • 開發一個app並上架大概要多少錢?

    開發一款app並將其上架到應用商店是一項艱巨的任務,需要考慮許多因素,而開發成本是其中一個重要因素。在本篇文章中,我們將從多個方面探討開發一個app並上架的成本。 一、功能需求 首…

    編程 2025-04-27
  • 使用Flutter開發ToDo List App

    本文將會介紹如何使用Flutter開發一個實用的ToDo List App。ToDo List,即待辦事項清單,是一種記錄人們未處理工作和待辦事項的方式。隨著日常生活的快節奏,如此…

    編程 2025-04-27
  • 從多個方面詳解app破解

    一、app破解工具 app破解工具是指在技術範疇內專門用來進行app破解的軟體、工具。常見的app破解工具包括Frida、Xposed、IDA、Burp Suite等。其中Frid…

    編程 2025-04-25
  • uniapp打包app指南

    一、準備工作 在開始打包app之前,我們需要預先準備好一些工作。首先,確保你已經安裝了相關的軟體:HBuilderX、Android SDK、Xcode(如果你需要在iOS上打包)…

    編程 2025-04-24

發表回復

登錄後才能評論