当前位置: 首页 > news >正文

frida 通过 loadLibrary0 跟踪 System.loadLibrary

static {System.loadLibrary("libxxx.so");
}

在 ndk 开发中,常见的实践是在 static 代码块里调用 loadLibrary 加载动态库。由于 apk 从 java 层开始启动,过早地 hook 原生代码会找不到函数。所以一种常见做法是在 loadLibrary 的 hook 回调里附加 Interceptor。

然而,System.loadLibrary 是一个 callerSensitive 的方法,其内部利用反射机制,从 JVM 的调用栈 callStack 获取 caller 的类。如果直接用 frida hook loadLibrary 会使用 system 的 classLoader,只查找 /system/lib/system/vendor/lib 的依赖。

需要再往里跟踪一层函数调用。AOSP 实现 loadLibrary 的代码在 libcore/ojluni/src/main/java/java/lang/System.java,该实现调用了 Runtime 的 loadLibrary0 函数,后者不是 callerSensitive 的,frida 可以 hook。

    @CallerSensitivepublic static void loadLibrary(String libname) {Runtime.getRuntime().loadLibrary0(Reflection.getCallerClass(), libname);}// Runtime.javavoid loadLibrary0(Class<?> fromClass, String libname) {...

loadLibrary0 是一个泛型函数,这个 Class 不知道为啥会擦除成 ClassLoader。所以实际上是不需要 overload 规定重载的。我试了下能用,网上见过继续跟踪两次调用,hook nativeLoad 函数的做法(jamie793)。

但是我是真搞不懂为啥泛型擦除成 classLoader……不管是 java 还是 android,static 代码块的调用栈都没有 classloader。安卓的调用栈如下

dalvik.system.VMStack
java.lang.Thread
com.example.illintentions.MainActivity <----
java.lang.Class
android.app.AppComponentFactory
androidx.core.app.CoreComponentFactory
android.app.Instrumentation
android.app.ActivityThread
android.app.ActivityThread
android.app.servertransaction.LaunchActivityItem
android.app.servertransaction.TransactionExecutor
android.app.servertransaction.TransactionExecutor
android.app.ActivityThread$H
android.os.Handler
android.os.Looper
android.app.ActivityThread
java.lang.reflect.Method
com.android.internal.os.RuntimeInit$MethodAndArgsCaller
com.android.internal.os.ZygoteInit

相关文章:

frida 通过 loadLibrary0 跟踪 System.loadLibrary

static {System.loadLibrary("libxxx.so"); }在 ndk 开发中&#xff0c;常见的实践是在 static 代码块里调用 loadLibrary 加载动态库。由于 apk 从 java 层开始启动&#xff0c;过早地 hook 原生代码会找不到函数。所以一种常见做法是在 loadLibrary 的 hook 回调里…...

【2025最新计算机毕业设计】基于SSM的智能停车场管理系统【提供源码+答辩PPT+文档+项目部署】(高质量源码,可定制,提供文档,免费部署到本地)

作者简介&#xff1a;✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流。✌ 主要内容&#xff1a;&#x1f31f;Java项目、Python项目、前端项目、PHP、ASP.NET、人工智能…...

【含文档+PPT+源码】Python爬虫人口老龄化大数据分析平台的设计与实现

项目介绍 本课程演示的是一款Python爬虫人口老龄化大数据分析平台的设计与实现&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Python学习者。 1.包含&#xff1a;项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行本…...

文本生图的提示词prompt和参数如何设置(基于Animagine XL V3.1)

昨天搞了半天 Animagine XL V3.1&#xff0c;发现市面上很多教程只是授之以鱼&#xff0c;并没有授之以渔的。也是&#xff0c;拿来赚钱不好吗&#xff0c;闲鱼上部署一个 Deepseek 都能要两百块。这里我还是想写篇文章介绍一下&#xff0c;虽不全面&#xff0c;但是尽量告诉你…...

快速提取Excel工作簿中所有工作表的名称?

大家好&#xff0c;我是小鱼。 在Excel表格中如何快速提取工作簿中所有工作表的名称&#xff1f;这个问题在日常工作中也经常遇到&#xff0c;比如说经常使用的INDIRECT函数跨工作表汇总或者制作类似于导航的工作表快捷跳转列表&#xff0c;就需要每个工作表的名称。如果工作表…...

【紫光同创PG2L100H开发板】盘古676系列,盘古100Pro+开发板,MES2L676-100HP

本原创文章由深圳市小眼睛科技有限公司创作&#xff0c;版权归本公司所有&#xff0c;如需转载&#xff0c;需授权并注明出处&#xff08;www.meyesemi.com) 一&#xff1a;开发系统介绍 开发系统概述 MES2L676-100HP开发板采用紫光创 logos2系列 FPGA&#xff0c;型号&#x…...

Node.JS 版本管理工具 Fnm 安装及配置(Windows)

Fnm 安装及配置&#xff08;Windows&#xff09; Fnm&#xff08;Fast Node Manager&#xff09;?? 一个快速而简单的 Node.js 版本管理工具&#xff0c;使用 Rust 编写。 1 安装 官网&#xff1a;Fnm&#xff08;镜像网站 &#xff09;。 下载&#xff1a;Fnm&#xff08…...

labview通过时间计数器来设定采集频率

在刚接触labview的时候&#xff0c;笔者通常用定时里的等待函数来实现指令的收发&#xff0c;但是当用到的收发消息比较多时就出现了卡顿&#xff0c;卡死的情况&#xff0c;这是因为当用队列框架时&#xff0c;程序卡在了其中的一个分支里&#xff0c;等通过相应的延时后才可以…...

汇编JCC条件跳转指令记忆

汇编中的条件跳转指令&#xff08;JCC&#xff09;&#xff1a; 1. 理解标志寄存器 JCC 指令依赖于标志寄存器&#xff08;FLAGS&#xff09;的状态&#xff0c;常见的标志位有&#xff1a; ZF&#xff08;Zero Flag&#xff09;&#xff1a;结果为0时置1。 CF&#xff08;Ca…...

HTML排版标签、语义化标签、块级和行内元素详解

目录 前言 一、HTML中的排版标签 1. 文本相关标签 1.1 标题标签 ~ 1.2 段落标签 1.3 强调和加粗 1.4 换行标签 1.5 水平线标签 二、HTML中的语义化标签 2.1 语义化标签概述 2.2 常见的语义化标签 示例&#xff08;核心代码部分&#xff09;&#xff1a; 三、HTM…...

【回溯+剪枝】单词搜索,你能用递归解决吗?

文章目录 79. 单词搜索解题思路&#xff1a;回溯&#xff08;深搜&#xff09; 剪枝 79. 单词搜索 79. 单词搜索 ​ 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 …...

《深度揭秘LDA:开启人工智能降维与分类优化的大门》

在当今人工智能蓬勃发展的时代&#xff0c;数据成为了驱动技术进步的核心要素。随着数据采集和存储技术的飞速发展&#xff0c;我们所面临的数据量不仅日益庞大&#xff0c;其维度也愈发复杂。高维数据虽然蕴含着丰富的信息&#xff0c;但却给机器学习算法带来了一系列严峻的挑…...

Linux(CentOS)安装 MySQL

CentOS版本&#xff1a;CentOS 7 三种安装方式&#xff1a; 一、通过 yum 安装&#xff0c;最简单&#xff0c;一键安装&#xff0c;全程无忧。 二、通过 rpm 包安装&#xff0c;需具备基础概念及常规操作。 三、通过 gz 包安装&#xff0c;需具备配置相关操作。 --------…...

C++ 使用CURL开源库实现Http/Https的get/post请求进行字串和文件传输

CURL开源库介绍 CURL 是一个功能强大的开源库&#xff0c;用于在各种平台上进行网络数据传输。它支持众多的网络协议&#xff0c;像 HTTP、HTTPS、FTP、SMTP 等&#xff0c;能让开发者方便地在程序里实现与远程服务器的通信。 CURL 可以在 Windows、Linux、macOS 等多种操作系…...

面试题-SpringCloud的启动流程

关键词 prepareEnvironmentBootstrapApplicationListenerBootStrap Context&#xff08;启动应用上下文&#xff09;Environment中bootstrap属性 面试回答 引入SpringCloud相关组件后&#xff0c;均会引入一个spring-cloud-context的依赖包&#xff0c;这个项目的META-INF/s…...

MySQL基础知识

目录 一.什么是MySQL 二.分布式系统中的身份转换 三.MySQL是如何存储数据的 四.什么是数据库的命令 一.什么是MySQL MySQL是一个“客户端&#xff08;client&#xff09; - 服务器&#xff08;server&#xff09;”结构的软件&#xff08;数据库软件&#xff09;。 客户端&am…...

nas-群晖docker查询注册表失败解决办法(平替:使用SSH命令拉取ddns-go)

目录 前言必读 一、遇到问题 二、操作步骤 &#xff08;一&#xff09;打开群晖系统的SSH服务? &#xff08;二&#xff09;Windows电脑本地下载安装putty? 输入登录账号密码 开启root权限 例子&#xff1a;使用命令行下载ddns-go? 前言必读 读者手册&#xff08;必…...

GSMA SGP.31 eSIM IoT 架构与需求笔记

GSMA SGP.31 eSIM IoT 架构与需求笔记 (版本 1.2&#xff0c;2024 年 4 月 26 日) 一、 概述 1. 文档目的&#xff1a; 本文件旨在为网络受限和/或用户界面 (UI) 受限的物联网 (IoT) 设备中的嵌入式通用集成电路卡 (eUICC) 提供远程配置架构和需求规范。 2. 主要内容&#…...

sql版本序列号

SQL Server 2019 Enterprise密钥&#xff1a;HMWJ3-KY3J2-NMVD7-KG4JR-X2G8G SQL Server 2019 Enterprise Core密钥&#xff1a;2C9JR-K3RNG-QD4M4-JQ2HR-8468J SQL Server 2019 Standard密钥&#xff1a;PMBDC-FXVM3-T777P-N4FY8-PKFF4 SQL Server 2019 Web密钥&#xff1a;33…...

vue2-nextTick

这里是引用 vue2-nextTick 1. 什么是nextTick 先来看官方定义 在下次DOM更新循环结束之后执行延迟回调。在修改数据之后立即使用这个方法&#xff0c;获取更新后的DOM云里雾里&#xff0c;啥意思呢&#xff0c;其实本质就是事件循环、同步和异步的问题不懂事件循环相关问题的…...

Movie_Recommend系统架构解析:从数据采集到推荐展示

Movie_Recommend系统架构解析&#xff1a;从数据采集到推荐展示 【免费下载链接】Movie_Recommend 基于Spark的电影推荐系统&#xff0c;包含爬虫项目、web网站、后台管理系统以及spark推荐系统 项目地址: https://gitcode.com/gh_mirrors/mo/Movie_Recommend Movie_Rec…...

如何实现固定翼无人机编队飞行?PX4开源方案深度解析与实践指南

如何实现固定翼无人机编队飞行&#xff1f;PX4开源方案深度解析与实践指南 【免费下载链接】PX4-Autopilot PX4 Autopilot Software 项目地址: https://gitcode.com/gh_mirrors/px/PX4-Autopilot 多无人机编队飞行技术正从实验室走向实际应用&#xff0c;在测绘、农业、…...

用LLM自动生成CUDA内核真的靠谱吗?实测KernelBench框架效果与避坑指南

LLM自动生成CUDA内核的实践验证&#xff1a;KernelBench框架深度评测与技术指南 当我在项目中发现某个PyTorch模型的矩阵乘法操作消耗了60%的推理时间时&#xff0c;第一反应是考虑手工编写CUDA内核来优化。但作为一个同时维护三个项目的工程师&#xff0c;时间成本让我犹豫——…...

解决PARSEC 3.0安装中的常见问题:从gcc缺失到native输入配置

解决PARSEC 3.0安装中的常见问题&#xff1a;从gcc缺失到native输入配置 在性能测试和基准评估领域&#xff0c;PARSEC 3.0作为一套广泛使用的多线程基准测试套件&#xff0c;为研究人员和开发者提供了评估系统性能的强大工具。然而&#xff0c;在实际安装和配置过程中&#x…...

番茄小说下载器:如何轻松搭建你的个人离线图书馆?

番茄小说下载器&#xff1a;如何轻松搭建你的个人离线图书馆&#xff1f; 【免费下载链接】Tomato-Novel-Downloader 番茄小说下载器不精简版 项目地址: https://gitcode.com/gh_mirrors/to/Tomato-Novel-Downloader 还在为网络不稳定无法畅读小说而烦恼吗&#xff1f;番…...

Pixel Epic应用场景:律所尽调报告辅助生成+法律条文精准引用案例

Pixel Epic应用场景&#xff1a;律所尽调报告辅助生成法律条文精准引用案例 1. 法律行业的数字化挑战 法律尽职调查是并购交易、股权投资等商业活动中的关键环节。传统模式下&#xff0c;律师团队需要&#xff1a; 人工查阅数百页企业资料逐条核对法律法规手工编写数十页的尽…...

FFM Arena内存管理失效引发Native OOM?深度拆解Java 22 JEP 464中Scoped Memory Model的3种安全模式切换策略

第一章&#xff1a;FFM Arena内存管理失效引发Native OOM&#xff1f;深度拆解Java 22 JEP 464中Scoped Memory Model的3种安全模式切换策略Java 22 引入的 JEP 464 — Scoped Memory Model&#xff0c;旨在为 Foreign Function & Memory API&#xff08;FFM&#xff09;提…...

一天一个开源项目(第61篇):knowledge_graph - 把任意文本转成知识图谱

引言 “Convert any text to a graph of knowledge. Graph Retrieval Augmented Generation (GRAG) — a new and improved version of RAG.” 这是「一天一个开源项目」系列的第 61 篇文章。今天介绍的项目是 knowledge_graph&#xff08;GitHub&#xff09;。 想把文档、PDF…...

别再被 CAD+GIS 折腾到崩溃!这款插件让你效率翻 10 倍,一键搞定所有地理信息处理

做测绘、规划、市政设计的你&#xff0c;是不是每天都在被这些问题折磨&#xff1f;CAD 里画好图&#xff0c;切到 GIS 软件导数据&#xff0c;反复切换动辄半小时&#xff1b;加载大型影像文件卡到死机&#xff0c;属性表管理杂乱无章&#xff1b;想把 GIS 属性标到图纸上&…...

AI Agent不是你以为的那样

系列&#xff1a;《AI Agent 从原理到实战 —— 解密 Claude Code 背后的工程智慧》 第1篇引言 你大概有过这样的体验&#xff1a;打开 ChatGPT&#xff0c;说一句"帮我写封邮件&#xff0c;拒绝周五的会议邀请&#xff0c;语气委婉一点"&#xff0c;几秒钟后一封措辞…...