大规模软件自动化安装方法研究

2020-01-07 02:45武振华颜学雄马子腾
网络安全技术与应用 2020年1期
关键词:封包静默控件

◆武振华 张 超 颜学雄 马子腾 龚 婕

大规模软件自动化安装方法研究

◆武振华1,2张 超2颜学雄1马子腾1龚 婕3

(1.战略支援部队信息工程大学 河南 450002;2.清华大学网络科学与网络空间研究院 北京 100083) (3.31006部队 北京 100840)

软件安装就是将开发者封装好的程序部署到用户系统环境的过程。本文采用增量式分析策略,对需要安装的安装包,使用简单易行的静默安装方式完成部分软件的安装;之后对无法使用静默安装的软件,采用基于规则的控件识别和OCR识别方式进行安装。最后对安装后的结果进行分析,不断调整追加安装规则,争取对获取的大规模软件安装包实现最高的安装覆盖率。

大规模;软件;自动化安装

软件安装就是将开发者封装好的程序部署到用户系统环境的过程。软件安装包的安装过程,本质上来说是对软件安装包的动态分析过程,在动态执行过程中与安装包的图形用户界面(GUI)进行自动化交互,逐步完成安装过程并监控安装过程中的行为信息。高效稳定的软件的自动化安装方法,不仅为计算机管理维护人员带来极大的便利,而且解决了软件安装时在无人值守的情况下无法点击“下一步”的烦琐操作。

本文采用增量式分析策略,对需要运行的安装包,使用简单易行的静默安装方式完成部分软件的安装;之后对无法使用静默安装的软件,采用基于规则的控件识别和OCR识别方式进行安装。最后对安装后的结果进行分析,不断调整追加安装规则,争取对获取的大规模软件安装包实现最高的安装覆盖率。

1 现有方案及不足

目前有关软件自动安装的研究有以下几种方案:第一种是直接对安装后的系统文件和软件目录做镜像,然后使用克隆软件将镜像复制到其他的系统或者机器中。代表性工作包括文献[1]和文献[2]。该方案要求硬件设备和系统环境具有较高的相似性,否则复制后的软件无法正常运行,仅适用于大型企业或者学校机房中统一采购机器的软件部署。

第二种是利用第三方软件录制软件安装时的操作过程并创建记录文件,当需要重新安装或在其他机器上安装同样的软件时,只需运行记录文件即可实现自动安装。代表工作包括文献[3]、文献[4]和文献[5]。该方案本质上属于重新安装的方法,降低了软硬件环境的依赖性,对于企业版或大客户版的安装软件能显著提高软件部署便利性,但无法实现大批量软件的一次性安装需求,且对于需要单机注册的软件来说,依然需要在每台客户机上修改注册信息、注册表和环境变量。

第三种是利用软件包的安装程序的静默安装参数来实现自动安装,软件的静默安装是指软件安装过程无须任何用户干预,直接使用封包工具中给定的参数,将软件安装包中打包的文件按照默认的设计释放到系统环境中。这些传递给封包工具并使用静默安装的参数称为静默安装参数。多数软件安装包可使用静默安装选项,静默安装参数由封包工具提供,不同工具的静默安装参数不同。代表性工作包括文献[6]、文献[7]、文献[8]。该方案适用于多样化的安装环境,然而一些软件开发商为满足用户多样化的需求,往往采用自定义的软件打包工具,不提供静默安装参数,无法实现无人值守的静默安装模式,而且需要凭专家经验搜集整理安装程序的类型,无法判断安装程序的类型就无法通过静默方式实现自动化安装。

第四种是基于脚本语言的自定义安装方式,代表性工作为文献[9]。该方案的灵活性强,无软硬件系统的依赖性,对绝大多数的软件安装都适用,然而此种方式每个脚本只适用于安装一款软件,当大批量安装不同的软件时,脚本的开发量和软件的种类数量形成正比,极大增加了工作量。

由于每种应用软件的安装过程都是未知的,且只需要可靠地安装一次即可,上述四种方案不仅工作量大而且效率低下,无法满足需求。因此在针对软件种类多、规模大的自动化安装需求时,需要研究无人值守和不经人工干预的大批量的软件自动化安装方法。

2 软件自动化安装方法

本文采用增量式分析策略,如图1中所示,对需要安装的安装包,首先使用静默安装方式完成部分软件的安装;之后对无法使用静默安装的软件,采用基于规则的控件识别和OCR识别方式进行安装。最后对安装后的结果进行分析,不断调整追加安装规则,争取对获取的软件安装包实现最高的安装覆盖率。

图1 软件自动化安装流程图

2.1 基于静默安装参数的自动化安装

本文复用文献[8]的静默安装方法,首先利用USSF工具获取部分安装包的参数,并将同一封包工具的参数进行汇总;对无法获取参数的安装包,使用查壳工具提取PE文件加壳特征即封包工具类型,并按照封包工具进行分类。对使用同一封包工具的安装包,查询USSF提供的该工具的静默安装参数,若存在,则直接尝试静默安装,若不存在,则将该安装包留给下一步基于控件识别的安装方法继续处理。表1统计了主流的封包工具及其使用的静默安装参数。

表1 封包工具类型及静默安装参数

2.2 基于控件识别的自动化安装

软件的静默安装可对应用市场上大部分的软件成功完成安装,然而随着软件工程的飞速发展,软件功能不断增加,软件规模日益增大,个性化的安装需求也变得更加重要,更多的软件为了达到更美观的效果,使用自定义的打包工具,不提供静默安装参数,以求在软件的安装过程中用户可根据自己的需求,定制软件安装的功能模块和安装方式,此外静默安装模式对于复杂交互或者版本限定选择(个人版、商用版)的软件无法适用。对于无法静默安装的软件,需要使用GUI进行交互式安装。由于Windows操作系统是基于消息机制的,因此通过在特定位置模拟键盘输入和鼠标点击等行为来代替人工操作完成安装。

如图2所示,首先在安装窗口中进行控件识别获取控件列表,然后将列表中的控件按照自定义的操作规则XML进行筛选,获取有效操作控件,对有效的操作控件进行模拟操作,操作完成后,继续循环遍历新弹出的窗口。

图2 基于控件识别&OCR识别的自动化安装流程

首先是窗口识别。在基于GUI交互式安装的过程中,成功启动软件安装包的安装程序后,在系统环境中会成功弹出交互式安装窗口,除此以外,系统环境在正常的运行中,System也会在后台调用多个窗口,因此需要在数量庞大的后台系统窗口中精确识别出软件安装窗口。本文采用两种方法来进行窗口识别,一是在启动软件安装包前,先通过API函数EnumWindows获取所有窗口列表,在启动软件安装包后,再次获取所有的窗口列表,并将两个列表做差集,最后从差集中筛选出“WS_VISIBLE”样式的具有#32770、TWizardForm、TSelectLanguageForm、ATL:DLGFrame032E、MsiDialogCloseClass等类型的对话框窗口,该窗口就是软件安装包启动的安装窗口。由于软件封包工具的不同,安装窗口的类型也多种多样,因此在实际的操作过程中,随着安装软件的增多,窗口的类型也在不断增加。

其次是控件识别。在准确定位到安装窗口后,需要对窗口中的控件进行识别,获取窗口中所有的控件信息列表。本文使用API函数EnumChildWindows来获取特定窗口中所有控件句柄的列表,并根据控件句柄进一步获取控件的其他属性信息,如控件标题(“下一步”“完成”等)、控件类型(“Button”“CheckBox”等)和控件位置(相对于屏幕)等。在GUI安装窗口中,根据窗口内的控件是否能被API函数识别,又分为Windows标准控件和非标准控件两类。对标准控件,可利用控件句柄直接获取控件的属性信息。对于非标准控件,则无法利用API函数获取控件的属性信息,也就无法获取控件的位置,进而利用模拟操作完成安装。对于非标准控件的安装包,交由文字识别进行处理。

然后是XML操作规则。在获取窗口中所有控件列表后,需要进一步对控件进行筛选,保留有效的操作控件。对某一特定的安装窗口,安装人员需要操作的对象往往只有几种,例如“Button”控件中的“下一步”、“安装”和“完成”等,“RadioButton”控件中的“我同意”和“接受”等,而对于“Static”控件(描述了提示信息)则全都不需要处理。因此本文定义了一个控件操作规则的XML文件,如图3所示,XML中总结了常见的需要操作的控件类型和控件标题,由于软件包的开发语言不同,因此控件标题相应存在中英文、简繁体的差别,在XML中搜集了所有可能出现的控件标题的别名。控件操作的优先级根据前期对三千余款软件安装时优化出的经验值,数值越大,优先级越高,例如在同一安装窗口中,同时出现了“我同意”和“下一步”两种控件,需要先点击操作“我同意”然后再点击操作“下一步”,否则安装无法顺利进行,因此在XML中,“我同意”的优先级比“下一步”要高。

对输入的控件列表,首先匹配第一级的控件类型(“Button”、“RadioButton”和“CheckBox”等),若XML中没有匹配的控件类型,则说明该类型的控件不需要操作(如“Static”“Toolbar”等),若匹配到控件类型,则继续遍历所有的“Names”,若不匹配则说明该控件不需要操作(如“上一步”“取消”等),若匹配则输出该控件以及控件的优先级。按照以上方法,将输入的控件列表按照XML中匹配的控件进行筛选,输出需要操作的有效控件列表以及控件的操作顺序。此外,当预置xml内容无法驱动安装进行下一步操作时,按照文本输入框、选择框(CheckBox)和按钮(Button)的优先级进行组合探索,如果某种组合最终实现了自动安装,则反馈该组合,并更新XML操作规则。

图3 操作规则XML文件结构图

之后是模拟操作。对获取的有效操作控件列表,若列表中只有一个控件,则直接通过API函数mouse_event模拟鼠标操作(如点击“下一步”“安装”或“完成”等)即可;若列表中的控件有多个,首先根据控件优先级进行排序,然后按照优先级由高到低依次模拟操作。将列表的控件遍历操作完成后,若操作成功,直接进入下一步;若操作失败,则说明控件的操作顺序错误,此时将有效操作控件列表中的n个控件作为集合中的n个不同元素,然后从n个元素中循环取出m(m=n,n-1,…,2,1)个进行排列,每个排列结果作为控件的操作顺序,按照该顺序对控件进行模拟操作,若成功,则停止遍历,进入下一步,并修改操作规则XML文件中的优先级;若全部的排列结果都遍历后,依然失败,则交于文字识别的自动化安装进一步处理。

最后是结果判定。在使用GUI操作界面的安装中,大多数软件在进行正确的点击操作后,会在原始窗口覆盖或者弹出新的安装窗口。因此在上一步的模拟操作后,通过判断是否有新窗口生成或者同一窗口的控件是否改变来判断模拟操作是否成功。若操作成功,则继续遍历覆盖后的窗口或者新弹出窗口。需要注意的是,在一些软件的安装窗口,会出现进度条,在操作前,进度条属于不可见状态,在正确的操作后,进度条变为可见,此时窗口中的控件没有发生变化。因此通过同一窗口的控件是否改变来判断模拟操作是否成功时,进度条需要单独进行判断,若进度条可见,也说明模拟操作成功。若安装完成,则在窗口中会出现“完成”标题的“Button”控件,或者有“运行”标题的“CheckBox”控件,在循环遍历窗口的过程中,需要不断检查安装完成标志,判定自动化安装工作是否完成。

2.3 基于文字识别的自动化安装

对无法静默安装,且使用了非标准控件的软件,由于无法利用API函数获取控件的位置和名称,也就无法确定需要操作的控件类型和控件位置。在窗口识别定位到安装包的安装窗口后,利用API函数GetWindowRect获取窗口的位置,然后使用ImageGrab将软件安装窗口截图,在该截图上使用OCR识别,获取窗口截图中所有字符序列及字符序列的位置信息。按照以上方法,输入OCR识别的字符序列,经过自定义的XML操作规则筛选,输出需要操作的有效字符序列位置信息以及字符序列的操作顺序。

3 实验测试

为测试软件的自动化安装效果,本文基于“天穹沙箱分析系统”(见:https://research.qianxin.com/sandbox/)实现了分析环境,顶层框架分为服务端和客户端,服务端为Windows 7中文64位的操作系统,在系统中建立文件共享系统,在客户端成功连接后,为客户端推送软件安装包、安装模型和操作规则库,并存储处理客户端搜集传回的特征信息。客户端部署了Windows XP和Windows 7的中文32位和64位纯净版的操作系统。为避免外部因素给安装过程造成干扰,分析系统中预置了.net/framework 3.5/4.0、JDK、Python、以及各种常用的依赖包;关闭用户账户控制的通知提醒,以防止账户控制过程失去对系统的控制权。

实验的数据集包括了从360软件管家、软件官网、论坛以及主流的下载站获取的共计30116个软件安装包。软件类型涵盖了办公软件、视频软件、聊天工具、浏览器、输入法、音乐软件和游戏娱乐等多种不同的领域。获取数据集后,首先在服务端的系统中,建立文件共享存放软件安装包,安装模型和操作规则库,在与客户端建立通信后,向客户端推送安装包和操作规则。根据软件安装包的最低系统要求,启动相应的客户端系统沙箱环境(Windows XP或Windows 7)。客户端成功启动后会自动与服务端建立连接,获取服务端推送的安装包,在获取安装包后,继续请求安装模型和操作规则进行软件的自动化安装。

运用分层次的自动化安装后,有14365款软件获取了静默安装参数,并成功执行了静默安装,对剩余的软件安装包继续执行基于控件识别的自动化安装,成功安装了10581款软件,在对剩余的软件安装包执行基于OCR识别的自动化安装,成功安装了3316款软件,最后还有1854款软件未成功安装,各安装方法成功安装的比例如图4所示。对未安装成功的安装包,经分析发现可分为三种情况,一是安装包中设置版权,要求在安装时提供序列号输入,如Acrobat、IDA Pro、Mindjet Mind Manager、Photoshop、UltraISO等。第二种是压缩包被密码保护,由于没有从已知信息中成功推测出解压密码,因此无法对其进行后续分析。最后一种是少量样本通过网络在线下载安装包如Flash Player,由于网络下载超时,导致安装失败。其中,如果不考虑没有压缩包密码的样本,整体分析成功率为95.7%。

图4 软件自动化安装各方法的成功比例

4 结束语

本文总结现有软件自动化安装方案,并分析了这些方案存在的不足之处,结合大规模软件自动化安装的需求,提出了基于静默安装参数、基于控件识别以及基于OCR识别的软件自动化安装方案,对获取的30116个安装包进行实验测试,成功率达到了约94%,如果不考虑没有压缩包密码的样本,整体分析成功率为95.7%,有效实现了对大规模软件的自动化安装。

[1]吴承远.应用Ghost网络克隆技术实现批量安装计算机 [J].信息与电脑,2015(9):37-38.

[2]阿呆.妙用WinRAR打造安装程序[J].电脑迷,2005 (12):68-68.

[3]郭建伟.隔山打牛,远程遥控软件安装[J].电脑知识与技术,2018(1):23.

[4]金色铁锚.软件安装再出“懒”招[J].电脑爱好者,2006 (22):61.

[5]李鲁群,林金钟.Windows应用软件自动安装系统设计 [J].智能计算机与应用,2001(1):18-19.

[6]唐老鸭.安装程序自动装[J].电脑知识与技术,2004 (34):6-7.

[7]刘光灿,刘简达,何文德,等.全自动软件安装技术研究[J].微计算机信息,2010,26(4):49-51.

[8]桔色心情.软件安装随我意[J].电脑知识与技术,2009 (8):29-31.

[9]孔柱新.基于AutoIt3的机房软件自动安装[J].实验科学与技术,2014,12(3):200-202.

本文由国家自然科学基金联合基金项目(61972224、61772308)资助。

猜你喜欢
封包静默控件
世界不静默
北京:“封城”“静默”是谣言
中药封包在急诊老年急性胃肠炎患者中的临床应用
预备,出发!
基于.net的用户定义验证控件的应用分析
护肤 巧用保鲜膜
爱在发生时
无冲突规则校园网络安全系统的设计
关于.net控件数组的探讨
基于嵌入式MINIGUI控件子类化技术的深入研究与应用