软件保护系统的研究与设计

2018-03-15 09:15郭刚
科技视界 2018年35期
关键词:虚拟化

郭刚

【摘 要】随着越来越多破解工具的诞生,非法破解一款目标程序的时间越来越短,方法越来越多。因此软件开发者除了要做好主体程序之外,还要花费大量的时间与精力考虑如何保护自己的软件,使得开发软件的成本大大增加,也对行业的发展带来了极为不利的影响。本文中介绍的Virtual Safengine软件保护系统采用数据校验、压缩、转储等技术,从效率、安全性等出发,提供了多个软件保护方案供用户选择。并且使用了一种新的虚拟化方案,结合inlineHook技术,收集程序调用API的样本数据,不断优化生成虚拟机OPCODE的方法,达到满足程序实时运行的保护效果。

【关键词】软件安全;加壳技术;虚拟化

中图分类号: TP302;TP309 文献标识码: A 文章编号: 2095-2457(2018)35-0012-002

DOI:10.19694/j.cnki.issn2095-2457.2018.35.006

Research and design of software protection system

GUO Gang

(School of Computer and Information Security,Guilin University of Electronic Technology,

Guilin Guangxi 541004,China)

【Abstract】With the advent of more and more cracking tools, the time and methods of illegally cracking a target program are becoming shorter and more numerous. Therefore, software developers should not only word hard in the program code, but also spend a lot of time in thinking about how to protect their own software, which greatly increases the cost of developing software and has a extremely negative impact on the development of the industry. The Virtual Safengine software protection system introduced in this paper provides multiple software protection schemes for users to choose including data validation, compression, dump and other technologies for the efficiency, security and so on .In addition, a new virtualization scheme is used to collect the sample data of the API called by program in combination with inline-Hook technology and constantly optimize the method of generating the virtual machine OPCODE to achieve the protection effect of real-time operation of the program.

【Key words】Software Security; Shell; Virtualization

0 引言

软件开发者本应专注于软件的开发和功能的完善,如今却要为了保护软件不被破解而忧心忡忡,给软件开发的过程带来了更大的开销。在这种情况下,软件保护技术就诞生了,这种技术的分类有很多,但基本都可涵盖在加壳技术与代码虚拟化技术之中。加壳技术可以简单的解为多种软件保护技术的集合。代码虚拟技术也被成为“代码虚拟机”,其本质就是将代码变形成一种转义的形式,通過许多模拟代码来模拟被保护代码的执行,可以说是保护效果最有效、最可靠,但是也最复杂的一种软件保护技术。

1 系统设计

Virtual Safengine由Shell保护模块、API监控模块、进程分析模块、虚拟机保护模块四部分组成。实现了可高度自定义且兼容性高的保护功能以及可自动优化的代码虚拟化功能。

1.1 Shell保护模块设计

Shell保护模块负责加壳操作和外壳运行处理,其中加壳操作的流程是:

(1)解析PE文件头,提取关键数据存储(支持exe与dll文件)。

(2)合并文件区段,并修复合并之后的PE文件结构。

(3)对关键文件数据表项进行加密与转储。

(4)对文件区段进行压缩。

(5)增添反调试、反虚拟机、反Dump、数据校验等保护技术。

在用户运行加壳后的程序时,本模块会模拟PE加载的过程。包括重定位、区段解压解密等,使加壳后的程序能正常运行。

为了使整个操作的可移植性、可扩展性高,本系统将主要操作封装成C++类,并将整个加壳操作和外壳的代码封装为DLL,以便达到界面与功能逻辑上的分离。

1.2 API监控模块设计

该模块将指定API进行修改,使其改变执行流,实现跳转到预先设计的代码之中,达到监控API时触发的效果,最终目的为了采集到该软件的API调用信息。

该模块通过导入表挂起注入的方式将监控DLL注入到目标进程中,该注入方式兼容性和稳定性都非常好,并且注入的时机相对来说较为合适。整个DLL的注入需要配合一些Windows API的结合,分四个步骤。使用CreateProcess以CREATE_SUSPENDED的标志打开;读取目标进程虚存空间的头结构,解析头结构,进一步提取导入表数据,对其添加注入DLL;修正PE头结构;恢复运行。

本系统在注入监控DLL后,DLL将对宿主程序指定模塊的API进行inlineHook,使其跳转到设计好的ShellCode中,该ShellCode负责收集API调用信息并发送给监控端。

1.3 进程分析模块设计

本模块通过调用3个Windows提供的API,OpenProcess、EnumProcessModules、EnumProcesses,获取进程列表与进程模块,之后获取模块句柄。最后将上述保存的信息显示在UI控件,显示的数据有模块基址、镜像大小和模块绝对路径。根据UI的信息显示,可以很方便的观察到当前系统的大部分进程信息,浏览到该进程中存在的模块信息,为Shell保护模块的AntiDump和API监控模块的DLL注入提供了直观的效果图。

1.4 虚拟机保护模块设计

该模块的原理是将x86编码的指令通过一套自定义的字节码转换为只有虚拟机能识别的指令。由于虚拟机的字节码编码方式是不公开的,所以调试人员很难对其中的指令进行一一分解。其中包含4个子模块,分别是反编译模块、虚拟化编码器、虚拟指令译码器、虚拟机附加模块。

其中,反编译模块负责将代码中的二进制信息转换为x86汇编语言,供虚拟化编码器读取;虚拟化编码器负责将反汇编后的指令通过自定义的规则进行虚拟化指令的转换。生成虚拟指令序列;虚拟指令译码器负责将虚拟化指令翻译为x86汇编语言执行,并保证当前程序的上下文环境等价输出;虚拟机附加模块负责将虚拟机中的字节码表、跳转分支表、虚拟指令序列表和虚拟机代码以新节的方式写入目标程序的PE结构中。

2 系统特色

2.1 高度自定义的软件保护方案

一款成熟的软件需要针对不同的使用群体提供不同的保护方案。所以,本系统实现了从常规的三套方案到用户高度自定义的保护方案,用户可以根据软件的运行情况来进行选择,在安全性和性能之间达到一个最均衡的状态。

2.2 基于API调用情况的代码虚拟化

用户有时不能对某款软件的运行状态以及API调用状况进行深入的了解,所以本系统API监控模块会在用户的操作之前,尽可能的采集软件的API调用情况作为样本数据,传递给虚拟机进行分析,再有的放矢的对关键代码进行虚拟化,保证效率和安全性。

2.3 自定义字节码的生成

很多逆向工作者对x86的指令集都相当熟悉,所以改变其中部分指令集必不可少。同时一套指令集如果不进行更替,随着时间的推移,被破译的可能性会增加。针对该问题,本系统每次启动都会生成一套新的字节码,迫使破译者每次脱壳都需要重新理解指令集。

3 总结

在本文中我们介绍了Virtual Safengine这样一款功能丰富的软件保护系统的设计框架,与一种新的代码虚拟化方案,通过结合API调用信息,调整代码虚拟化的过程。我们的测试结果显示本系统可以对大多数exe程序与DLL文件进行加壳。毫无疑问,未来对于软件知识产权保护的力度会越来越大,我们希望通过在软件保护这一领域的持续研究,更好地了解终端用户目前面临的安全风险与真实需求。这样,我们就可以继续在保护软件知识产权的道路上走下去。

【参考文献】

[1]章立春.软件保护及分析技术[M].北京:电子工业出版社,2016.8.

[2]章立春.代码虚拟与自动化分析[M].北京:电子工业出版社,2017.10.

[3]戚利.Windows PE权威指南[M].北京:机械工业出版社,2011.

[4]段钢.加密与解密[M].北京:电子工业出版社,2008.7.

[5]任晓珲.黑客免杀攻防[M].北京:机械工业出版社,2013.10.

[6](韩)李承远著.逆向工程核心原理[M].武传海等译.北京:人民邮电出版社,2014.5.

[7]Amir Averbuch, Michael Kiperberg, Nezer Jacob Zaidenberg. Truly-Protect: An Efficient VM-Based Software Protection[C]. IEEE Systems Journal,2013.

[8]杜春来等.一种基于指令虚拟化的代码保护模型[J].信息网络安全,2017.

[9]Johannes Kinder. Towards Static Analysis of Virtualization-Obfuscated Binaries[C].Reverse Engineering (WCRE), 2012 19th Working Conference on,2012.

猜你喜欢
虚拟化
基于OpenStack虚拟化网络管理平台的设计与实现
对基于Docker的虚拟化技术的几点探讨
虚拟化技术在CTC/TDCS系统中的应用研究
虚拟化技术在计算机技术创造中的应用
浅析虚拟化技术的安全保障
H3C CAS 云计算管理平台上虚拟化安全防护的实现
基于SDN的网络虚拟化平台及其隔离性研究
高速公路服务器虚拟化技术应用与探讨
基于Citrix的桌面虚拟化技术研究与应用
存储虚拟化还有优势吗?