Android - Binder机制 - 获得普通service

解密Shizuku的Binder魔法:Android特权进程通信原理图解 本文深入图解了Shizuku如何利用Android的Binder IPC机制,实现普通应用与系统服务间的特权进程通信。通过剖析其以Shell或Root身份运行Server进程的核心原理,以及借助ContentProvider传递Binder引用的巧妙架构,揭示了Shizuku在不依赖完整Root权限的情况下,安全“代理”系统级操作的工作机制。 阅读详情

以下几篇文章是较深入分析binder机制。

目录

1. Android - Binder机制 - ServiceManager

2. Android - Binder机制 - 普通service注册

3. Android - Binder机制 - 获得普通service

4. Android - Binder机制 - client和普通service交互

5. Android - Binder机制 - Binder框架总结

6. Android - Binder机制 - ProcessState和IPCThreadState

7. Android - Binder机制 - 驱动

Android - Binder机制 - 获得普通service

UML及说明



1. Camera是客户端进程,它有一个函数是getCameraService函数,该函数就要获得CameraService服务;

2. Service_manager.c就是第一篇将的ServiceManager,它是另外一个进程,它要通过binder接收该进程的GetService请求,并进行相应处理(第一篇已经讲);

3. IInterface和IServiceManager定义了Camera和ServiceManager之间的功能接口,它是一个抽象类;

4. BpServiceManager和BpInterface继承于IServiceManager,当然就是对功能接口的具体实现;

5. Camera调用BpServiceManager的getService()接口获得服务;

6. IBinder是定义Binder数据传输层的功能接口,它有一个接口transact,做过android的应该都有印象,它也是一个抽象类;

7. BpBinder是对IBinder的具体实现,它是用来进行数据传输的,BpRefBase中的mRemote就是指向的BpBinder,BpRefBase起了一个代理作用,但是BpBinder没有直接和binder打交道,而是通过调用下面的IPCThreadState实现的;

8. IPCThreadState才是和binder进行打交道的类,它才是真正的数据传输者;

9. ProcessState它主要打开binder设备供IPCThreadState使用和获得ServiceManager用来注册服务;

10. 在分析的时候还是先有一个整体把握,这个会在后面详解,BpRefBase以上是业务逻辑(要实现什么功能),BpRefBase以下是数据传输(通过binder如何将功能实现);

11. 以后只要是见到Bpxxx的是在client进程,Bnxxx的是在service进程;


获得服务

1. 通过defaultServiceManager获得BpServiceManager,通过BpServiceManager的getService接口;

2. getService执行remote()->transact(CHECK_SERVICE_TRANSACTION, data, &reply);

3. remote()其实是BpBinder,transact执行IPCThreadState::self()->transact(mHandle, code, data, reply, flags),注意mHandle是0,代表ServiceManager;

4. IPCThreadState::self()->transact执行writeTransactionData(BC_TRANSACTION, flags, handle, code, data, NULL)和waitForResponse(reply),很明显就是发送数据,然后等待响应;

5. writeTransactionData其实并不直接将数据发送到binder驱动,而是将数据写到了mOut缓冲区,mOut是Parcel,该类是封装和驱动交互数据的数据格式(如果精通binder,要清楚这个格式);

6. waitForResponse调用talkWithDriver()获得binder的答复;

7. reply.readStrongBinder(),在Parcel中,binder是一个数据类型,所以readStrongBinder函数可以将reply转为IBinder,而且是BpBinder,其中的mHandle就是刚获得service的handle索引;

Shizuku实战:如何用ADB权限绕过Android隐藏API限制(附完整代码示例) 本文详细介绍了如何利用Shizuku框架,通过ADB权限优雅地绕过Android系统的隐藏API限制。文章提供了从环境配置、权限请求到核心调用的完整实战代码示例,重点解析了其基于Binder IPC的代理架构原理,并对比了Remote Binder Call与User Service两种调用模式,帮助开发者安全高效地实现静默安装等高级系统功能。 阅读详情

相关推荐

[Android 13]Binder系列--获取服务

获取服务。

qq_40731414的博客 1098

Android Binder服务的获取与使用

根据代码可以看到,最终是调用到了ProcessState->getStrongProxyForHandle方法中,传递的值是期望获取的Server的handle。//此方法和前边代码稍有不同的地方在于 reply这个参数,签名reply为0,此处不为0,则所有分支都应走if(reply)//将内核的binder_work添加至thread中的待执行队列。//在目标进程的wait_threads中获取一个thread。//生命局部变量的代码和之前讲过的流程一致。//代码在这里被唤醒。

sytregn的博客 1171

kotlin-foregroundService:具有android o通知的前台服务android的Kotlin代码

kotlin-foregroundService 具有android o通知的前台服务android的Kotlin代码 MainActivity.kt class MainActivity : AppCompatActivity() { var myService: MyService? = null var isBound = false privateval myConnection = object : ServiceConnection { override fun onServiceConnected(className: ComponentName, service: IBinder) { val binder = servic

android开发,使用kotlin学习Service

Activity和Service之间的通信由IBinder负责,在Activity中,创建一个类实现ServiceConnection接口,并且在这个类中重写onServiceConnected方法(当Service被绑定时会回调这个方法)和onServiceDisconnected方法(Service的创建进程崩溃或者被杀掉才会调用),然后再绑定Service。在Service中,需要创建一个类继承Binder,在onBind()方法中返回这个类的实例。(2)通过bindService()方法启动。

weixin_63357306的博客 1911

Activity绑定Service(Kotlin)

Activity开启,绑定,解绑,关闭Service。Kotlin版本。适合初学者

手把手教你调试RTL8201F:从芯片手册解读到LWIP驱动移植

本文详细解析了RTL8201F PHY芯片的开发流程,从寄存器配置到LWIP驱动移植,重点介绍了RMII模式下的特殊配置要点和调试技巧。通过实战案例和高级调试方法,帮助工程师解决网络性能问题,实现与FreeRTOS+LWIP协议栈的稳定集成。

ik678901234的博客 972

kotlin中的service

虽然Service是在Activity里启动的,但是在启动了Service之后,Activity与Service基本就没有什么关系了。比如说,目前我们希望在MyService里提供一个下载功能,然后在Activity中可以决定何时开始下载,以及随时查看下载进度。新增了两个分别用于绑定和取消service的按钮,而与service绑定的,自然是activity,绑定之后就可以使用Binder中的方法了。修改完成之后,我们看看要如何在activity中调用service中的这些方法。

qq_44016573的博客 826

思科路由器、交换机组网实验报告

通过思科模拟器搭建路由交换网络

ghj528的博客 1335

Kotlin实现Service的简单使用

Service初体验

m0_56184347的博客 1661

盘点军工行业软件研发的那些常用GJB标准

GJB5000、2786、438、141、102、8114等...

文章主要涉及嵌入式软件开发、测试、项目管理等,欢迎交流,共同进步。 9443

西门子S7-1200PLC控制步进电机的组态编程和具体步骤

西门子S7-1200PLC控制步进电机的组态编程和具体步骤 硬件准备: 1) 一个S7-1214C DC/DC/DC,订货号:6ES7 214-1AG40-0XB0 2) 一个86系的步进电机+相应的驱动器 3) 一个20A的西门子24V电源(步进驱动器及plc电源) 4) Portal V15版本 组态及编程: 1) 创建一个验证项目,添加cpu( S7-1214C),双击“工艺对象”,选择“运动控制”的TO_PositioningAxis V6.0版本,如下图所示: 2) “确定”后,系统自动生成名

Robot_PLC_HMI_Automation 1万+

Android - Binder机制 - 普通service注册

以下几篇文章是较深入分析binder机制。 目录 1. Android - Binder机制 - ServiceManager 2. Android - Binder机制 - 普通service注册 3. Android - Binder机制 - 获得普通service 4. Android - Binder机制 - client和普通service交互 5. Android -

等等... 大雄,有啦! 4192

基于Python的Booking酒店数据爬虫实战:最新技术与完整代码解析

本文将详细介绍如何使用Python构建一个高效的Booking酒店数据爬虫,涵盖从基础爬取到高级反反爬技术的完整实现。我们将使用最新的Python爬虫技术栈,包括requests-html、Playwright、智能代理轮换等技术,并提供完整的可运行代码示例。文章将深入探讨爬虫的各个组成部分,包括数据提取、存储、反反爬策略以及性能优化等方面。关键词:Python爬虫、Booking数据采集、反反爬技术、Playwright、数据存储。

2201_76125261的博客 936

Android - Binder机制 - client和普通service交互

以下几篇文章是较深入分析binder机制。 目录 1. Android - Binder机制 - ServiceManager 2. Android - Binder机制 - 普通service注册 3. Android - Binder机制 - 获得普通service 4. Android - Binder机制 - client和普通service交互 5. Android

等等... 大雄,有啦! 4384

改进yolov8|BackBone改进:PWConv、FasterNeXt替换yolov8主干网络

各位哥哥姐姐弟弟妹妹大家好,我是干饭王刘姐,主业干饭,主业2.0计算机研究生在读。和我一起来改进yolov8变身计算机大牛吧!本文中的论文笔记都是刘姐亲自整理,原创整理哦~

weixin_44379985的博客 748

RK3576 Buildroot 双机 ADB 异常排障实录:同版 `boot.img`,一台可识别一台不可识别

进程在跑”不等于“USB 枚举成功”,adbd存活只是必要不充分条件。生产环境中的全局别名可能反向污染系统脚本。shell 命令替换中的字符串问题,必须做字节级验证(od -tx1相比“改环境规避”,核心脚本对输入做鲁棒处理更可长期维护。

小灰灰的博客 210

Android - Binder机制 - ProcessState和IPCThreadState

以下几篇文章是较深入分析binder机制。 目录 1. Android - Binder机制 - ServiceManager 2. Android - Binder机制 - 普通service注册 3. Android - Binder机制 - 获得普通service 4. Android - Binder机制 - client和普通service交互 5. Android - Bi...

淡淡的宁静的博客 1172

真随机数与伪随机数

前面我们学习了LFSR,这个玩意落地到具体的应用是什么呢?没错是寄存器,这里在网络找到了几个回答,这里做个记录,下面一起来学习一下吧。

叫好与叫座虽然不是对立面,但想在同一个作品中达到双重效果很难。 1062

Android - Binder机制

Android - Binder机制  学习要点 : 1. Android - Binder机制 - ServiceManager 2. Android - Binder机制 - 普通service注册 3. Android - Binder机制 - 获得普通service 4. Android - Binder机制 - client和普通service交互 5. Android - B

颇锐克(公众号:颇锐克科技共享) 493

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

从Android6.0源码的角度剖析Service启动过程

Service是Android四大组件之一,与Activity的可视化界面相反,Service没有向用户提供交互界面,因此常被用于执行后台任务。Service的启动方式有两种:普通启动和绑定启动,其中,前者通过Context.startService方法启动,常用于执行普通的后台任务;后者通过Context.bindService方法启动,用于执行与启动组件有数据交互的后台任务。本文将从Andr...

老蒋也疯狂 1923

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Android - Binder机制 - Binder框架总结

以下几篇文章是较深入分析binder机制。 目录 1. Android - Binder机制 - ServiceManager 2. Android - Binder机制 - 普通service注册 3. Android - Binder机制 - 获得普通service 4. Android - Binder机制 - client和普通service交

9527的专栏 427

Content Provider(内容提供器),Broadcast(广播), Service(服务)

注意四大组件在使用前必须在manifests中进行注册,都是在中注册。Content Provider(内容提供器)Content Provider(内容提供器)并不常见,下面写一下读取联系人的代码:resolver = getContentResolver(); Uri uri = ContactsContract.CommonDataKinds.Phone.CON

chenmeng911的博客 1106

安卓第十三天笔记-服务(Service)

安卓第十三天笔记-服务(Service) Servcie服务 1.服务概念 服务 windows 服务没有界面,一直运行在后台, 运行在独立的一个进程里面 android 服务没有界面,一直运行在后台,默认是运行当前的应用程序进程里面。 2.建立服务 建立一个类继承Service类 public class ServiceDemo...

weixin_30872157的博客 98

Android Bound Services 简单使用

Bound Service 跟一般的Service的区别是Bound Service可以提供一些方法给开启它的人(组件),相当于把自己的把柄给Activity,这样Activity就可以控制这个Service,不至于不收控制。 1.首先,我们新建一个类,继承Service,重写onBind方法,这时候这个方法就有用了。而且必须用。别忘了注册Service。2.我们在类里创建一个内部类,继承Binde

知言而易行 439
上一篇: Android - Binder机制 - 普通service注册
下一篇: Android - Binder机制 - client和普通service交互
G机器猫
博客等级 码龄16年 106粉丝 74原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值