android插件化欺骗AMS

ActivityManager系统服务源码分析 ActivityManager作用:与正在运行的Activity进行交互,获取系统中所有运行的Activity相关信息,例如Task Memory Service。 如下所示:获取正在运行的服务信息,ActivityManagerNative.getDefault().getServices()调用的是代理类ActivityManagerProxy中的getServices方法。 Activi 阅读详情

在这里插入图片描述
反射到ActivityManagerNative—gDefault-----Singleton—mInstance ,因为mInstance是ActivityManager类型的,而ActivityManage是接口类型,所以动态构造代理替换startActivty实现目标Activity替换stubactivity绕过 AMS对activity得检查。
在这里插入图片描述
通过反射currentThread一路反射H类,反射hook mH父类Handler接口callback handleMessage,在其中的handleLunachactivity中替换回目标Activity,然后启动。

最后是绕过安装检测不说了。

反射目测只能hook接口类中的函数,或是直接替换字段。

在这里插入图片描述

virtualapp

我这里总结者个其实是为研究virtualapp的实现机制,研究了下发现后半部分和以上实现类似,但在前半部分替换singleton出现了差异。
这里先说下这个架构里的反射模块。

笔走龙蛇的反射hook

整个反射可谓被搞的完全变了样,
我们这里以ActivityManagerStub为例说明下,

1.类实现
public class ActivityManagerStub extends MethodInvocationProxy<MethodInvocationStub>
在这里插入图片描述
核心类和接口实现如图,addMethodProxy 通过两层重载,维护了一个叫做mInteralMethodProxies的Map映射,来添加对函数的hook或替换。
这里重点来了,我们怎么确定实现的是按个类里的hook。

这里我们看ActivityManagerStub构造函数
public ActivityManagerStub(){
super(new MethodInvocationStub<>(ActivityManagerNative.getDefault.call()))
}
这里是通过反射得到default构建见一个MethodInvocationStub类,而这个类里恰好是对传入参数的代理构造。也就是说我们实现了参数类的hook。

  1. 利用方式
    在这里插入图片描述
    还是以ActivityManagerStub说明,在构造类default的代理后,我们通过MethodInvocationProxy里重载的addMethodProxy添加需要hook的函数。完成AMS的服务的欺骗。

  2. 问题
    问题是替换activities的操作不在这里,尴尬了。

实现自己的启动流程

在这里插入图片描述
如图,virtualApp实现了自己的AMS管理流程,只在最后hook了ActivityThreadH替换了下。估计是考虑到Android系统兼容性问题。

Android 插件化分析(4) - 启动一个没有在manifest注册的Activity Activity必须要在manifest里申明,否则会抛出ActivityNotFoundException。这个是大家再熟悉不多的Android开发规则。 但是所谓的插件化就是要在不安装新的apk的情况去修复bug或者增加新的功能,增加一个新的Activity是再正常不过的要求,所以我们就需要利用反射和动态代理去实现这一个要求。 之前分析过,要启动一个Activity我们需要把Intent发... 阅读详情

相关推荐

浅谈Android插件化

小编这些年深知大多数初中级Android工程师,想要提升自己,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。因此我收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!资料⬅专栏获取到这里基本的框架就差不多结束了。

2401_85493350的博客 1480

AMS Hook

2,AMS Hook AMS 的详细Hook点请看这篇文章, http://blog.youkuaiyun.com/u012439416/article/details/70665923 Hook AMS只需要简单的Hook ActivityManagerNative的gDefault变量就可以了。 该变量定义如下, private static final Singleton gDefault

Jack的博客 539

Android 插件化

1.插件化 插件可以理解为免安装的Apk,而支持插件的app称为宿主。 在Android系统中,应用是以Apk的形式存在的,应用都需要安装才能使用。实际上Android系统安装应用的方式相当简单,就是把应用Apk拷贝到系统不同的目录下,然后把so解压出来而已。 常见的应用安装目录有: /system/app:系统应用 /system/priv-app:系统应用 /data/app:用户应用 一个Apk会包含如下几个部分: classes.dex:Java代码字节码 res:资源文件 .

zenmela2011的专栏 3941

使用动态代理拦截Android Activity的启动

使用动态代理拦截Android Activity的启动1.动态代理拦截的要求 要代理的类要实现接口 要能获取目标类的对象 2.对startActivity进行拦截activity的启动过程通过分析源码知道了实际内部调用了ActivityManagerNative.getDefault() .startActivity这个方法,而getDefault这个方法内部是st

AXNshy的博客 1423

Android插件化-Service篇,身为一个安卓程序员Context都没弄明白

data.token, SERVICE_DONE_EXECUTING_ANON, 0, 0); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } } catch (Exception e) { if (!mInstrumentation.onException(service, e)) { throw new RuntimeException( "Unable to create service " + data.info.

m0_66264533的博客 7841

Android插件化Service启动原理与dexElements注入实战

Android Service组件启动依赖系统级校验与ClassLoader类查找机制,其核心在于ActivityManagerService(AMS)对Manifest注册的强制验证,以及ActivityThread通过PathClassLoader的dexElements数组进行类加载。单纯使用DexClassLoader动态加载无法绕过该限制,根本原因在于AMS和系统服务仅信任宿主PathClassLoader的dexElements路径。本文聚焦Service插件化的本质难题——‘系统不认账’,详解

weixin_31815843的博客 206

Android源码分析-ActivityManagerService(AMS)源码分析

ActivityManagerService(简称AMS)是Android系统中最重要的一个服务,负责管理Android系统中的四大组件以及他们的生命周期;同时,还提供应用进程管理,包括Home进程;还提供包括电池状态查询的API接口。ActivityManagerService(AMS)系统架构以及相关核心组件: 在Android系统中,许多服务都是采用C/S架构。AMS对应的Client端组件是ActivityManagerProxy。

记录和分享程序人生的点点滴滴 4562

Android Service插件化:Hook AMS与占坑代理的完整实现指南

插件化作为动态化技术的核心方向,在Android领域常被用于模块解耦与热更新。相比Activity的成熟方案,Service插件化因涉及系统服务注册表、Binder跨进程通信及生命周期回调转发,实现复杂度更高。从Android系统服务AMS的组件校验机制入手,理解ServiceRecord的创建与查找原理,是Hook点选型的基础。通过IActivityManager代理层改写Intent,并借助ProxyService占坑容器完成生命周期转发,可在不修改系统源码的前提下实现Service的动态加载。该方案适

weixin_29169505的博客 180

基于《Android插件化开发指南》第5章对于"欺骗AMS"的思考

在我们初学Android阶段经常会遇到一个异常: Unable to find explicit activity class xxx; have you declared this activity in your AndroidManifest.xml? 异常信息提示的很清楚,原来我们在start一个新的Activity时,忘记在AndroidManifest.xm...

xlh1191860939的博客 1420

Android Hook 技术之 绕过系统对Activity验证

【SDK热更系列】Android Hook 技术之 绕过系统对Activity验证 , 原理详见个人博客https://blog.youkuaiyun.com/u012573920/

Android代码-利用AMS Hook和APT去构建的一个Activity路由框架

EasyRouter 欢迎加入Android技术交流群,群号码:577953847 EasyRouter是一个简易的使用字符串进行Activity,Browser跳转的路由框架,并支持组件化开发。 Features EasyRouter实现了通过字符串进行Activity之间跳转路由,通过APT在编译器实现路由表的构建,劫持了startActivity()进行动态路由 EasyRouter实现了Activity之间跳转,返回时的数据自动注入,完全屏蔽了原生的一套繁琐API EasyRouter实现了通过字符串进程Browser的路由跳转 EasyRouter支持更换路由跳转时数据序列化的解析器,默认为Gson,可以通过EasyRouterSet进行更换 EasyRouter劫持了onActivityResult(),并将其改为接口回调 EasyRouter通过transform ASM实现了一个gradle插件来支持组件化开发 Usage 1.在Activity中自定义URL标识符,目前只支持单一的URL标识,URL的Scheme均为activity:// @Route("acti

Android插件化-Service篇

在Android中Service主要是用于执行后台任务,比如应用在后台通过Service播放音乐或者进行文件下载,更或者说是启动一个前台Service以达到保活目的等等。

2401_85112887的博客 1995

ADS仿真功率放大器实例学习笔记

ADS仿真功率放大器实例学习笔记

qq_36521926的博客 1万+

android 禁止插件化,Android 插件化实现方式(Hook)

一、首先我们要找到Hook的点1. 分析我们先大概看下activity的启动流程(图片来自Android 插件化开发指南)image当我们调用startActivity的时候,AMS对我们要启动的Activity进行检查,是否在AndroidManifest中声明过,如果没有就报没有在AndroidManifest的错误。这个时候需要欺骗AMS,我们需要hook,要它去检查一个我们预配置的Acti...

weixin_39719042的博客 328

c语言实现语音检测vad_壹鸽技术科普·智能语音客服系统中的前端语音处理技术...

随着智能客服机器人产业的迅速发展,尤其是伴随着人工智能AI的风潮,预计在2020年我国智能客服市场将达到万亿级别。在智能客服机器人领域中对电话信道语音进行端点检测处理的应用正在不断扩展和深化。目前语音端点检测(Voice Active Detection,简称VAD)的主要任务是准确快速判决出待处理的语音信号有话还是无话,作为自动语音识别(Automatic Speech Recognition,...

weixin_36431018的博客 508

嘉立创封装图下载后必做的3步优化(附批量删除机械层技巧)

本文针对从嘉立创下载的封装图,系统讲解了三步核心优化流程,以解决其直接使用时的常见问题。重点介绍了如何高效批量删除冗余的机械层,避免制造错误;并详细说明了规范丝印层间距、统一焊盘命名等关键步骤,帮助工程师将第三方封装转化为可靠、合规的设计资源,从而提升PCB设计效率与文件质量。

weixin_29227585的博客 433

360 android框架,360 董福源 - Android框架虚拟化实战.pdf

Android框架虚拟化实战董福源360手机卫士2017.什么是虚拟化原生apk 在封闭系统内 免安装运行Android系统的一种沙箱技术2017.技术架构Sandbox appsAndroid OS2017.目录Sandbox appsAndroid OS2017.Activity插件化只能启动Manifest中声明的activ...

weixin_39652869的博客 239

谷歌DreamFusion使用方法及实例详解

DreamFusion 是谷歌提出的基于文本生成3D模型的突破性技术,无需3D训练数据,通过2D扩散模型(如Imagen)与NeRF(神经辐射场)结合实现。以下为使用社区开源实现(如。)的详细步骤及实例。

主攻大数据 人工智能 物联网 安全 低空经济等方向。mtsc 、gtest特邀分享嘉宾 1042

android 插件开发 如何启动插件activity,android插件开发-就是你了!启动吧!插件的activity(二)...

这篇博客是上篇的延续,在阅读之前先阅读第一部分:第一部分我们在启动插件的activity时,通过替换component成功欺骗AMS获得了启动一个activity所必须的一些资源。不过,我们还没有把获取的那些资源都转移到插件的activity之下。这一节就是解决这个问题。所有的答案都是分析源码之后得到的,所以我们还和之前一样继续分析源码,看下AMS是怎么把资源关联到一个activity上的,这样我...

weixin_39936380的博客 345

手把手教你用STM32硬件SPI驱动BMI088陀螺仪(附完整代码)

本文提供了一份详尽的STM32硬件SPI驱动BMI088陀螺仪的实战指南。内容涵盖从硬件连接、SPI底层配置、驱动层封装到设备初始化、数据读取与同步策略,并深入探讨了数据处理、滤波融合及温度补偿等核心技巧,旨在帮助开发者构建稳定高效的IMU驱动框架,解决BMI088应用中常见的挑战。

quiet的专栏 529

[Python图像处理] 十.形态学之图像顶帽运算和黑帽运算

数学形态学(Mathematical morphology)是一门建立在格论和拓扑学基础之上的图像分析学科,是数学形态学图像处理的基本理论。其基本的运算包括:腐蚀和膨胀、开运算和闭运算、骨架抽取、极限腐蚀、击中击不中变换、形态学梯度、Top-hat变换、颗粒分析、流域变换等。本篇文章主要讲解Python调用OpenCV实现图像形态学转化,包括图像顶帽运算和图像黑帽运算,基础性知识希望对您有所帮助。

杨秀璋的专栏 1万+

插件开发之360 DroidPlugin源码分析(四)Activity预注册占坑

在了解系统的activity,service,broadcastReceiver的启动过程后,今天将分析下360 DroidPlugin是如何预注册占坑的?本篇文章主要分析Activity预注册占坑,Activity占了坑后又是什么时候开始瞒天过海欺骗AMS的?先看下Agenda: AndroidMainfest.xml中概览 Activity中关键方法被hook时机 startActivi...

android开发笔记 298

华为OD机试真题 新系统2026-04-15 Python&JS 实现【失灵的键盘】

有一个键盘有2个按键失灵了,按下这些键时会连续输出其他键对应的字符两次。具体如下: 1. 按下j键一次,屏幕上显示uu(两个连续的u);  按下b键一次,屏幕上显示t(两个连续的t) 2. u键和t键是好的,按下u键一次时,屏幕只会显示一次u(正常按键);按下t键一次时,屏幕只会显示一次t(正常按键) 3. 假定屏幕上连续显示两个t一定是按了一次b键,而不是两次t键;假定按键t之后不会紧接着按键b,即tttt转义为两个b,而不可能是tb

MISAYAONE的博客 523

android插件开发-就是你了!启动吧!插件的activity(二)

这篇博客是上篇的延续,在阅读之前先阅读第一部分:第一部分 我们在启动插件的activity时,通过替换component成功欺骗AMS获得了启动一个activity所必须的一些资源。不过,我们还没有把获取的那些资源都转移到插件的activity之下。这一节就是解决这个问题。所有的答案都是分析源码之后得到的,所以我们还和之前一样继续分析源码,看下AMS是怎么把资源关联到一个activity上的,这样

何以诚的专栏 6203

ABAP BDC 处理踩坑笔记:把错误挡在录制之前,把稳定做进每一行 BDCDATA

本文总结了SAP BDC(批输入)开发中的常见问题和解决方案。重点包括:1)理解BDCDATA本质是模拟人工操作而非直接操作数据库;2)数据格式化技巧,如金额、日期、物料号等字段的标准化处理;3)通过CTU_PARAMS参数控制执行环境,确保屏幕尺寸和更新模式一致;4)不要依赖sy-subrc,应通过解析MESSTAB消息判断业务是否成功;5)录制阶段的常见陷阱及解决方法;6)疑难问题的系统性解决思路;7)建议建立完善的错误处理机制,包括日志记录和重跑功能。文章提供了实用的ABAP代码示例和配置建议,帮助开

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 265

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Android插件化技术

一、Android插件化技术 我们在平时的开发过程中,会经常遇到产品需求的变更或者出现bug,在传统的模式中,我们需要首先需要修改代码,然后重新打包Apk,再交给公司的运营去官网或者应用商店上线,用户在打开应用的时候就会进行更新了。但是这种模式有几个缺点,一是上线周期长,从修改代码到用户更新需要较长的时间;二是用户更新代价较大,每次用户更新都需要下载整个Apk包,整个Apk包包括了...

xiao_nian的博客 7889

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

上一篇: 泄露地址和利用总结
下一篇: mave仓库管理
inquisiter
博客等级 码龄10年 374粉丝 228原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值