应用安全 --- 安卓安全 之 调用隐藏

news/2025/10/5 19:32:24/文章来源:https://www.cnblogs.com/GKLBB/p/19126931

应用安全 --- 安卓安全 之 调用隐藏

可能会将调用的so中方法写入jnionload中动态注册同时将函数字符串加密存储

 

这个问题很常见,有几种可能的原因。让我帮你分析一下:

可能的原因和解决方案

1. 函数名被混淆或压缩

bash
# 查看所有导出函数,不限于Engine
readelf -s libengine.so | grep -i start
nm -D libengine.so | grep -i start
objdump -T libengine.so | grep -i start# 查看所有JNI相关函数
readelf -s libengine.so | grep -i java
nm -D libengine.so | grep -i jni

2. 使用动态注册(RegisterNatives)

这是最常见的原因 - 函数没有使用标准的JNI命名约定:

bash
# 查找JNI_OnLoad函数(动态注册通常在这里)
objdump -t libengine.so | grep -i jni_onload
nm -D libengine.so | grep -i jni_onload# 查看所有函数,寻找注册相关的代码
strings libengine.so | grep -i register

3. 函数没有被导出

bash
# 查看所有符号(包括未导出的)
nm -g libengine.so > all_symbols.txt
readelf -s libengine.so > all_symbols_detailed.txt# 然后在这些文件中搜索
grep -i engine all_symbols.txt
grep -i start all_symbols.txt

4. 使用IDA Pro或Ghidra深度分析

bash
# 首先用strings查看可能的函数名线索
strings libengine.so | grep -E "(start|Start|START|engine|Engine)"

5. 检查是否是静态链接或内联

bash
# 查看文件信息
file libengine.so
readelf -h libengine.so# 查看所有段和节
readelf -S libengine.so

动态分析方案

既然静态分析找不到,我们可以通过动态方式来定位:

方案1:使用Frida Hook JNI调用

javascript
Java.perform(function() {// Hook System.loadLibrary来知道so何时加载var System = Java.use("java.lang.System");System.loadLibrary.overload('java.lang.String').implementation = function(library) {console.log("[+] Loading library: " + library);if (library.indexOf("engine") !== -1) {console.log("[!] Target engine library loaded!");}return this.loadLibrary(library);};// Hook Engine.start方法var Engine = Java.use("com.main.engine.Engine");Engine.start.overload('long', 'int', 'java.lang.String', 'java.lang.String', 'java.lang.String').implementation = function(a, b, c, d, e) {console.log("[+] Engine.start called!");// 打印调用栈console.log(Java.use("android.util.Log").getStackTraceString(Java.use("java.lang.Throwable").$new()));return this.start(a, b, c, d, e);};
});

方案2:使用Frida Stalker追踪Native执行

javascript
Java.perform(function() {var engine_start = null;// 枚举模块中的导出函数Process.enumerateModules({onMatch: function(module) {if (module.name.indexOf("engine") !== -1) {console.log("[+] Found module: " + module.name + " at " + module.base);// 枚举该模块的所有导出函数Module.enumerateExports(module.name, {onMatch: function(exp) {console.log("  Export: " + exp.name + " at " + exp.address);if (exp.name.indexOf("start") !== -1) {engine_start = exp.address;}},onComplete: function() {}});}},onComplete: function() {}});
});

方案3:检查JNI_OnLoad

c
// 在JNI_OnLoad中通常有这样的模式:
JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void* reserved) {JNIEnv* env;(*vm)->GetEnv(vm, (void**)&env, JNI_VERSION_1_6);// 注册Native方法JNINativeMethod methods[] = {{"start", "(JILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)I", (void*)native_start}};jclass clazz = (*env)->FindClass(env, "com/main/engine/Engine");(*env)->RegisterNatives(env, clazz, methods, 1);return JNI_VERSION_1_6;
}

建议的排查步骤

  1. 先用strings命令查看so文件中是否有相关字符串

  2. 检查JNI_OnLoad是否存在

  3. 使用Frida动态分析实际的函数调用

  4. 用IDA Pro/Ghidra进行深度静态分析

你能先运行这些命令看看输出结果吗?特别是 strings 和检查 JNI_OnLoad 的命令。

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

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

相关文章

电子商城网站开发平面广告设计素材网

PTA 排队“夹塞”是引起大家强烈不满的行为,但是这种现象时常存在。在银行的单窗口排队问题中,假设银行只有1个窗口提供服务,所有顾客按到达时间排成一条长龙。当窗口空闲时,下一位顾客即去该窗口处理事务。此时如果已知第i位顾客…

淘宝客网站哪个好克隆视厅网站怎么做

人工智能和芯片供应商 XMOS 宣布与嵌入式音频软件专家 DSP Concepts 建立合作伙伴关系。该合作协议将允许音频开发人员将 XMOS 的高度确定性、低延迟的 xcore.ai 平台与 DSP Concepts 的 Audio Weaver 软件结合起来。该软件使用户能够利用多核算力以图形方式设计和调试音频和语…

商城网站开发视频邯郸网站设计邯郸网站制作

简介: 《实时数仓入门训练营》由阿里云研究员王峰、阿里云资深技术专家金晓军、阿里云高级产品专家刘一鸣等实时计算 Flink 版和 Hologres 的多名技术/产品一线专家齐上阵,合力搭建此次训练营的课程体系,精心打磨课程内容,直击当下…

2025聚合硫酸铁厂家最新企业品牌推荐排行榜,工业聚合硫酸铁,混凝剂聚合硫酸铁,固态聚合硫酸铁,粉末聚合硫酸铁,硫酸亚铁公司推荐!

当前聚合硫酸铁行业发展迅速,市场上生产厂家数量众多,但质量参差不齐,给采购方带来诸多选择难题。部分厂家存在生产工艺落后、产品纯度不足的问题,导致其生产的聚合硫酸铁在水处理等应用场景中效果不佳,不仅影响水…

2025成型机厂家最新企业品牌推荐排行榜,冷弯成型机,卷帘门成型机,卷闸门成型机,彩钢瓦成型机,货架成型机推荐!

在当前金属加工行业快速发展的背景下,冷弯成型机作为关键生产设备,其质量与性能直接影响企业的生产效率和产品品质。然而,市场上成型机厂家数量众多,实力参差不齐,给企业选购带来诸多困扰。部分厂家缺乏核心技术,…

基于springboot的家政服务预约系统 - 指南

基于springboot的家政服务预约系统 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "…

天水市秦州区作风建设年网站wordpress文章图片大小

在使用proteus的时候,有时候你会发现点击调试开始运行后,串口虚拟终端没有自动弹窗的问题,其实照成这种现象的原因是你在使用的过程中移动了器件位置或者是对整个视窗使用鼠标滚动进行缩放了,如果要重新弹窗则需要进行以下操作: …

网站设计人员就业要求正邦设计怎么样

2024年2月10日力扣题目训练 2024年2月10日力扣题目训练551. 学生出勤记录 I557. 反转字符串中的单词 III559. N 叉树的最大深度241. 为运算表达式设计优先级260. 只出现一次的数字 III126. 单词接龙 II 2024年2月10日力扣题目训练 2024年2月10日第十七天编程训练,今…

手机网站开发工具影视网站建设需要学什么

来源:股权投资论坛目录一、隐形冠军的概念二、隐形冠军的四个特征三、隐形冠军为何隐形四、隐形冠军到底有多牛五、如何成为隐形冠军六、中国隐形冠军多吗1隐形冠军的概念“隐形冠军”这个概念是赫尔曼西蒙教授提出的。1986年,他在研究德国出口数据时发现…

2025 年 PP 管厂家最新推荐榜:甄选 pp 风管,PP 喷淋塔,pp 洗涤塔,pp 通风管道优质公司!

引言当前 PP 管市场供需两旺,但采购痛点愈发凸显。部分厂家为压缩成本选用劣质原料,导致产品耐腐、抗老化性能不达标,使用中频繁出现破裂渗漏,既造成经济损失又埋下安全隐患。市场上厂家水平参差不齐,多数缺乏专业…

解密并下载受DRM保护的MPD(DASH流媒体)加密视频 - 教程

解密并下载受DRM保护的MPD(DASH流媒体)加密视频 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas…

在PyCharm中运行 wandb.login();

在PyCharm中运行 wandb.login()wandb: ERROR api_key not configured (no-tty). call wandb.login(key=[your_api_key])Traceback (most recent call last): File "E:/assificnLi-v2.py", line 60, in <…

网站管理员在哪里浙江网站建设而

我们总是希望MySQL能够获得更高的查询性能&#xff0c;最好的办法是弄清楚MySQL是如何优化和执行查询的。一旦理解了这一点&#xff0c;就会发现&#xff1a;很多的查询优化工作实际上就是遵循一些原则让MySQL的优化器能够按照预想的合理方式运行而已。当向MySQL发送一个请求的…

06.概念二:神经网络 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

机器学习科学家分享技术写作艺术

本文介绍了一位应用科学家如何通过技术写作分享机器学习系统、数据科学方法论等专业内容,探讨了写作对技术学习和职业发展的重要性,以及沟通能力在科技领域的价值。Eugene Yan 与科学写作艺术 Eugene Yan 是某中心的…

同性恋色做视频网站那个做图网站叫什么

封装是把过程和数据包围起来&#xff0c;对数据的访问只能通过已定义的接口。面向对象计算始于这个基本概念&#xff0c;即现实世界可以被描绘成一系列完全自治、封装的对象&#xff0c;这些对象通过一个受保护的接口访问其他对象。封装是一种信息隐藏技术&#xff0c;在java中…

AT VP 记录

AGC057 A 可以注意到用位数少的一定不优,因为其向外拓展的方式更多导致不能用的数也越多。所以我们肯定先选择位数最多的,然后考虑剩下的还有哪些可以选。假设 \(r\) 的位数为 \(k\),考虑 \([\max(10^{k-1},l),r]\)…

05-springAOP的实现

05-springAOP的实现$(".postTitle2").removeClass("postTitle2").addClass("singleposttitle");Spring IOC与AOP全面详解 一、Spring IOC 三种实现方式 1.1 IOC 容器核心概念 IOC(控制…

商务网站建设策划书上海网站推广排名公司

1.Linux的发展史 Linux&#xff0c;一般指GNU/Linux&#xff08;单独的Linux内核并不可直接使用&#xff0c;一般搭配GNU套件&#xff0c;故得此称呼&#xff09;&#xff0c;是一种免费使用和自由传播的类UNIX操作系统&#xff0c;其内核由林纳斯本纳第克特托瓦兹&#xff08…

实用指南:npm run build 报错:Some chunks are larger than 500 KB after minification

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …