某书Frida检测绕过记录

本文介绍了如何在面临Frida检测的应用中,通过Hookandroid_dlopen_ext函数来分析libmsaoaidsec.so,发现APP的检测点,并通过修改.so文件和使用Frida脚本绕过检测。作者还提到后续的学习目标,如unidbg和混淆处理技术。
摘要由CSDN通过智能技术生成

前言

本来想要分析请求参数加密过程,结果发现APP做了Frida检测,于是记录一下绕过姿势(暴力但有用)
Frida版本:16.2.1
APP版本:8.31.0

Frida启动APP

frida -U -f 包名,spawn启动APP,直接挂
Frida

Hook android_dlopen_ext查看加载的库

function hook_android_dlopen_ext() {
    var linker64_base_addr = Module.getBaseAddress("linker64")
    var android_dlopen_ext_func_off = 0x0000000000031098
    var android_dlopen_ext_func_addr = linker64_base_addr.add(android_dlopen_ext_func_off)
    Interceptor.attach(android_dlopen_ext_func_addr, {
        onEnter: function (args) {
            console.log("android_dlopen_ext -> enter : " + args[0].readCString())
        },
        onLeave: function (ret) {
            console.log("android_dlopen_ext -> leave")
        }
    })
}
hook_android_dlopen_ext()

可以看到最后的libmsaoaidsec.so只是enter,没有leave
也就是说APP的Frida检测点在libmsaoaidsec.so的初始化过程
Frida

分析libmsaoaidsec.so

这里使用GG修改器dump内存,SoFixer修复so文件
习惯性地去看.init_array,发现只是一些初始化
查询资料得知链接器在调用.init_array中的函数前会先调用.init_proc
于是直接替换.init_proc使其为空
此时链接器对libmsaoaidsec.so的android_dlopen_ext可以正常leave
但当链接器调用libmsaoaidsec.so的JNI_OnLoad时出错
错误描述是JNI_OnLoad使用的某个全局变量为空,而该全局变量实际上在.init_proc中被初始化
于是仔细分析.init_proc(D810插件可以直接去掉混淆)
Frida
这里觉得sub_1BEC4非常可疑,又是fopen,又是两层if的
sub_1BEC4主要调用两个函数,sub_1B924和sub_1BFAC
Frida
sub_1BFAC的hook检测比较明显,就是遍历线程,找gum-js-loop和gmain
Frida
sub_1B924->sub_1CEF8->sub_1C544,通过libc.so的pthread_create创建线程实例
sub_1C544开头就是一堆字符串的解密,最终的检测写在while循环里
Frida

Frida检测绕过

脚本绕过

function hook_android_dlopen_ext() {
    var linker64_base_addr = Module.getBaseAddress("linker64")
    var android_dlopen_ext_func_off = 0x0000000000031098
    var android_dlopen_ext_func_addr = linker64_base_addr.add(android_dlopen_ext_func_off)
    Interceptor.attach(android_dlopen_ext_func_addr, {
        onEnter: function (args) {
            // console.log("android_dlopen_ext -> enter : " + args[0].readCString())
            if (args[0].readCString() != null && args[0].readCString().indexOf("libmsaoaidsec.so") >= 0) {
                hook_call_constructors()
            }
        },
        onLeave: function (ret) {
            // console.log("android_dlopen_ext -> leave")
        }
    })
}

function hook_call_constructors() {
    var linker64_base_addr = Module.getBaseAddress("linker64")
    var call_constructors_func_off = 0x000000000004af0c
    var call_constructors_func_addr = linker64_base_addr.add(call_constructors_func_off)
    var listener = Interceptor.attach(call_constructors_func_addr, {
        onEnter: function (args) {
            console.log("call_constructors -> enter")
            var module = Process.findModuleByName("libmsaoaidsec.so")
            if (module != null) {
                Interceptor.replace(module.base.add(0x000000000001BEC4), new NativeCallback(function () {
                    console.log("replace sub_1BEC4")
                }, "void", []))
                listener.detach()
            }
        },
    })
}

hook_android_dlopen_ext()

Frida
后来想用objection分析java层的调用过程
没有想出同时注入js脚本并启动objection的方法
于是这里的解决方案是直接nop掉libmsaoaidsec.so的sub_1BEC4函数,把patch过的so放到指定路径即可

后记

后面按照网上其他师傅的分析思路
知道x-b3-traceid和x-xray-traceid与当前时间(System.currentTimeMillis())相关
x-legacy-smid、x-legacy-did、x-legacy-fid和x-legacy-sid是固定的(猜测和设备相关但是固定)
x-mini-gid、x-mini-sig和x-mini-mua在libtiny.so(动态跳转混淆)中添加
shield在libxyass.so(控制流混淆)中添加
后面需要学习unidbg去混淆

  • 26
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
Frida是一款功能强大的开源工具,用于动态分析、调试和修改应用程序。它可以在不修改应用程序源代码的情况下,以细粒度的方式对应用程序进行调试和修改。Frida支持多种操作系统和架构,并且可以通过不同的传输协议与目标应用程序进行通信。 在Frida中,过端口检测是一种用于确定目标应用程序正在监听哪些端口的技术。通过过端口检测,我们可以查找应用程序正在使用的网络接口和服务,了解应用程序正在与哪些主机进行通信。 Frida使用了一种被称为“frida-trace”的命令行工具来实现端口检测功能。在使用该工具时,我们可以指定目标应用程序的名称或进程ID,并且可以过滤出我们感兴趣的特定端口。 通过以下步骤可以进行frida的过端口检测: 1. 安装Frida框架并设置环境变量。 2. 打开终端或命令提示符,输入命令“frida-trace -R <应用程序名称或进程ID>”并按下回车键。这将启动Frida-trace工具,并将其连接到目标应用程序。 3. 输入命令“<函数名称>@@<库名称>”来指定要追踪的函数和库。例如,如果我们要追踪应用程序中的“connect”函数,可以输入命令“connect@@libc.so”。 4. 按下回车键后,Frida-trace将开始追踪指定的函数,并显示与该函数相关的网络连接信息,包括本地IP地址、本地端口、远程IP地址和远程端口。 通过frida进行端口检测可以帮助我们深入了解应用程序的网络行为,发现可能存在的安全风险或潜在的漏洞。同时,它还可以用于调试网络通信问题和分析应用程序与服务器之间的通信协议。 需要注意的是,在进行端口检测时,我们应该遵守相关的法律法规,并且只在合法授权的范围内使用Frida工具。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

P1umH0

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值