某书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

相关文章

OpenCV实现实时颜色检测的示例

《OpenCV实现实时颜色检测的示例》本文主要介绍了OpenCV实现实时颜色检测的示例,通过HSV色彩空间转换和色调范围判断实现红黄绿蓝颜色检测,包含视频捕捉、区域标记、颜色分析等功能,具有一定的参考... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间

Python UV安装、升级、卸载详细步骤记录

《PythonUV安装、升级、卸载详细步骤记录》:本文主要介绍PythonUV安装、升级、卸载的详细步骤,uv是Astral推出的下一代Python包与项目管理器,主打单一可执行文件、极致性能... 目录安装检查升级设置自动补全卸载UV 命令总结 官方文档详见:https://docs.astral.sh/

Maven 配置中的 <mirror>绕过 HTTP 阻断机制的方法

《Maven配置中的<mirror>绕过HTTP阻断机制的方法》:本文主要介绍Maven配置中的<mirror>绕过HTTP阻断机制的方法,本文给大家分享问题原因及解决方案,感兴趣的朋友一... 目录一、问题场景:升级 Maven 后构建失败二、解决方案:通过 <mirror> 配置覆盖默认行为1. 配置示

统一返回JsonResult踩坑的记录

《统一返回JsonResult踩坑的记录》:本文主要介绍统一返回JsonResult踩坑的记录,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录统一返回jsonResult踩坑定义了一个统一返回类在使用时,JsonResult没有get/set方法时响应总结统一返回

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

java对接海康摄像头的完整步骤记录

《java对接海康摄像头的完整步骤记录》在Java中调用海康威视摄像头通常需要使用海康威视提供的SDK,下面这篇文章主要给大家介绍了关于java对接海康摄像头的完整步骤,文中通过代码介绍的非常详细,需... 目录一、开发环境准备二、实现Java调用设备接口(一)加载动态链接库(二)结构体、接口重定义1.类型

apache的commons-pool2原理与使用实践记录

《apache的commons-pool2原理与使用实践记录》ApacheCommonsPool2是一个高效的对象池化框架,通过复用昂贵资源(如数据库连接、线程、网络连接)优化系统性能,这篇文章主... 目录一、核心原理与组件二、使用步骤详解(以数据库连接池为例)三、高级配置与优化四、典型应用场景五、注意事

SpringBoot实现文件记录日志及日志文件自动归档和压缩

《SpringBoot实现文件记录日志及日志文件自动归档和压缩》Logback是Java日志框架,通过Logger收集日志并经Appender输出至控制台、文件等,SpringBoot配置logbac... 目录1、什么是Logback2、SpringBoot实现文件记录日志,日志文件自动归档和压缩2.1、

qtcreater配置opencv遇到的坑及实践记录

《qtcreater配置opencv遇到的坑及实践记录》我配置opencv不管是按照网上的教程还是deepseek发现都有些问题,下面是我的配置方法以及实践成功的心得,感兴趣的朋友跟随小编一起看看吧... 目录电脑环境下载环境变量配置qmake加入外部库测试配置我配置opencv不管是按照网上的教程还是de

使用nohup和--remove-source-files在后台运行rsync并记录日志方式

《使用nohup和--remove-source-files在后台运行rsync并记录日志方式》:本文主要介绍使用nohup和--remove-source-files在后台运行rsync并记录日... 目录一、什么是 --remove-source-files?二、示例命令三、命令详解1. nohup2.