自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 进程管理--之二

2.2 service 和activity相同的是,在ServcesManager的handleCreateServiceOne方法匹配,加载完成插件的service之后,就会调用PluginManager的onServiceCreated进行service管理。PluginManager.getInstance().onServiceCreated(stubInfo, info);

2017-08-01 08:03:22 380

原创 进程管理--之一

2,进程管理其实,android系统所说的进程管理,就是对四大组件的管理,因为其他的类基本是一些普通的类。当然, droidplugin框架中的进程管理,也是四大组件的管理。Android 系统中的进程管理在此就不论述了。进程管理的结构图如下,这些类的构造方法在此就不论述了,都比较简单。PluginManager是客户端,对应的服务端是IpluginManagerI

2017-08-01 08:02:43 438

原创 组件加载

1,组件加载1.1 四大组件加载1,activity加载方法还是在ActivityThread的performLaunchActivity方法中,匹配完成之后,ComponentName component = r.intent.getComponent();if (component == null) { component = r.intent.resolveA

2017-08-01 08:02:12 593

原创 IO重定向

IO重定向其实所谓的“重定向”不过就是替换一下要访问的路径。插件程序的所有数据都是放在宿主程序的目录下的,方便统一管理。因此,当插件访问“/data/data/插件包名/xxx”时,需要把路径替换成“/data/data/插件宿主包名/Plugin/插件包名/data/插件包名/xxx”。具体是实现在LibCoreHookHandle里,libcore主要是一些系统调用的实现(如ope

2017-08-01 08:01:38 1589 1

原创 Hook匹配过程----之二

8.2 Service匹配PluginManager的resolveService方法调用流程图如下,IpluginManagerImpl的resolveService方法如下,List infos = IntentMatcher.resolveServiceIntent(mContext, mPluginCache, intent, resolvedType, flags

2017-08-01 08:00:22 435

原创 Hook匹配过程----之一

8 Hook匹配过程1, activityIpackageManagerHookHandle中Hook了resolveIntent和queryIntentActivities方法,也就是activity 的匹配过程只需要看这2个方法,resolveIntent的beforeInvoke方法有关代码如下,ResolveInfo info = PluginManager.getIn

2017-08-01 07:59:52 676

原创 插件加载---之二

7.3 PackageParser插件的解析就是将获取插件的信息填到对应的变量中。PluginPackageParser构造方法主要逻辑如下,1,构造PackageParser对象,mParser = PackageParser.newPluginParser(hostContext);2,解析插件mParser.parsePackage(pluginFile, 0);

2017-08-01 07:59:17 405

原创 插件加载---之一

7,插件加载插件其实是Apk安装包,如果要使用必须先要安装和解析,以便知道插件Apk的相关信息。1,安装、更新插件,使用如下方法:int PluginManager.getInstance().installPackage(String filepath, int flags)2, 卸载插件,使用如下方法:int PluginManager.getInstance().de

2017-08-01 07:58:34 550

原创 四大组件的匹配过程

6 四大组件的匹配过程在AndroidManifest.xml中,除了这些静态注册的receiver,每个插件中的activity或者service也有可能声明intent filter。四大组件注册完成之后,都会有一个查找匹配的过程。前面论述的都是包含包名和类名的情况,在此论述一下intent的匹配过程。6.1 activity把要启动的activity替换成了stub ac

2017-08-01 07:57:52 840

原创 ContentProvider Hook

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

2017-07-31 10:27:51 554

原创 BroadcastReceiver Hook

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

2017-07-31 10:27:35 722

原创 Instrumentation Hook

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

2017-07-31 10:27:16 640

原创 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 505

原创 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 597

原创 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 420

原创 PMS Hook

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

2017-07-31 10:25:40 1664

原创 API Hook总结之五

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

2017-07-31 10:25:28 323

原创 API Hook总结之四

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

2017-07-31 10:25:10 472

原创 API Hook总结之三

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

2017-07-31 10:24:37 313

原创 API Hook总结之二

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

2017-07-30 09:38:54 575

原创 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 729

原创 LoactionManager Hook原理

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

2017-07-30 09:26:04 519

原创 ServiceManager Hook原理

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

2017-07-30 09:15:58 1000

原创 ServiceManager Hook过程

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

2017-07-30 09:10:08 714

原创 LocationManagerService API的Hook解析

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

2017-07-30 08:58:51 3706

原创 系统API的Hook

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

2017-07-30 08:49:37 1133

原创 DroidPlugin框架初始化

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

2017-07-30 08:46:08 520

原创 动态代理机制

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

2017-07-30 08:36:37 384

原创 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 6010

原创 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 2592 1

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

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

2017-07-18 21:03:40 1191

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

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

2017-07-18 21:03:12 1218

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

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

2017-07-17 21:10:31 1714

原创 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 588

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

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

2017-07-17 20:12:33 709

原创 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 3495

原创 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 3915

原创 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 1832 2

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

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

2017-07-17 19:44:42 2489

原创 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 1962

空空如也

空空如也

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

TA关注的人

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