本文的方案是应用在IPTV设备上,并没有部署在服务器上,IPTV设备与手机设备,服务器都有很大差异,但IPTV设备配置强大的VPU和GPU是有利于构建可用的Android 云手机实例。
VPhone (Android 云手机名称) 主要利用基本环境定制,仿真部分手机硬件模块和虚拟化部分硬件模块在Android容器内部模拟逼真的手机运行环境,构建伪装的“安全可信”虚拟手机系统。如图所示:
图:VPhone系统框架图
手机基本环境包括SoC硬件基本信息,制造商基本信息,Android版本基本信息和Android系统属性。这四种参数信息以键值对的形式保存在custommade.prop文件中,在系统启动时由根进程导入,其中键是属性名,值是相应的参数,方便系统运行时查询使用。仿真的手机硬件模块有SIM卡,GPS定位,WIFI网络,传感器,电源。仿真的方法是给硬件模块的框架层服务提供静态Hal组件,这种静态Hal组件可以为上层框架层服务提供硬件信息查询,简单配置操作等基本功能,保证整个虚拟Android系统包括应用程序可以感知到硬件模块的存在,并且在通过系统接口调用硬件功能时不出现错误。这种静态Hal组件不涉及下层内核的操作调用,因此不会影响宿主TV系统或者其他虚拟系统的正常运行。虚拟化设备包括显示,输入,照相机和音频,使用的方法是API远程调用。如表所示:
定制机制 |
定制信息类别 |
定制信息详细内容明细 |
基本环境定制 |
设备制造商基本信息 |
设备名称,品牌名称,设备型号,制造商名称,平台名称,设备ID,设备指纹,硬件序列号 |
SoC硬件基本信息 |
硬件平台名称,处理器型号,处理器结构,处理器频率,制造工艺,GPU渲染器名称,GPU制造商名称,GPU版本,GPU频率 |
|
软件系统基本信息 |
操作系统版本名称,API版本,系统版本号,构建时间,设备版本号,程序安全补丁级别,JAVA Runtime版本,JAVA虚拟机,内核架构,内核版本,OpenGL版本,OpenSSL版本 |
|
Android系统属性 |
包括ro.build.type,ro.vendor.build.id,ro.boot.bootreason等 |
|
仿真手机硬件模块 |
SIM |
静态Hal组件:SimulatedCommands |
GPS |
静态Hal组件:SimulatedLocationProvider |
|
WIFI |
静态Hal组件:SimulatedWifi |
|
Sensor |
静态Hal组件:SimulatedSensors |
|
Battery |
静态Hal组件:SimulatedBatteryStats |
|
虚拟化硬件模块 |
Display |
Hook的系统服务:VirtualDisplayDevice 客户端对应服务:RemoteDisplay |
Input |
Hook的系统服务:InputFlinger 客户端对应服务:RemoteInput |
|
Camera |
Hook的系统服务:CameraService 客户端对应服务:RemoteCamera |
|
Audio |
Hook的系统服务:AudioFlinger 客户端对应服务:RemoteAudio |
表:通过三种方法构建VPhone定制环境
设备仿真为硬件模块的框架层服务提供静态Hal组件,使Android系统能够查询到硬件信息。如图所示,Android系统phone服务的RILJ模块原本与SIM卡的Hal服务RILD交互,使用SIM卡功能。但IPTV设备并没有SIM卡,VPhone为Android容器构建静态Hal组件SimulatedCommands,RILJ模块与SimulatedCommands交互,获取SIM卡信息,如手机号码,网络类型,网络服务商,IMEI,MEID等,SimulatedCommands组件为phone服务提供了所有的功能接口,防止系统在调用phone功能时出现异常。
图:电话服务的结构与仿真电话静态Hal组件
Wifi,GPS,Sensors,Battery模块均在相应的Android系统服务中增加仿真静态Hal组件,用于硬件模块数据查询和参数配置。由于没有用户态内核态交互,没有进程间或者服务间交互,和复杂数据协议的封装解析,基于静态Hal组件的设备仿真简化了数据处理流程,提高了系统的稳定性和响应速度。通过本文实验表明,静态Hal组件的使用确保了虚拟 Android 系统能够高效、准确地模拟实际硬件模块,有力支撑构建逼真且稳定的虚拟手机环境。
通过实验发现,市场上有些应用会检查当前系统环境是否可以执行ROOT操作,安全机制如selinux是否打开为强制模式,Android的编译版本是否为user版本(即所有安全机制均启用)等。模拟器和虚拟系统的一个重要用途是应用调试测试,关闭这些安全措施有利于提高测试效率。如果应用检测到相关安全机制是关闭的,则会识别当前系统为模拟器,禁用某些功能。有些应用会检测屏幕尺寸是否为常见手机屏幕尺寸,甚至会检测当前显示图层是否使用了物理屏幕,如果图层显示在非物理屏幕中,一些安全相关的图层将不显示,比如登录界面,支付页面。
因此,环境定制方案并不是固定不变的,需要根据实验结果进行分析,判断应用如何进行环境检测,当前定制的环境哪些方面不满足应用的使用要求。环境定制与应用环境检测是攻击和防御的两面,他们相互作用不断调整自身策略适应双方的变化。根据海伦定律[1]的观察,对于用户量巨大的庞大操作系统的任何微小的修改,总有某些应用程序可以利用隐式依赖感知和检测到系统的变化,而这是无法避免的。比如某些接口在真实环境中会初始化硬件,导致接口性能较慢,一些应用可能会利用这种“慢”接口,做一些同步任务;而在虚拟环境中这种接口几乎没有响应延迟,这样会使应用的同步任务无法完成。因此,经过定制的虚拟系统环境只能趋近于真实环境,而不能做到与真实环境完全相同。
[1] Wright, Hyrum. Hyrum's Law. https://www.hyrumslaw.com/, 2024.