韩冰 孙铁鑫 营口职业技术学院
Flash重定向相关技术探究
韩冰 孙铁鑫 营口职业技术学院
随着虚拟化技术的发展,虚拟桌面技术越来越被重视, Flash重定向技术将虚拟桌面服务端中的浏览器播放的Flash转移到客户端完成渲染,可以减少网络负载,能够增强播放的流畅性与清晰度,这种稳定的软件服务能够很好地处理虚拟桌面系统在处理用户各种输入操作时会遇到各种错误与异常情况。本文对Flash重定向的相关技术进行了介绍,,对桌面虚拟化技术进行简要的介绍,深入探究了Flash插件所基于的COM技术及Flash重定向所用的相关分析与实现技术。
桌面虚拟化 重定向 ActiveX控件 动态链接库
随着虚拟化技术的发展,服务器虚拟化技术已成为现代数据中心的核心,这种技术大大增强了数据中心的规模,提升了数据的灵活性与安全性。要虚拟桌面系统中,在流行的浏览器中网络播放高清视频时,增强播放的流畅性与清晰度需要良好的解决和优化方案。Flash重定向技术便是在此基础上提出的,Flash重定向技术将虚拟桌面服务端浏览器播放的Flash转移到客户端完成渲染,可以减少网络负载,这种稳定的软件服务能够很好地处理虚拟桌面系统在处理用户各种输入操作时会遇到的各种错误与异常情况。
桌面虚拟化是一种分离技术,它将逻辑桌面资源与物理机器进行分离。通过采用桌面虚拟化,我们可以通过不同的物理终端访问相同的逻辑桌面环境以及与之相对应的软件资源,也可以在相同的物理终端下访问不同的逻辑桌面。将原个人计算机上的桌面环境、数据、程序与负载转移到数据中心的服务器上。
桌面虚拟化技术具有以下特性:
(1)集中管理维护:管理维护与配置软件环境集中在服务器端进行,可以减少工作量。
(2)使用的连续性:当终端用户从其他地点登录时,可以继续以前的相关配置和存储文件内容。
(3)故障恢复:恢复用户桌面可以通过对虚拟机的快照、备份和迁移等手段实现。
(4)用户自定义:用户可以自定义桌面的环境。
ActiveX控件是一种特殊的COM组件,Flash重定向技术是基于ActiveX的重定向的原理。Flash组件能够实现ActiveX控件的基本接口,Flash组件是一个标准的ActiveX控件。图一说明了基本的ActiveX控件和容器的耦合关系,容器通常包含很多个控件对象,并且每个控件对象被绑定到一个站点对象上。
在Flash重定向系统中,IE浏览器的每个页面均为一个容器。基于ActiveX的重定向技术通过解耦ActiveX控件与容器,将ActiveX控件转移到远程播放。
图一 ActiveX控件与容器关系
以下几种技术可以对Flash组件、对浏览器进行逆向分析,是Flash重定向系统中通用的技术。
DLL动态链接库是微软公司在Windows操作系统中采用的一种共享函数库,将经常使用的代码编译形成DLL文件。操作系统运行时,将DLL文件加载到指定的内部存储器中。当需要时DLL文件会被加载连接,这种动态链接机制能够降低内存的使用率。
DLL动态链接库注入技术通过强制加载动态链接库的方式实现在其他程序进程空间中运行相应代码。DLL动态链接库注入常被外部程序用来作为改变一个程序的原行为。
Windows操作系统中采用的DLL代码注入有两种方式:一种是注入路径,另一种是注入到程序中。
注入路径方式在注册表项HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionWindowsAppinit_DLLs中加入需要注入的DLL文件相应的路径。链接到User32.dll 的所有进程都加载到此DLL文件中。
注入程序方式DLL文件通过进程使用CreateRemote等Windows API函数将其注入到另一个程序中,所创建的线程在进程中调用LoadLibrary函数加载注入DLL。
DLL动态链接库注入通常与钩子技术一同使用,在Flash重定向系统中,还需要改变服务端IE浏览器的原行为,在IE浏览器启动时,通过使用上述的注入路径方式将Flash重定向控制代码注入到IE浏览器的进程中。
Windows API拦截技术是通过Windows系统API进行拦截,从而改变其行为的技术。其拦截方式的基本原理是:修改被拦截函数的头六个Byte,使其成为一个跳转到新函数的JMP指令。再将这些拦截行为的代码编译成DLL文件并被加载到目标进程中,Windows API拦截常与DLL注入技术配合使用。在Flash重定向中,在控制代码被注入到浏览器后,通过Windows API拦截技术截获Flash实例形成构建请求,再进入替换实例的流程。
COM接口钩子技术是通过COM接口截获接口方法调用的技术。它主要有两种实现方式:一种是修改接口Virtual Table方式,另一种是基于代理类的方式。
COM接口内存模型如图二所示,通过COM接口指针访问COM对象方法,在访问时,先查询Virtual Table存储函数的地址,再利用Virtual Table中的地址进行调用。一个COM类的不同对象的pVtable指向同一个Virtual Table,通过改变替换Virtual Table中的函数地址对某个接口方法进行拦截。此方法主要应用于分析浏览器对Flash实例的调用以及Flash实例自身的行为。当Flash内部采用调用接口方法时,修改接口Virtual Table方式设置的拦截函数同时被触发。
图二 COM接口内存模型
图三所示的方式是基于代理类的拦截COM接口的方法。代理类B实现了需要的COM类A中的所有接口,代理类B中的接口方法可以代理到A中的接口方法,还可以进行其他处理。在使用CLSID创建A类对象a时,可以实现创建B类对象b,同时返回b的地址,接着通过调用B类的接口方法实现对A类接口方法的调用。这种基于代理类的方式是Flash重定向系统替代组件实现重定向的一种方法。
图三 COM接口原理
如果Windows操作系统中的线程注册了窗口类,那么就会有消息队列接收输入和系统消息。Windows操作系统通过消息钩子来监视系统消息流,并且在目标窗口之前处理特定类型消息的机制。Windows消息钩子有局部消息钩子和全局消息钩子。局部消息钩子用于拦截特定进程中的消息;全局消息钩子用于拦截来自所有进程的消息。窗口消息钩子的设置通过两个函数来实现,消息钩子的回调函数用SetWindowsHookEx函数设置,卸载消息钩子使用UnhookWindowsHookEx函数。
Flash重定向系统中,Windows操作系统的窗口消息钩子能够获取服务端浏览器窗口的大小、位置、显示、隐藏、销毁等息。Windows操作系统客户端容器中对键盘鼠标操作进行重定向时,需要Windows窗口消息钩子对此类消息进行拦截分析。
韩冰(1976-)女,辽宁省营口市,副教授,研究方向:现代教育技术;孙铁鑫 (1962-)男,辽宁省营口市,高级实验师,研究方向:机房管理。