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/n/148725.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
UMWRUMWR
上一篇 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

发表回复

登录后才能评论