自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(52)
  • 收藏
  • 关注

原创 ContentProvider Hook

5 ContentProvider HookContentProvider的Hook和 service类似,都是通过代理分发技术来实现,必须要实现增删改查四个方法。还有一点不同的是,可以监听数据库的变化。同样的,也有注册,换马甲以及脱马甲过程。5.1 ContentProvider注册同样的, provider个数和service一样的少,因为使用没有Activity那么频繁。

2017-07-31 10:27:51 580

原创 BroadcastReceiver Hook

4, BroadcastReceiver HookBroadcastReceiver分为三个步骤: 注册, 发送和接收.并且BroadcastReceiver按照注册分为动态广播和静态广播。当然,插件中的静态广播按照动态广播进行处理。并且宿主根本不知道插件程序会注册哪些receiver,AndroidManifest.xml也不会有这些receiver。还有一个问题,静态广播时

2017-07-31 10:27:35 774

原创 Instrumentation Hook

3, Instrumentation  Hook其实, Instrumentation的Hook应该放在PMS和AMS之前论述的,那么,Instrumentation是什么呢?Instrumentation,每一个应用程序只有一个Instrumentation对象,每个Activity内都有一个对该对象的引用。Instrumentation可以理解为应用进程的管家,ActivityTh

2017-07-31 10:27:16 669

原创 Service Hook

2, Service HookService和Activity很类似,都有穿马甲和脱马甲的过程,但是细节不同。有2种方法启动一个service, startService和bindService。在此就以startService为例进行论述。2.1 service注册AndroidManifest.xml里面的确注册了大量的service,但不是空的。<service a

2017-07-31 10:26:50 527

原创 Activity Hook

1, Activity HookActivity,Service等组件是有生命周期的,它们统一由系统服务AMS管理;Activity的详细启动流程在此就不论述了。主要步骤如下,1, 从App进程调用startActivity等一系列方法;2, 通过IPC调用进入系统进程system_server,完成Activity管理以及一些校检工作;3, 回到APP进程完成真正的Act

2017-07-31 10:26:20 619

原创 AMS Hook

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

2017-07-31 10:26:03 436

原创 PMS Hook

1,PMS Hook和一般服务不同的是,AMS和PMS使用了另外一种Hook方式,虽然Hook的代码结构完全相同。PMS通过getPackageManager这个方法来获取, ContextImpl类的getPackageManager方法如下,public PackageManager getPackageManager() { if (mPackageManager !

2017-07-31 10:25:40 1701

原创 API Hook总结之五

6.12 WindowSessionWindowSession相关的结构图如下,Hook 类IWindowSessionHookHook 代理类IWindowSessionInvokeHandle  Hook 方法实现类addaddToDisplay

2017-07-31 10:25:28 337

原创 API Hook总结之四

6.9 WifiManager Hook结构图如下,Hook 类IWifiManagerBinderHookHook 代理类IWifiManagerHookHandle Hook 方法实现类getScanResultsgetBatchedScanResults

2017-07-31 10:25:10 485

原创 API Hook总结之三

6.6 MountService Hook结构图如下,Hook 类IMountServiceBinderHookHook 代理类IMountServiceHookHandleHook 方法实现类mkdirsIMountServiceHookHandle的内

2017-07-31 10:24:37 325

原创 API Hook总结之二

6.3,GraphicsStats Hook结构图如下,Hook 类IGraphicsStatsBinderHookHook 代理类IGraphicsStatsHookHandleHook 方法实现类requestBufferForProcessIGrap

2017-07-30 09:38:54 602

原创 API Hook总结之一

6,API Hook总结实际上, droidplugin框架一共Hook了十多个服务对应的API接口, ServiceManager和LocationManager API的Hook在前面已经详细论述了。这些Hook一般都是在HookFactory的installHook方法中构造和安装的。其实主要就是三要素,Hook类, Hook 代理类以及Hook 方法实现类。6.1, A

2017-07-30 09:34:06 756

原创 LoactionManager Hook原理

5 LoactionManager原理5.1 结构图类似于ServiceManager,相关结构图如下,ILocationManagerBinderHook中实现了createHookHandle和getOldObj方法,父类BinderHook实现了invoke和onInstall方法。ILocationManagerHookHandle是一个独立的类,实现了in

2017-07-30 09:26:04 545

原创 ServiceManager Hook原理

4. ServiceManager Hook原理如果调用getSystemService方法获取系统服务对应的API接口,mLoactionManager = (LoactionManager) getSystemService(Context.LOCATION_SERVICE);获取系统服务的使用其实就分为两步IBinder b = ServiceManager.getServi

2017-07-30 09:15:58 1032

原创 ServiceManager Hook过程

3, ServiceManager Hook过程每一个Hook系统服务的API都对应着一个ServiceManagerCacheBinderHook对象。下面接着上个章节分析。3.1 Hook Ibinder对象首先调用子类的getServiceName方法获取被Hook的系统方法名称,IlocationManagerBinderHook的getServiceName方法如下,

2017-07-30 09:10:08 732

原创 LocationManagerService API的Hook解析

2 LocationManagerService API的Hook解析LocationManagerService主要和定位有关,平时在android开发中,都是直接使用系统提供的API接口来间接使用系统服务,这些API都是通过aidl跨进程调用系统服务的。使用定位服务步骤如下,首先获取LocationManager,mLocationManager = (LocationMa

2017-07-30 08:58:51 3782

原创 系统API的Hook

1,系统API的Hook首先论述一下系统服务的API的Hook,然后论述四大组件的Hook。因为在android系统中,一切皆服务,在开发过程中,大量使用的是四大组件。首先有一个问题,为什么需要Hook系统服务的api?DroidPlugin插件框架管理插件使得插件就像是主程序一样,因此插件需要使用主程序的剪切版,插件之间也会共用剪切版;其他的一些系统服务也类似,这样就可以达到

2017-07-30 08:49:37 1169

原创 DroidPlugin框架初始化

3,初始化AndroidManifest.xml中首先申请了大量的权限,当然这些权限都是为了插件使用。另外除了宿主进程以外,还有另外的8个进程,这8个进程其实就是插件进程。在每个插件进程中,注册了二十多个包含四种启动方式的Activity;注册了一个Service和一个ContentProvider。当然,在DroidPlugin框架中,宿主进程和插件进程之间都是相互独立的,所以交

2017-07-30 08:46:08 534

原创 动态代理机制

动态代理说白了就是实现拦截功能。可以利用该机制重写一个类,覆盖android系统中的类,这样可以实现一些特殊的功能。2,动态代理机制1,定义接口和实现public interface UserService { public String getName(int id); public Integer getAge(int id); } 实现类p

2017-07-30 08:36:37 395

原创 DroidPlugin 使用方法

1,DroidPlugin 使用方法https://github.com/Qihoo360/DroidPlugin/blob/master/readme_cn.md说明了DroidPlugin的使用方法以及特点。HOST程序:插件的宿主。插件:免安装运行的APK限制和缺陷:1,无法在插件中发送具有自定义资源的Notification,例如:a. 带自定义RemoteLayo

2017-07-30 08:32:37 6050

原创 android netd守护进程机制 --- netd分析

3 netd分析3.1 CommandListener初始化CommandListener的构造方法分为3大步骤:1,父类初始化,传入netd socketFrameworkListener("netd", true)父类FrameworkListener的构造方法如下,FrameworkListener::FrameworkListener(const char *s

2017-07-18 21:04:34 2641 1

原创 android AsyncChannel机制 --- 双通道连接

4双通道连接分析双通道只能是一对一的通信,服务器端需要知道当前连接的是哪个客户端,通信双方需要建立双向连接,不区分客户端和服务端。4.1 connecte过程首先回忆一下单通道建立连接的过程,1,获取服务端的Messenger对象,创建本地的Handler对象, 创建AsyncChannel对象。2,调用本地AsyncChannel对象的 connect()

2017-07-18 21:03:40 1233

原创 android AsyncChannel机制 --- 同步消息分析

3 同步消息分析发送同步消息以及处理消息结果如下,Message replyMsg = mClientAsyncChannel.sendMessageSynchronously(MSG_SYNC_REQ);String msg = (String) replyMsg.obj;发送同步消息的流程图如下,AsyncChannel的sendMessageSynchronous

2017-07-18 21:03:12 1242

原创 android netd守护进程机制 --- Java层分析

前言:Netd是Android系统中专门负责网络管理的守护进程。NetD是网络管家,封装了复杂的底层各种类型的网络(NAT,PLAN,PPP,SOFTAP,TECHER,ETHO,MDNS等),隔离了底层网络接口的差异,给Framework提供了统一调用接口,简化了网络的使用。主要工作分为2个部分:1,接收并处理来自Framework层中NetworkManagementServi

2017-07-17 21:10:31 1814

原创 android AsyncChannel机制 --- 异步消息分析

2 异步消息分析客户端一般调用sendMessage方法发送异步消息,sendMessage方法如下,mClientAsyncChannel.sendMessage(MSG_ASYNC_REQ);MSG_ASYNC_REQ是一个int值,客户端的AsyncChannel对象的sendMessage方法如下,public void sendMessage(int what)

2017-07-17 20:23:17 611

原创 android AsyncChannel机制 --- 单通道连接

前言:AsyncChannel是android系统中的在两个Handler间用于消息传输的机制,这两个Handler可以处于同一个进程,也可以不再同一个进程。主要用于和网络相关的跨进程通信,例如phone进程和systemserver的ConnectivityService服务,wifi进程和systemserver的ConnectivityService服务等。AsyncChan

2017-07-17 20:12:33 755

原创 android 系统数据业务---模式切换分析(下)

5.3 RIL_REQUEST_DATA_REGISTRATION_STATE在GsmServiceStateTracker的构造方法中,注册了一些监听事件,mCi.registerForAvailable(this, EVENT_RADIO_AVAILABLE, null);mCi.registerForRadioStateChanged(this, EVENT_RADIO_STA

2017-07-17 20:05:26 3606

原创 android 系统数据业务---模式切换分析(上)

5 setPreferredNetworkType详解5.1 RIL处理RIL.java中setPreferredNetworkType方法如下,@Overridepublic void setPreferredNetworkType(int networkType , Message response) { RILRequest rr = RILRequest.obta

2017-07-17 19:55:15 4032

原创 android 系统数据业务---模式

4 数据业务模式在手机以及模块中,移动/联通/电信的信号都会有类似下面的2G/3G/4G切换,       图一 信号模式切换图这些值的定义都在RILConstants.java中,如下,/* NETWORK_MODE_* See ril.h RIL_REQUEST_SET_PREFERRED_NETWORK_TYPE */int NETWORK_MODE_WCDMA_P

2017-07-17 19:54:13 1929 2

原创 android 系统数据业务---关闭

3 数据业务关闭数据业务关闭从DcTracker的onCleanUpAllConnections方法开始论述,调用流程图如下,cleanUpConnection的逻辑如下,调用DcAsyncChannel的tearDown方法获取配置的信息,然后发送发送EVENT_DISCONNECT消息,断开网络Message msg = obtainMessage(DctConst

2017-07-17 19:44:42 2541

原创 android 系统数据业务---打开(下)

2.3状态转换上一小节中,调用onConnect 方法拨号后就接着调用transitionTo方法进入了DcActivatingState状态,当RIL收到RIL_REQUEST_SETUP_DATA_CALL消息时, 将向DataConnection发送EVENT_SETUP_DATA_CONNECTION_DONE的消息. DcActivatingState的processMess

2017-07-17 19:39:14 2005

原创 android 系统数据业务---打开

2数据业务打开DcTracker的onTrySetupData调用流程图如下,onTrySetupData方法如下,protected boolean onTrySetupData(String reason) { if (DBG) log("onTrySetupData: reason=" + reason); setupDataOnConnectableAp

2017-07-17 19:19:35 1840

原创 android 系统数据业务---打开/关闭概述

数据业务的打开/关闭一般的app都可以实现数据业务的打开和关闭,例如手机里面的设置,数据业务的打开和关闭都是通过TelephonyManager接口来实现,具体的代码如下,设置默认卡的打开和关闭,public void setDataEnabled(boolean enable) { setDataEnabled(SubscriptionManager.getDefaultD

2017-07-17 19:03:12 4915 2

原创 android 系统数据业务---phone进程启动

前言:电话管理是Android 系统支持的重要的业务之一,提供接听电话,收发短信、电话薄、网络事件监听、读取用户信息、2G/3G/4G信号切换等功能。由上到下分为4层, PHONE应用层,Telephony框架实现层,RIL层。本文基于android 5.1,架构图如下,整个框架的调用流程图如下,整个网络虽然涉及到的进程也比较多,但是仔细分析起来关键点没有多少。本文

2017-07-17 19:02:33 1377 1

原创 EventBus分析--事件分发

2 事件分发事件分发一般调用post方法,调用流程图如下,post方法如下,public void post(Object event) { //获取当前线程的postingState PostingThreadState postingState = currentPostingThreadState.get();

2017-07-10 23:26:18 516

原创 EventBus分析--事件的注册

前言:EventBus定义:是一个发布 / 订阅的事件总线。这么说应该包含4个成分:发布者,订阅者,事件,总线。那么这四者的关系是什么呢?很明显:订阅者订阅事件到总线,发送者发布事件。主要用于进程内部组件之间的通信。EventBus是一个单例模式,在一个进程中只有一个对象, getDefault方法如下,public static EventBus getDefault

2017-07-10 23:21:01 652

原创 LocalBroadcastManager机制分析

前言:在Android中,Broadcast是一种广泛运用的在应用程序之间传输信息的机制。BroadcastReceiver设计的初衷是从全局考虑可以方便应用程序和系统、应用程序之间、应用程序内的通信。但是有时候只是给进程内部发送广播也需要绕一大圈,有没有简单的方法呢? LocalBroadcastManager。LocalBroadcastManager是Android Supp

2017-07-10 23:09:30 823

原创 android input子系统分析---事件层

3 核心层核心层主要都是在input.c中处理。这里会处理各种Event,各种sensor,触摸事件,按键事件等等。流程图如下,input_event方法直接调用input_handle_event方法进行处理,void input_event(struct input_dev *dev, unsigned int type, unsigned int code, i

2017-07-10 23:03:18 1558

原创 android input子系统分析---驱动层

前言:Input子系统包括标准Linux,Android核心驱动,Android相关设备驱动,G-sensor的设备驱动程序。传感器作为一种输入设备,也是通过input系统把其数据上报给系统,或者通过input系统得到用户的配置信息。这里以传感器为例学习input driver层。Sensor驱动从通过I2C从寄存器中读取sensor值,然后写入/dev/input/目录下对应的文

2017-07-10 22:55:01 1770

原创 android sensor 框架分析---sensor 总结

7 总结Sensor总的框架图如下,形象一点讲,整个Sensor的软件架构就像是水泵抽水灌溉。Service扮演电机的角色,它不断的产生抽水的动力,并将水输送至目的地(APP),驱动扮演泵的角色,它负责完成抽水的必要准备并抽水,HAL则很像是连接电机和泵的管道。driver可以逻辑上分为三部分,一部分支持它本身的功能,i2c读写,中断或者轮询处理。第二部分为sysfs文

2017-07-06 22:29:42 3229

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除