Frida 检测绕过

admin 2024年9月23日01:06:16评论7 views字数 5540阅读18分28秒阅读模式

Frida 检测绕过

轻松绕过 Frida 检测的技巧/提示和脚本 UwU

Frida 检测绕过

大家好,在我之前的文章中,我们研究了漏洞应用程序 AndroGoat,并使用 FRIDA 绕过了 sslpinning、root 等。但如果由于应用程序具有反 Frida 机制而导致 Frida 本身无法运行,该怎么办?

好吧好吧我回来了UwU

让我们开始吧

Frida 机制代码:

public class FridaDetection {
    private static final String TAG = "FridaDetection";

    private static boolean checkForFridaFiles() {
        String[] strArr = {"/data/local/tmp/frida-server", "/data/local/tmp/frida", "/data/local/tmp/re.frida.server"};
        for (int i2 = 0; i2 < 3; i2++) {
            String str = strArr[i2];
            if (new File(str).exists()) {
                StringBuilder sb = new StringBuilder();
                sb.append("Frida file detected: ");
                sb.append(str);
                return true;
            }
        }
        return false;
    }

    private static boolean checkForFridaPorts() {
        int[] iArr = {27042, 27043};
        try {
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(Runtime.getRuntime().exec("netstat -an").getInputStream()));
            while (true) {
                String readLine = bufferedReader.readLine();
                if (readLine == null) {
                    break;
                }
                for (int i2 = 0; i2 < 2; i2++) {
                    int i3 = iArr[i2];
                    if (readLine.contains(String.valueOf(i3))) {
                        StringBuilder sb = new StringBuilder();
                        sb.append("Frida port detected: ");
                        sb.append(i3);
                        return true;
                    }
                }
            }
        } catch (IOException e2) {
            Log.e(TAG, "Error checking for Frida ports", e2);
        }
        return false;
    }
    private static boolean checkForFridaServerProcesses() {
        String readLine;
        String[] strArr = {"frida-server", "frida"};
        int i2 = 0;
        while (i2 < 2) {
            String str = strArr[i2];
            try {
                BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(Runtime.getRuntime().exec("ps").getInputStream()));
                do {
                    readLine = bufferedReader.readLine();
                    if (readLine != null) {
                    }
                } while (!readLine.contains(str));
                StringBuilder sb = new StringBuilder();
                sb.append("Frida process detected: ");
                sb.append(str);
                return true;
            } catch (IOException e2) {
                Log.e(TAG, "Error checking for Frida server processes", e2);
            }
        }
        return false;
        i2++;
    }

    public static void detectFrida() {
        if (!checkForFridaServerProcesses() && !checkForFridaFiles() && !checkForFridaPorts()) {
        } else {
            throw new RuntimeException("null");
        }
    }
}

该代码包含三个 frida 检查

1. 检查 data/local/tmp 目录中的硬编码 Frida 文件名

2. 检查 Frida 默认运行的端口

3. 检查以 Frida 命名运行的服务

如果任何这些检查返回 true,则应用程序崩溃,因为它会抛出运行时异常。

让我们绕过这些

绕过第一轮检查

private static boolean checkForFridaFiles() {
 String[] strArr = {"/data/local/tmp/frida-server", "/data/local/tmp/frida", "/data/local/tmp/re.frida.server"};

它基本上是在上面的代码片段中硬编码的目录中寻找文件。

为了绕过此检查,我们只需更改已推送到 data/local/tmp 的 frida-server 的名称,它可以命名为除三个值(即 frida-server、frida、re.frida.server)之外的任何名称。

我将我的命名为mytools以避免检测。

第一次检查已被绕过 UwU

绕过第二轮检查

private static boolean checkForFridaPorts() {
        int[] iArr = {27042, 27043};

它会检查 frida 默认运行的端口 27042 和 27043。它会运行 netstat -an 来查看硬编码端口是否被占用,如果被占用,则意味着 frida 正在其中一个端口上运行,它会抛出运行时异常,导致应用程序崩溃。

为了避免检测并绕过此检查,我们将把在这些端口上运行的服务转发到不同的端口。

使用命令

# adb forward tcp:27044 tcp:27042
# adb forward tcp:27045 tcp:27043

这会将 27042 和 27043 的服务移动到 27044 和 27045,这样两个默认端口都将空闲,并且不会被第二次检查检测为被占用,这将绕过端口检测。

第二次检查已被绕过 UwU

这些是先决条件,以便我们可以运行自定义反弗里达绕过脚本

自定义脚本是根据用于检测 frida 的应用程序中的代码编写的。如果没有遇到相同的代码,那么您将不得不根据需要修改自定义脚本。我当前使用的脚本可以帮助您理解和创建自己的脚本。

这是自定义脚本

Java.perform(function() {
    // Hook the file detection method
    var fridaDetection = Java.use('PROCESSNAME.FridaDetection');
//This line finds and loads the FridaDetection class from the app’s code (the full class path is processname.path.FridaDetection).
//Java.use() gives access to the app's Java classes and methods, allowing you to modify or intercept them.
    fridaDetection.checkForFridaFiles.implementation = function() {
        console.log("Bypassed Frida file detection");
        return false; // Always return false to bypass the check
    };

    // Hook the port detection method
    fridaDetection.checkForFridaPorts.implementation = function() {
        console.log("Bypassed Frida port detection");
        return false; // Always return false to bypass the check
    };

    // Hook the process detection method
    fridaDetection.checkForFridaServerProcesses.implementation = function() {
        console.log("Bypassed Frida process detection");
        return false; // Always return false to bypass the check
    };
});
为了理解代码并根据您的需要进行修改,使用 chatGPT 它会让事情变得更容易 UwU
让我们运行脚本
运行命令
frida -H 127.0.0.1:27044 -f (process name) -l antifridadetectionscript.js127.0.0.1:27044 -f (process name) -l antifridadetectionscript.js

注意:我们使用 -H 参数与给定的 ip:port 建立远程连接,而不是使用 -U 参数建立直接 USB 连接。

运行该程序将绕过所有检查并将其值返回为 FALSE。

现在所有检查都已绕过 UwU

笔记:

之所以要先满足先决条件,然后再运行脚本,是因为如果我运行脚本,而没有先决条件,应用程序就会崩溃,因为它需要几毫秒的时间来检测 Frida 的存在,但是在更改名称和端口后,它给了脚本足够的时间来运行并将所有值返回为 FALSE

逐步程序
adb shell
cd data/local/tmpdata/local/tmp
./mytools & (remember this is my frida server renamed to avoid detection)

在不同的终端上

adb forward tcp:27044 tcp:27042tcp:27044 tcp:27042
adb forward tcp:27045 tcp :27043
frida -H 127.0.0.1:27044 -f (process name) -l antifridadetectionscript.js

注意:我们使用 -H 参数与给定的 ip:port 建立远程连接,而不是使用 -U 参数建立直接 USB 连接。

运行该程序将绕过所有检查并将其值返回为 FALSE。

按 Enter 键访问 frida 终端

>%load rootbypassscript.jsload rootbypassscript.js

这将运行 root 绕过脚本并且无法绕过 root 检测,但会告诉我们应用程序具有 rootbeer 保护。

>%load rootbeerbypass.jsload rootbeerbypass.js

这将绕过 root 检测,你的应用程序就可以运行了 UwU

这就是关于绕过 Frida 检测的内容。我希望它能帮助你绕过 Frida 或者了解该机制的工作原理,以便你可以绕过不同的 Frida 检查。

原文始发于微信公众号(Ots安全):Frida 检测绕过

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年9月23日01:06:16
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Frida 检测绕过https://cn-sec.com/archives/3194450.html

发表评论

匿名网友 填写信息