android AMS原理解析

startactivity

在这里插入图片描述

app启动过程

在这里插入图片描述

在这里插入图片描述
启动下半场,AMS返回后
在这里插入图片描述
在这里插入图片描述

部分结构继承关系

在这里插入图片描述
AMN策划AMS服务,AMS继承AMN实现具体细节

获取AMP

static public IActivityManager getDefault() {
        return gDefault.get();
    }
    private static final Singleton<IActivityManager> gDefault = new Singleton<IActivityManager>() {
        protected IActivityManager create() {
            IBinder b = ServiceManager.getService("activity");//1   AMS  binder引用
            if (false) {
                Log.v("ActivityManager", "default service binder = " + b);
            }
            IActivityManager am = asInterface(b);//2
            if (false) {
                Log.v("ActivityManager", "default service = " + am);
            }
            return am;
        }+
    };
}

插件虚拟化

总结下以前研究过的virtualapp的原理,思路就是把apk按照插件的方式加载到自己virtualapp框架中,但启动插件的关键startActivity会在AMS检查xml文件当中是否声明了插件的名称,如果没有,就无法启动。但如果利用预留stubActivity到xml配置项中,并反射劫持AMS在startActivity过程的一些关键点,那我们就可以把我们真正启动的apk的名称换成stubActivity,直接按插件的形式启动apk。但这种方式需要分别劫持四大组件的启动过程,还要严格生成apk的声明周期,对不同版本的android系统适配来说是个不小的工作。但反观虚拟大师之类的虚拟攻击,采用了namespace方式直接个里启动新内核,产生的兼容问题将会小的多。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值