某书Frida检测绕过记录

2024-04-19 23:04

本文主要是介绍某书Frida检测绕过记录,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

某书Frida检测绕过记录

    • 前言
    • Frida启动APP
    • Hook android_dlopen_ext查看加载的库
    • 分析libmsaoaidsec.so
    • Frida检测绕过
    • 后记

前言

本来想要分析请求参数加密过程,结果发现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 = 0x0000000000031098var 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 = 0x0000000000031098var 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 = 0x000000000004af0cvar 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去混淆

这篇关于某书Frida检测绕过记录的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/918679

相关文章

Oracle查询优化之高效实现仅查询前10条记录的方法与实践

《Oracle查询优化之高效实现仅查询前10条记录的方法与实践》:本文主要介绍Oracle查询优化之高效实现仅查询前10条记录的相关资料,包括使用ROWNUM、ROW_NUMBER()函数、FET... 目录1. 使用 ROWNUM 查询2. 使用 ROW_NUMBER() 函数3. 使用 FETCH FI

SpringBoot使用Apache Tika检测敏感信息

《SpringBoot使用ApacheTika检测敏感信息》ApacheTika是一个功能强大的内容分析工具,它能够从多种文件格式中提取文本、元数据以及其他结构化信息,下面我们来看看如何使用Ap... 目录Tika 主要特性1. 多格式支持2. 自动文件类型检测3. 文本和元数据提取4. 支持 OCR(光学

Python MySQL如何通过Binlog获取变更记录恢复数据

《PythonMySQL如何通过Binlog获取变更记录恢复数据》本文介绍了如何使用Python和pymysqlreplication库通过MySQL的二进制日志(Binlog)获取数据库的变更记录... 目录python mysql通过Binlog获取变更记录恢复数据1.安装pymysqlreplicat

Servlet中配置和使用过滤器的步骤记录

《Servlet中配置和使用过滤器的步骤记录》:本文主要介绍在Servlet中配置和使用过滤器的方法,包括创建过滤器类、配置过滤器以及在Web应用中使用过滤器等步骤,文中通过代码介绍的非常详细,需... 目录创建过滤器类配置过滤器使用过滤器总结在Servlet中配置和使用过滤器主要包括创建过滤器类、配置过滤

正则表达式高级应用与性能优化记录

《正则表达式高级应用与性能优化记录》本文介绍了正则表达式的高级应用和性能优化技巧,包括文本拆分、合并、XML/HTML解析、数据分析、以及性能优化方法,通过这些技巧,可以更高效地利用正则表达式进行复杂... 目录第6章:正则表达式的高级应用6.1 模式匹配与文本处理6.1.1 文本拆分6.1.2 文本合并6

python与QT联合的详细步骤记录

《python与QT联合的详细步骤记录》:本文主要介绍python与QT联合的详细步骤,文章还展示了如何在Python中调用QT的.ui文件来实现GUI界面,并介绍了多窗口的应用,文中通过代码介绍... 目录一、文章简介二、安装pyqt5三、GUI页面设计四、python的使用python文件创建pytho

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

烟火目标检测数据集 7800张 烟火检测 带标注 voc yolo

一个包含7800张带标注图像的数据集,专门用于烟火目标检测,是一个非常有价值的资源,尤其对于那些致力于公共安全、事件管理和烟花表演监控等领域的人士而言。下面是对此数据集的一个详细介绍: 数据集名称:烟火目标检测数据集 数据集规模: 图片数量:7800张类别:主要包含烟火类目标,可能还包括其他相关类别,如烟火发射装置、背景等。格式:图像文件通常为JPEG或PNG格式;标注文件可能为X

Node.js学习记录(二)

目录 一、express 1、初识express 2、安装express 3、创建并启动web服务器 4、监听 GET&POST 请求、响应内容给客户端 5、获取URL中携带的查询参数 6、获取URL中动态参数 7、静态资源托管 二、工具nodemon 三、express路由 1、express中路由 2、路由的匹配 3、路由模块化 4、路由模块添加前缀 四、中间件

基于 YOLOv5 的积水检测系统:打造高效智能的智慧城市应用

在城市发展中,积水问题日益严重,特别是在大雨过后,积水往往会影响交通甚至威胁人们的安全。通过现代计算机视觉技术,我们能够智能化地检测和识别积水区域,减少潜在危险。本文将介绍如何使用 YOLOv5 和 PyQt5 搭建一个积水检测系统,结合深度学习和直观的图形界面,为用户提供高效的解决方案。 源码地址: PyQt5+YoloV5 实现积水检测系统 预览: 项目背景