广告
返回顶部
首页 > 资讯 > 移动开发 >android frida检测绕过
  • 407
分享到

android frida检测绕过

androidfridahook 2023-08-31 17:08:14 407人浏览 安东尼
摘要

Frida检测是一种常见的安卓逆向技术,常用于防止应用程序被反向工程。如果您遇到了Frida检测,您可以尝试以下方法来绕过它: 使用MaGISk Hide模块:Magisk是一个强大的安卓root工具,它附带了一个Magisk Hide模

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 执行处进程结束

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

 有两处位退出进程位置函数 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);    }}

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

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

nop 掉0x9498处exit调用

 2.nop 掉0x92C2处kill

 实现代码如下

//指令输出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;    }}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检测的方法有很多种,以下是一些可能的方法:

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

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

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

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

使用其他工具:除了Frida,还有其他工具可以用来监控应用程序,例如Xposed、Cydia Substrate等。如果使用这些工具,Frida将无法监控应用程序。

来源地址:https://blog.csdn.net/qq_37431937/article/details/131114434

--结束END--

本文标题: android frida检测绕过

本文链接: https://www.lsjlt.com/news/386301.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • android frida检测绕过
    Frida检测是一种常见的安卓逆向技术,常用于防止应用程序被反向工程。如果您遇到了Frida检测,您可以尝试以下方法来绕过它: 使用Magisk Hide模块:Magisk是一个强大的安卓root工具,它附带了一个Magisk Hide模...
    99+
    2023-08-31
    android frida hook
  • Android逆向——过frida检测+so层算法逆向
    0x01 过frida检测 frida可以说是逆向里面很受欢迎的工具了,你可以在运行的时候得到几乎你想要的所有东西,函数地址、内存数据、java实例,根据我们的需要去修改程序的运行逻辑等等,但是太流行也不好,迎来了各种检测。 pt...
    99+
    2023-09-02
    网络
  • 如何绕过检测安装win11
    这篇“如何绕过检测安装win11”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“如何绕过检测安装win11”文章吧。此前,我们...
    99+
    2023-07-01
  • 简单手写后门Safedog检测绕过
    今天继续给大家介绍渗透测试相关知识,本文主要内容是简单手写后门Safedog检测绕过。 免责声明: 本文所介绍的内容仅做学习交流使用,严禁利用文中技术进行非法行为,否则造成一切严重后果自负! 再次...
    99+
    2023-09-13
    php SafeDog webshell 渗透测试 web安全
  • 为4.14低版本内核编译kernelsu绕过root检测
    手机型号 ​ 下载交叉编译工具链 https://github.com/JonasCardoso/Toolchainhttps://llvm.org/ 编写编译脚本 #! /bin/bashPRD="merlin"OUT=${PRD}...
    99+
    2023-09-04
    android
  • python3 通过 pycurl 检测
    由于python3 对StringIO 集成到io 模块中了,所有python3 import StringIO 改成了 import io,pycurl.Curl() 初始化对象C ,其 属性WRITEFUNCTION 要求传递参数是by...
    99+
    2023-01-31
    pycurl
  • 行人检测(人体检测)3:Android实现人体检测(含源码,可实时人体检测)
    行人检测(人体检测)3:Android实现人体检测(含源码,可实时人体检测) 目录 行人检测(人体检测)3:Android实现人体检测(含源码,可实时人体检测) 1. 前言 2. 人体检测数据集说明 3. 基于YOLOv5的人体检测模型训练...
    99+
    2023-09-01
    Android 人体检测 行人检测 Android人体检测 安卓行人检测
  • pyppeteer执行js绕过webdriver监测方法上
    目录Pyppeteer简介下载打开网页并截图评估页面上的脚本关键字参数的选项选择器基础用法模拟输入使用 tkinter 获取页面高度 宽度爬取京东商城爬取淘宝网taobao.pyex...
    99+
    2022-11-10
  • pyppeteer执行js绕过webdriver监测方法下
    目录官方文档启动pyppteer切图获取响应头,响应头状态,cookies获取当前页面标题获取页面html第一种:获取整个页面html第二种:只获取文本注入JS,控制上下滚动选择器获...
    99+
    2022-11-10
  • selenium怎么执行js并绕过webdriver监测
    这篇文章主要介绍了selenium怎么执行js并绕过webdriver监测的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇selenium怎么执行js并绕过webdriver监测文章都会有所收获,下面我们一起来看...
    99+
    2023-06-30
  • 详解Anyscript开发指南绕过typescript类型检查
    目录前言场景设定解决方法注释忽略场景用例类型断言场景用例泛型转换场景用例总结前言 随着越来越多的前端项目采用 typescript 来开发,越来越多前端开发者会接触、使用这门语言。它...
    99+
    2022-11-13
  • android 版本检测 Android程序的版本检测与更新实现介绍
    做个网站的安卓客户端,用户安装到自己手机上,如果我出了新版本怎么办呢?要有版本更新功能。 本来版本检测最好可以自动进行。但如果每次开启程序,都要先检测一轮,是一种浪费,毕竟版本...
    99+
    2022-06-06
    版本 更新 Android
  • Android内存泄漏检测-LeakCanary
      前言:   Android内测泄漏是比较常见的问题,在没有造成OOM之前,在测试过程中,也会经常性的忽略这个问题,但在android碎片化严重的,还是存在很多内测泄漏...
    99+
    2022-06-06
    leakcanary android内存泄漏 Android
  • selenium执行js并绕过webdriver监测常见方法
    目录selenium执行js常见的selenium监测手段常用绕过selenium监测1常用绕过selenium监测2常用绕过selenium监测3常用绕过selenium监测4se...
    99+
    2022-11-10
  • win11如何跳过系统检测
    这篇文章主要介绍了win11如何跳过系统检测的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇win11如何跳过系统检测文章都会有所收获,下面我们一起来看看吧。方法一:替换文件 首先我们需要下载一个“apprais...
    99+
    2023-07-01
  • 目标检测的训练过程
    数据集准备(Dataset preparation): 收集或创建带有注释的数据集,其中包括图像或帧以及标注,指定了其中物体的位置和类别。标注通常包括边界框坐标(x、y、宽度、高度)和相应的类别标签。数据预处理: 将图像调整为模型能够处...
    99+
    2023-08-30
    目标检测 人工智能 计算机视觉
  • Android 单元测试的主要检测方法
      Android 单元测试 可以自检代码的准确性,避免重大错误流到后续工序中,也是编程的良好习惯。   Andorid 单元测试主要检测方法是否正确,主要步骤:   ...
    99+
    2022-06-06
    检测方法 单元 方法 单元测试 测试 Android
  • Android hook、检测及对抗相关
    frida——hook 内存访问断点          环境:app:arm64      python 3.10   frida 15.2.2            简单的内存访问断点代码,可能还有些bug,根据apk需要自己改,下文...
    99+
    2023-09-11
    android 网络
  • Android OpenCV(二十二):边缘检测
    边缘检测 什么是图像的边缘? 图像的边缘是图像最基本的特征之一。所谓边缘(或边沿)是指周围像素灰度有跳跃性变化或“屋顶”变化的那些像素的集合。边...
    99+
    2022-06-06
    边缘检测 opencv Android
  • Android实现静音检测功能
    本文实例为大家分享了Android实现静音检测的具体代码,供大家参考,具体内容如下 一、背景 做语音评测的时候需要在用户不说话的时候自动停止,这时候就需要判断什么时候不说话处于静音的...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作