startActivity时序图

startActivity时序图

lauchModle 检测: ActivityStarter.startActivityUnchecked()

绕过AndroidManifest检测:

  1. 瞒天过海:使用代理Activity替换原来的Activity
    拿到ActivityManagerNative里面的IActivityManager对象动态代理拦截startActivity函数,获取原来的srcIntent,重新new一个代理ActivitynewIntent,newIntent.putExtra(EXTRA_ORIGIN_INTENT,originIntent),然后用newIntent替换原来的srcIntent
  2. 借尸还魂: 在Activity实例化之前(laucherActivity的时候),判断intent里面有没有EXTRA_ORIGIN_INTENT字段,如果有的话取出来替换即可
    拿到ActivityThread对象里面的Handler对象mH,然后拿到new一个Handlercallback,然后适进去,在这个callback里面处理自己的回归需求。(设置callback的原因是因为我们只处理lauchActivy,不影响其他的操作)。
    这里注意AppCompatActivity需要兼容,先拿到ActivityThread里面的IPackageManager,然后动态代理拦截getActivityInfo()函数的ComponentName替换为代理ActivityComponentName

startActivity解析

插件化绕过AndroidManifest检测

Zygote孵化应用进程

-------------The End-------------