android frida检测绕过

这篇具有很好参考价值的文章主要介绍了android frida检测绕过。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Frida检测是一种常见的安卓逆向技术,常用于防止应用程序被反向工程。如果您遇到了Frida检测,您可以尝试以下方法来绕过它:

  1. 使用Magisk Hide模块:Magisk是一个强大的安卓root工具,它附带了一个Magisk Hide模块,可以帮助您隐藏root权限。这可以帮助您绕过Frida检测。

  2. 使用Xposed框架:Xposed框架可以帮助您实现一些高级的安卓逆向技术,包括绕过Frida检测。您可以使用Xposed模块来隐藏您的应用程序信息。

  3. 使用Frida Gadget:Frida Gadget是一个用于Frida检测的小型应用程序,可以帮助您绕过检测。将其与Frida一起使用,可以帮助您实现高级的安卓逆向技术。

 apk案例分析

在使用frida 附加时候发现进程退出,我们首先查看是在哪里结束进程的

function hook_dlopen() {
    Interceptor.attach(Module.findExportByName(null, "android_dlopen_ext"),
        {
            onEnter: function (args) {
                var pathptr = args[0];
                if (pathptr !== undefined && pathptr != null) {
                    var path = ptr(pathptr).readCString();
                    console.log("load " + path);
                }
            }
        }
    );
}

 通过 dlopen可以发现在模块libnative-lib.so 执行处进程结束

绕过frida检测,Android逆向,android,frida hook

 分析模块libnative-lib.so,找关键位置

绕过frida检测,Android逆向,android,frida hook

 有两处位退出进程位置函数 check_loop通过maps 内存中的关键字符串查找检测frida.

void __fastcall __noreturn check_loop(void *a1)
{
    for ( i = 0; ; ++i )
    {
        fd = open("/proc/self/maps", 0);
        if ( fd >= 1 )
        {
            while ( read(fd, buf, 0x200u) >= 1 )
            {
                v11 = buf;
                v10 = "frida";
                haystack = buf;
                needle = "frida";
                if ( strstr(buf, "frida") )
                {
                    v1 = getpid();
                    kill(v1, 9);
                }
                if ( sscanf(buf, "%x-%lx %4s %lx %*s %*s %s", &buf[516], &buf[512], &v5, &v4, s) == 5
            && v5 == 114
            && v6 == 112
            && !v4 )
                {
                    strlen(s);
                }
            }
        }
        close(fd);
        sleep(1u);
    }
}

 通过断点标记这两处进程退出位置方便后续返回查看

绕过frida检测,Android逆向,android,frida hook

修改位置有两处,直接IDA keypath nop掉重打包,或这利用frida hook.下面用frida hook方式nop掉结束进程的两处关键点  

1.nop 掉0x9498处exit调用

绕过frida检测,Android逆向,android,frida hook

 2.nop 掉0x92C2处kill

绕过frida检测,Android逆向,android,frida hook

 实现代码如下

//指令输出
function dis(address, number) {
    for (var i = 0; i < number; i++) {
        var ins = Instruction.parse(address);
        console.log("address:" + address + "--dis:" + ins.toString());
        address = ins.next;
    }
}
/*call_function
 static void call_function(const char* function_name __unused,
                           linker_ctor_function_t function,
                           const char* realpath __unused       //加载的当前模块路径
) 
  }*/

function hook() {
    //call_function("DT_INIT", init_func_, get_realpath());
    var linkermodule = Process.getModuleByName("linker");
    var call_function_addr = null;
    var symbols = linkermodule.enumerateSymbols();
    for (var i = 0; i < symbols.length; i++) {
        var symbol = symbols[i];
        if (symbol.name.indexOf("__dl__ZL13call_functionPKcPFviPPcS2_ES0_") != -1) {
            call_function_addr = symbol.address;
        }
    }
    Interceptor.attach(call_function_addr, {
        onEnter: function (args) {
            var type = ptr(args[0]).readUtf8String();
            var address = args[1];
            var sopath = ptr(args[2]).readUtf8String();
            console.log("loadso:" + sopath + "--addr:" + address + "--type:" + type);
            if (sopath.indexOf("libnative-lib.so") != -1) {
                var libnativemodule = Process.getModuleByName("libnative-lib.so");
                var base = libnativemodule.base;

                //nop kill
                //    .text:000092BA                 B               loc_92BC
                //    .text:000092BC ; ---------------------------------------------------------------------------
                //    .text:000092BC
                //    .text:000092BC loc_92BC                                ; CODE XREF: check_loop(void *)+5E↑j
                //    .text:000092BC                 BLX             getpid
                //    .text:000092C0                 MOVS            R1, #9  ; sig
                //    .text:000092C2                 BLX             kill
                console.log("---------------- nop kill begin -------------")
                dis(base.add(0x92BA).add(1), 10);
               //方式一修改内存
               // Memory.protect(base.add(0x92C2), 4, 'rwx');
               // base.add(0x92C2).writeByteArray([0x00, 0xbf, 0x00, 0xbf]);
                //方式二修改内存
                var patchaddr=base.add(0x92C2);
                Memory.patchCode(patchaddr, 4, patchaddr => {
                    var cw = new ThumbWriter(patchaddr);
                    cw.putNop();
                    var cw = new ThumbWriter(patchaddr.add(0x2));
                    cw.putNop();
                    cw.flush();
                  });
                console.log("++++++++++++ nop kill end   +++++++++++++")
                dis(base.add(0x92BA).add(1), 10);
                // nop exit
                //   .text:0000948E                 CMP             R0, #0
                //   .text:00009490                 BEQ             loc_949C
                //   .text:00009492                 B               loc_9494
                //   .text:00009494 ; ---------------------------------------------------------------------------
                //   .text:00009494
                //   .text:00009494 loc_9494                          ; CODE XREF: anti_frida_loop(void)+26↑j
                //   .text:00009494                 MOV.W           R0, #0xFFFFFFFF ; status
                //   .text:00009498                 BLX             exit
                console.log("--------------- nop exit begin -------------")
                dis(base.add(0x948E).add(1), 10);  //keystone
                Memory.protect(base.add(0x9498), 4, 'rwx');
                base.add(0x9498).writeByteArray([0x00, 0xbf, 0x00, 0xbf]);
                console.log("+++++++++++++++ nop exit end   +++++++++++++")
                dis(base.add(0x948E).add(1), 10);
            }
        }
    })
}
function main(){
  hook();
}
setImmediate(main);

 总结:

绕过Frida检测的方法有很多种,以下是一些可能的方法:

1. 使用Frida Bypass插件:这是一款Frida插件,可以自动绕过Frida检测,并让Frida无法对应用程序进行监控。

2. 使用Frida Gadget库:这是一个动态Frida库,可以在运行时注入Frida,以避免被检测到。

3. 修改应用程序代码:通过修改应用程序代码,可以让Frida无法监控应用程序。

4. 使用防检测框架:有些防检测框架可以绕过Frida的检测,例如Xposed框架、VirtualXposed、Magisk等。

5. 使用其他工具:除了Frida,还有其他工具可以用来监控应用程序,例如Xposed、Cydia Substrate等。如果使用这些工具,Frida将无法监控应用程序。文章来源地址https://www.toymoban.com/news/detail-556626.html

到了这里,关于android frida检测绕过的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android Spider App逆向 Frida - 夜神模拟器安装配置 基本使用

    Frida 是一款基于 Python + JavaScript 的 Hook 与调试框架,实现app逆向的强大工具; 模拟器下载安装教程:https://blog.csdn.net/EXIxiaozhou/article/details/127767808 提示:以下是本篇文章正文内容,下面案例可供参考 Frida是一款易用的跨平 Hook 工具, Java 层到 Native 层的 Hook 无所不能,是一种

    2024年01月24日
    浏览(49)
  • so层检测frida绕过

    如果是在so层里开一个线程检测frida; 我们思路是可以frida加载那个so, 然后打印出检测线程的偏移; 然后干掉这个线程,完成!

    2024年02月12日
    浏览(52)
  • Android hook、检测及对抗相关

    Xposed hook多个dex firda hook libart.so文件导出函数(专治各种静态找不到) hook liblinker.so hook init_array中的函数, 需要指定so名称,且会hook之后的所有so的init_array中的函数,可以通过hook_init函数中for循环,使用函数偏移过滤。 通过libc.so的底层dlopen函数实现dump so Xposed模块 新建Android项

    2024年02月06日
    浏览(51)
  • [免费专栏] Android安全之Root检测与Root绕过(浅析)

    也许每个人出生的时候都以为这世界都是为他一个人而存在的,当他发现自己错的时候,他便开始长大 少走了弯路,也就错过了风景,无论如何,感谢经历 转移发布平台通知:将不再在CSDN博客发布新文章,敬请移步知识星球 感谢大家一直以来对我CSDN博客的关注和支持,但

    2024年02月08日
    浏览(51)
  • Android13 安装最新版 Frida

    本文所有教程及源码、软件仅为技术研究。不涉及计算机信息系统功能的删除、修改、增加、干扰,更不会影响计算机信息系统的正常运行。不得将代码用于非法用途,如侵立删! Android13 安装最新版 Frida 环境 win10 Pixel4 Android13 Python3.9 Frida16.1.0 Frida-tools12.1.3 PC安装frida和frid

    2024年02月11日
    浏览(52)
  • 【学习笔记】在Android使用Frida进行https抓包

    最近需要在Android进行https抓包,对数据解密,找了很多方法,终于成功了,不过原文一些步骤对于我这个小白还是有点不理解的地方,在此记录一下。 一台root手机 frida环境 该步骤全程参考: [Frida入门教程] 一文搞定Frida环境搭建,基于逍遥模拟器(虚拟设备)和ADB(Android Debug

    2024年02月16日
    浏览(43)
  • 【粉丝福利社】Android应用安全实战:Frida协议分析(文末送书-完结)

    🏆 作者简介,愚公搬代码 🏆《头衔》:华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,51CTO博客专家等。 🏆《近期荣誉》:

    2024年04月09日
    浏览(65)
  • 手机frida绕过ssl pinning

    手机得是root过的,然后从这个网站https://github.com/frida/frida/releases下载对应版本的frida-server,现在的手机大多数都是arm64的。 电脑上下载adb,手机用USB连到电脑上,打开开发者选项的USB调试。 adb devices 确认已经连接,用adb push把frida-server传到手机上,chmod 777后切换到root用户下

    2024年02月12日
    浏览(35)
  • Frida hook 双向证书秘钥

    spawn 模式启动: frida -U -f 包名 -l keystore.js --no-pause 加 – no-pause与不加 --no-pause的区别主要是 hook时机的早晚。 --no-pause是即时hook, 而不加 --no-pause 这个参数的话。frida会拉起进程,停在加载主界面之前,这时候 应用会出现白屏状态,就像 恢复主线程运行的话,这里要手动用

    2024年02月11日
    浏览(48)
  • Android Spider Frida-Dexdump 脱壳工具下载使用以及相关技术介绍

    本案例使用的App是:引力播.apk,涉及到查壳、脱壳、反编译; 提示:以下是本篇文章正文内容,下面案例可供参考 ApkScan-PKID 查壳工具下载使用:https://blog.csdn.net/EXIxiaozhou/article/details/127196615 JDAX-GUI 反编译工具下载使用:https://blog.csdn.net/EXIxiaozhou/article/details/127207762 Apk下载地

    2024年02月02日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包