美文网首页
VirtualApp拆解之四:bindService和unBin

VirtualApp拆解之四:bindService和unBin

作者: alen17 | 来源:发表于2017-06-18 10:07 被阅读0次

    一、从插件中bindService的流程

    bindService要比startService复杂一些,比如涉及到bind模式(BIND_AUTO_CREATE)的不同,远程VActivityManagerService会有不同的处理等等。


    bindService

    过程分拆:

    1、Hook工作

    在插件内调用bindService,会进入hooked BindService方法。BindService向ServiceConnectionDelegate查询一个包装IServiceConnection的本地Stub(没有的话会新建)。然后以这个Stub为参数去调用VActivityManager的public intbindService(IBinder caller, IBinder token, Intent service, String resolvedType, IServiceConnection connection,intflags,intuserId)方法,当然,其实最终是调用了:x进程的VActivityManagerService的对应方法。

    2、VActivityManagerService内部处理之一

    bindService方法会查询对应的Service是否已经启动,如果没有启动,分两种情况处理:

    1)如果使用了BIND_AUTO_CREATE模式,则调用内部的startServiceCommon方法启动Service,参考之前的《VirtualApp拆解之三:Service启动流程》;

    2)如果没有使用BIND_AUTO_CREATE模式,则需要记录此次bind的ServiceRecord。

    3、VActivityManagerService内部处理之二

    如果Service已启动启动,调用远程ApplicationThread的scheduleBindService方法。

    4、Service所在进程处理之一(全是android源码)

    ApplicationThread的scheduleBindService方法会向ActivityThread发送BIND_SERVICE消息,ActivityThread接收此消息后调用handleBindService方法,内部会调用Service的onBind方法等返回对外的Binder,然后,利用这个Binder作为参数调用ActivityManagerNative.getDefault()的publishService方法告知远程我要发布一个Service的Binder。

    5、hook publishService

    不过,publishService也被hook了,它会查找ServiceRecord之前保存的远程IServiceConnection,然后将对外的Binder通过IServiceConnectio的connected方法发布出去。

    相关文章

      网友评论

          本文标题:VirtualApp拆解之四:bindService和unBin

          本文链接:https://www.haomeiwen.com/subject/mgriqxtx.html