38.安卓逆向2-frida hook技术-过firda检测(三)(通过SO文件过检测原理)

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!

内容参考于:图灵Python学院

工具下载:

链接:https://pan.baidu.com/s/1bb8NhJc9eTuLzQr39lF55Q?pwd=zy89

提取码:zy89

复制这段内容后打开百度网盘手机App,操作更方便哦

上一个内容:37.安卓逆向2-frida hook技术-过firda检测(二)(过D-Bus检测和搭配maps检测进行使用)

通过SO文件过Frida检测原理是,Java肯定做不了Frida检测,因为可以直接被反编译源码直接就能暴露了,所以这种东西肯定会使用C++写,C++写完编译成SO文件,然后app使用Java代码去引入,然后调用SO的入口方法,然后由SO文件里的代码去检测Frida,然后就可以拦截安卓底层加载SO文件的函数,看看注入Frida后,什么SO文件加载了就退出了,比如加载 1、2、3、4、5,然后加载到5后一下让Frida退出了,这就很明显这个5在做Frida检测,然后找到这个SO文件,给它做点手脚来过检测

Frida hook安卓底层加载SO函数的代码,注意要使用重启的方式注入Frida

// 这段代码是给一个叫"Frida"的工具用的脚本
// Frida的作用是:可以钻进手机里的APP内部,看看这个APP在偷偷做什么
// 我们这段脚本的具体任务是:盯着APP加载"特殊文件"的行为// 首先,我们要找到APP加载文件时会用到的两个"工具函数"// 第一个工具函数叫"dlopen"
// 所有运行在Linux或安卓系统上的程序,要加载"动态链接库"(一种特殊文件,后缀通常是.so)时,经常会用到它
// "Module.findExportByName(null, "dlopen")"的作用:
// 1. 在系统的所有功能里找(null表示不限制范围)
// 2. 找到名字叫"dlopen"的那个功能,记录下它在内存中的位置
// 3. 把找到的结果存在变量"dlopen"里,方便后面使用
var dlopen = Module.findExportByName(null, "dlopen");// 第二个工具函数叫"android_dlopen_ext"
// 这是安卓系统专门设计的加强版加载工具,功能比dlopen更多一点
// 有些安卓APP会用这个函数来加载特殊的.so文件
// 下面这行代码的作用和上面类似:找到这个函数的位置,存在变量里
var android_dlopen_ext = Module.findExportByName(null, "android_dlopen_ext");// 接下来,我们要给第一个工具函数"dlopen"装个"监控器"
// 当APP调用dlopen加载文件时,我们就能立刻知道
// "Interceptor.attach"就是Frida提供的"装监控器"的功能
Interceptor.attach(dlopen, {// 当APP刚开始调用dlopen函数时,会自动执行下面的代码// 可以理解为:监控器发现"有人要开始用这个工具了"onEnter: function (args) {// "args"是APP传给dlopen的参数(就像我们给工具传递的"指令")// dlopen的第一个参数很重要:它告诉工具"要加载的文件在哪里"// 这里的"args[0]"就是取第一个参数(计算机里计数从0开始)var path_ptr = args[0];// 刚才拿到的"path_ptr"其实是个"内存地址"(类似文件在仓库里的货架编号)// 我们需要根据这个编号,找到实际的文件路径(比如"/data/lib/test.so")// "ptr(path_ptr)"是把编号转成Frida能识别的格式// ".readCString()"是按照计算机存储文字的规则,把地址对应的内容读出来var path = ptr(path_ptr).readCString();// 最后,把我们发现的信息打印到屏幕上// 这样我们就能清楚地看到:这个APP用dlopen加载了哪个文件console.log("[发现使用dlopen加载文件:] ", path);},// 当APP用完dlopen函数(加载文件完成后),会执行下面的代码// 可以理解为:监控器发现"这个人用完工具了"onLeave: function (retval) {// 目前这里什么都没做,留空是因为我们暂时只关心"开始加载"这个动作// 如果以后想知道"加载成功了吗",可以在这里处理返回值retval}
});// 下面是给第二个工具函数"android_dlopen_ext"装监控器,原理和上面完全一样
Interceptor.attach(android_dlopen_ext, {// 当APP刚开始调用这个安卓特有的加载函数时onEnter: function (args) {// 同样取第一个参数:要加载的文件地址var path_ptr = args[0];// 把地址转成我们能看懂的文件路径var path = ptr(path_ptr).readCString();// 打印信息:APP用安卓特有的工具加载了哪个文件console.log("[发现使用安卓专用dlopen_ext加载文件:] ", path);},// 当APP用完这个函数后onLeave: function (retval) {// 这里也暂时什么都不做}
});
/**
总结代码的效果:就像我们在 APP 的 "文件加载通道" 上装了两个摄像头,一个盯着普通加载通道,一个盯着安卓专用通道。
只要 APP 从这些通道加载文件(特别是.so 格式的文件),摄像头就会立刻拍下 "文件地址" 并显示出来,让
我们清楚知道这个 APP 在运行时偷偷加载了哪些底层文件。
这种监控在分析 APP 的工作原理、查找恶意软件行为时非常有用。
*/

如下图红框,在加载完 /lib/arm64/libmsaoaidsec.so 就把Frida给Process terminated退出了

不知道谁退出的Frida?啥也别管,直接给ai,让ai告诉你

然后把app的apk文件进行解压,如下图,可以找到 libmsaoaidsec.so 文件

然后这个app的这个SO没办法通过删除来过检测(这个app中调用了SO里面好多方法,有些没有异常处理,会导致app崩溃),它这个就很麻烦了,只要了解一下就可以了,下一节使用魔改Frida来解决


img

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/916494.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/916494.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

创建属于自己的github Page主页

安装手册 安装手册 环境要求 Node.js version 18.0 安装 Node.js 时,建议勾选所有和依赖相关的选项。 安装步骤 安装 Docusaurus 最简单的方法是使用 create-docusaurus 命令行工具,它可以帮助你快速搭建一个 Docusaurus 网站的基础框架。 你可以在…

Unity Catalog与Apache Iceberg如何重塑Data+AI时代的企业数据架构

在2025年DataAI Summit上,Databricks发布了一系列重大更新,标志着企业数据治理进入新阶段。其中,Unity Catalog的增强功能和对Apache Iceberg的全面支持尤为引人注目。这些更新不仅强化了跨平台数据管理能力,还推动了开放数据生态…

雨季,汽车经常跑山区,该如何保养?

雨季来临,山区道路变得湿滑难行,频繁穿梭于此的汽车面临着前所未有的挑战。如何在这样恶劣的环境中确保爱车安然无恙?本文将为你详细解析雨季经常跑山区的汽车该如何保养,让你在遭遇突发状况时也能从容应对。当雨季遇上山区路况&a…

Spring Boot音乐服务器项目-查询音乐模块

一、项目架构概览 该音乐播放服务器采用经典的MVC分层架构,核心模块包括: 实体层:定义数据模型Mapper层:数据库操作接口Controller层:HTTP请求处理工具层:加密、响应封装等辅助功能 项目核心功能包括用户…

Imagine:高效免费的图片压缩工具

很多时候,我们需要对图片进行压缩,却苦于找不到免费又好用的工具。这里给大家推荐一款电脑端的图片压缩软件——Imagine。 Imagine文末获取 它有诸多优点: 开源免费:无需担心付费问题,完全免费使用。 便捷易用&#…

《Uniapp-Vue 3-TS 实战开发》自定义年月日时分秒picker组件

目前组件: 组件完整代码: <template><view><picker mode="multiSelector" :value="multiIndex" :range="multiRange" @change="onMultiChange"><view class="picker">{{ formattedDateTime }}&l…

生命通道的智慧向导:Deepoc具身智能如何重塑医院导诊机器人的“仁心慧眼”

生命通道的智慧向导&#xff1a;Deepoc具身智能如何重塑医院导诊机器人的“仁心慧眼”清晨八点的三甲医院门诊大厅&#xff0c;一台导诊机器人突然转向无障碍通道。视觉系统捕捉到轮椅上的颤抖双手&#xff0c;自动降低语速并调大屏幕字体&#xff1b;识别出老人病历本上的“心…

【51单片机和数码管仿真显示问题共阴共阳代码】2022-9-24

缘由单片机和数码管仿真显示问题-嵌入式-CSDN问答 #include "REG52.h" unsigned char code smgduan[]{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f ,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0,64,15,56}; //共阴0~F消隐减号 void smxs(unsigned char mz, unsigned c…

Java#包管理器来时的路

不依赖任何Jar包 - HelloWorld.java mkdir demo && cd demo;# HelloWorld.java cat > HelloWorld.java << EOF public class HelloWorld {public static void main(String[] args) {System.out.println("Hello, world!");} } EOF# 编译class javac …

Android Framework知识点

1 重点知识 1.1 Alarm 当手机重启或者应用被杀死的时候&#xff0c;Alarm会被删除&#xff0c;因此&#xff0c;如果想通过Alarm来完成长久定时任务是不可靠的&#xff0c;如果非要完成长久定时任务&#xff0c;可以这样&#xff1a;将应用的所有Alarm信息存到数据库中&#xf…

代码随想录算法训练营Day6 | 哈希表 Part 1

一、今日学习目标 掌握哈希表的核心理论&#xff08;哈希函数、哈希碰撞及解决方法&#xff09;&#xff0c;理解数组、set、map 三种哈希结构的适用场景&#xff0c;并通过「两个数组的交集」「快乐数」「两数之和」三道题目&#xff0c;实战掌握哈希表在快速查找、去重、键值…

5.13.树、森林与二叉树的转换

当使用"孩子兄弟表示法"存储树或森林时&#xff0c;最终会呈现出与二叉树类似的形态&#xff0c;所以树、森林与二叉树之间的转换本质上就是画出采用孩子兄弟表示法存储的树和森林。一."树->二叉树"的转换&#xff1a;1.例一&#xff1a;以上述图片左边…

Spring 核心流程

Spring 核心流程前言一、AbstractApplicationContext#refresh 方法解析1.1 前置1.2 refresh 方法1.2.1 prepareRefresh1.2.2 obtainFreshBeanFactory1.2.3 prepareBeanFactory1.2.4 postProcessBeanFactory1.2.5 invokeBeanFactoryPostProcessors1.2.6 registerBeanPostProcess…

RS485转Profinet网关与JRT激光测距传感器在S7-1200 PLC系统中的技术解析与应用

RS485转Profinet网关与JRT激光测距传感器在S7-1200 PLC系统中的技术解析与应用技术核心&#xff1a;协议转换与数据桥梁在工业自动化系统中&#xff0c;RS485转Profinet网关承担着协议翻译官的角色。以XD-MDPN100型号为例&#xff0c;其本质是将RS485设备的串口数据封装为Profi…

《C++ string 完全指南:string的模拟实现》

string的模拟实现 文章目录string的模拟实现一、浅拷贝和深拷贝1.浅拷贝2.深拷贝3.写时拷贝二、定义string的成员变量三、string的接口实现1.string的默认成员函数&#xff08;1&#xff09;构造函数实现&#xff08;2&#xff09;析构函数实现&#xff08;3&#xff09;拷贝构…

造成服务器内存不足的原因有什么

服务器在日常的运行过程中&#xff0c;会存储大量关于企业重要的数据信息&#xff0c;偶尔会出现内存飙升空间不足的情况&#xff0c;服务器内存作为服务器数据处理和存储的主要空间&#xff0c;异常占用会导致服务器性能降低&#xff0c;影响到企业业务的响应速度&#xff0c;…

JVM、Dalvik、ART垃圾回收机制

一、JVM垃圾回收机制&#xff08;桌面/服务器端&#xff09;1. 核心算法&#xff1a;分代收集新生代回收&#xff08;Minor GC&#xff09;触发条件&#xff1a;Eden区满时触发算法&#xff1a;复制算法&#xff08;Eden → Survivor区&#xff09;过程&#xff1a;存活对象在S…

数学专业转型数据分析竞争力发展报告

一、核心优势拆解&#xff08;1&#xff09;数学能力与数据分析对应关系数学课程数据分析应用场景比较优势说明概率论假设检验设计能准确判断统计显著性阈值实变函数数据质量评估异常值检测的严格性更高线性代数特征工程构建矩阵运算优化模型训练效率&#xff08;2&#xff09;…

JAVA进阶--MySQL

一.MySQL架构连接层:处理客户端连接服务,认证授权相关的操作服务层:最核心的一层&#xff08;核心服务功能&#xff09;,处理sql,包括sql优化,函数调用....存储引擎层:存储引擎是真正负责来操作数据的&#xff08;mysql中数据的存储和提取&#xff09;, mysql中有不同存储引擎,…

【架构】Docker简单认知构建

作为一个之前从来没有接触过Docker的倒霉蛋&#xff0c;想了解学习一下Docker 搜了CSDN和RUNOOB&#xff0c;得到的描述如下&#xff1a; Docker 是一个开源的应用容器引擎&#xff0c;基于 Go 语言 并遵从 Apache2.0 协议开源。 Docker 可以让开发者打包他们的应用以及依赖包…