插件化

作者: 激励上善若水 | 来源:发表于2018-03-29 17:36 被阅读9次

App进程启动过程

AppProcess —> startActivity—>AMS(system Server) —> 发送fork命令、参数—> Zygote —->fork并执行ActivityThread main函数

  • 1.startActivity/startService等操作
  • 2.AMS检测是否需要启动新进程
  • 3.如果需要,通过localSocket通知Zygote进程fork一个新进程
  • 4.在新进程中调用ActivityThread main函数
  • 5.ActivityThread main函数中获取AMS的client,然后向AMS注册ApplicationThread对象
  • 6.AMS通过ApplicationThread Binder对象向客户端发送BindApplication消息,ActivityThread通过handlerBindApplication函数处理该消息,完成Instrumentation的加载和app的Application对象创建
  • 7.AMS再发送launchActivity/createService等消息启动Activity/启动服务

插件化关键技术:binderHook

问题:
1. AMS函数:需要拦截startActivity/startService/bindService等函数
2. PMS函数:需要拦截getPackageInfo等函数,告诉插件,你已经被安装到系统了,请放心
3. 需要绕过系统APPOPS校验

解决:
1.Hook AMS 客户端:当进程中有人调用startActivity函数的时候,我们拦截之,并将intent替换为占坑的Activity
2.Hook PMS 客户端:在插件进程调用getPackageInfo函数的时候,伪造一个PackageInfo对象,返回给插件
3.Hook 所以Binder客户端的所有函数,将插件的包名 替换为我们自己的

icon.png

dynamic-load-apk

相关文章

网友评论

      本文标题:插件化

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