浅谈Android下binder的调用与拦截

来源 :职业·中旬 | 被引量 : 0次 | 上传用户:nihaochaochao
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘 要:Binder是Android系统进程间通信方式之一。Linux已经拥有管道system V IPC、socket等IPC手段,却还要倚赖Binder来实现进程间通信,说明Binder具有无可比拟的优势。本文通过对Binder的详细介绍以及与其他IPC通信方式的调用,使大家对Binder的优势和使用Binder作为Android主要IPC方式的原因有所了解。
  关键词:Android system_server binder
  本文内容包含使用在拥有root权限的Android2.3平台上针对system_server中binder通信的拦截。
  一、动态链接机制及Binder拦截选址
  要拦截模块甲对乙的调用,一般思路是通过ptrace远程注入并加载一新拦截模块至模块甲,并搜索模块甲的GOT表,找到对模块乙的调用地址,改成新模块内的某函数地址,然后新模块内的这个函数在进行了自己的处理后,再跳到模块乙中。
  这里用户进程空间所加载的libbinder.so和system_server端加载的libbinder.so在逻辑上不是同一个东西。正因为不是同一个东西,我们才能针对system_server进程中加载的libbinder.so动手,拦截其GOT表中对ioctl的调用,从而提前知道Service要返回的内容。这个ioctl就是拦截的选址所在。
  二、具体实现
  在这个常驻system_server进程内的共享库里,只实现了简单几个函数,其中do_hook函数在注入后通过外界调用,它不做具体的hook动作,仅仅只是把所需的两个函数地址写入Android的Property供外界使用:
  [cpp] view plaincopy01.//将新旧ioctl地址写入Andorid的Property供外界使用;
  02.int do_hook(void * param)
  03.{
  04.old_ioctl = ioctl;
  05.printf("Ioctl addr: %p. New addr %p\n", ioctl, new_ioctl);
  06.
  07.char value[PROPERTY_VALUE_MAX] = {’\0’};
  08.snprintf(value, PROPERTY_VALUE_MAX, "%u", ioctl);
  09.property_set(PROP_OLD_IOCTL_ADDR, value);
  10.
  11.snprintf(value, PROPERTY_VALUE_MAX, "%u", new_ioctl);
  12.property_set(PROP_NEW_IOCTL_ADDR, value);
  13.
  14.return 0;
  15.}
  16.
  17.//全局变量用以保存旧的ioctl地址,其实也可直接使用ioctl;
  18.int (*old_ioctl) (int __fd,unsigned long int __request, void * arg) = 0;
  19.int res = (*old_ioctl)(__fd,__request, arg);
  20.return res;
  21.}.
  三、小结
  第一,每个被加载的模块,无论是可执行程序还是共享库,均有自己独立的PLT和GOT表。所以拦截这个模块的对外调用的GOT,不影响其他模块。
  第二,本文只实现了拦截模块的调出到其他模块的动作,其他模块的调入没有涉及到。
  第三,system_server是system用户,不是有权限写所有名字的Property,这里用了persist.sys.开头的属性名,而persist.sys.开头的属性会保存至磁盘,因此性能会差一些。
  第四,如果不以root身份运行注入程序,则ptrace附加时会失败。
  第五,Andriod系统的大部分Service都运行在system_server进程中,可以拦截到。但部分自定义的用户Service在用户进程中,如需要拦截,则要ptrace到那个用户进程才行,拦截方法也类似。
  以上是笔者关于Android下binder的调用与拦截的一些思路与实现方法。Android自身由于具有集成性、控制性、交互性等特点,所以可以激发学生的学习兴趣、调动学生的积极参与、扩大学生知识面,为学生提供多种学习的路径。
其他文献
距2007年高考的时间已屈指可数了,在剩下的关键时间里,如果你的复习还是全面开花,必将会浪费宝贵的时间和精力,也难以得到一个满意的成绩。唯有掌握2007年高考核心内容,才能删繁就
期刊
对鄂尔多斯西缘奥陶系储层特征及主控因素进行了研究,研究发现,鄂尔多斯盆地西缘碳酸盐岩储层具有多因素联合控制、多阶段复合成因、储层的类型多样的特征;储层的岩性主要以颗粒
【正】科技、经济、社会的迅速发展和激烈竞争,推动着各级各类教育的改革.1995年经教育部批准,我校模具设计与制造专业开始教改试点.在一系列的改革中,教学内容和课程体系的
摘 要:本文着重介绍了在数控车床上加工球面配合体的方法、步骤。  关键词:球面配合体 加工准备 加工工艺分析 数控加工及检测  高技能数控人才,不仅需要掌握坚实的专业理论知识,还必须实践操作技能过硬,适应能力强,实用本领多。因此,我们设计出加工难度等级较高的球面配合体,用于日常的开拓性教学。球面配合体如图1所示。  球面配合体由两个半圆球面配合而成,其毛坯尺寸为φ45mm棒料,材料为铝合金。该工件
摘要:本文主要探讨了技师学院小专业教学模式和模块化教学模式的运用。  关键词:模块化教学模式探索机修钳工课程教学    我国提出“要大力发展高等职业教育,培养一大批具有必要理论知识和较强实践能力,生产、建设、管理、服务第一线的专门人才”。技师院校原有的教育模式、课程体系和课堂教学模式已不能适应职业教育发展的需要。探索新的教学模式成为当前职业教育的主题。  笔者所在学院这几年招生工作受大环境影响,生
《邓小平时代》是由美国学者傅高义先生倾十年之力写成的著作。直译意译之争历来是翻译家争论的焦点,众说纷纭,莫衰一是。本文通过对比原著DengXiaopingandtheTransformationof
摘 要:学习动机是学习活动顺利进行的重要条件,本文根据技工学校学生数学学习的现状,从教育学和心理学的角度出发,分析教师在技工学校数学教学中应如何激发学生的学习动机,并使动机得以持久,进而转化成学习的动力。  关键词:技校学生 数学 学习动机 激发  心理学认为,动机是引起和维持个体的活动,并使活动朝向某一目标的内部心理过程和驱动力。学习动机是指直接推动学生进行学习活动的内在原因或内部动力,对学生的
本文根据《中等职业学校英语教学大纲》中的教学目标要求,结合笔者多年的中职英语教学实践经验,谈谈如何利用游戏和歌曲激发中职学生学习英语的兴趣。
根据罗迈国际在不久前进行的一次关于人才流动以及猎头在其中起到作用的调查显示,在被调查的2000余名人才中,有32.36%的人在2012年换过工作,同时有50.26%的人成功通过猎头找到新工作。  愿意通过猎头更换工作者近六成  调查中一项针对职场人士倾向于选择何种形式寻找新工作的结果显示,更愿意通过“猎头联系”方式寻找新工作的职场人占57.69%;选择通过“网络招聘”和“朋友推荐”方式的分别以24
针对人脸图像复原问题,提出了基于偏最小二乘法回归(Partial Least Squares,PLS)的超分辨率复原技术与小波双立方配比插值放大结合的算法。对低分辨率图像进行小波分解后得到的3个高频子图像插值,然后用小波逆变换进行重建。同时对低分辨图像进行双立方插值,插值后的图像与小波重建图像进行融合,提取融合图像特征作为训练样本,应用偏最小二乘法回归进行样本训练,最后得到复原高分辨率图像。试验结