基于虚拟函数表替换的软件安全防护方法技术

技术编号:14004942 阅读:52 留言:0更新日期:2016-11-16 19:17
本发明专利技术公开一种基于虚拟函数表替换的软件安全防护方法,属于软件安全领域。采用核心功能代码预加载与实际执行相分离的技术,保护程序不被恶意软件攻击。核心代码运用代理类(包含一系列虚函数)进行系统函数调用,然后其预先被加载入内存,获取其机器码,存入相应文件。实际执行时,程序开辟内存区域运行核心功能的机器码,并在当前环境下获取系统函数地址,用于替换代理类中调用的系统函数,确保程序的可移植性。本方法从根本上保护了程序的安全性,完成过程不基于其他安全工具,利用虚函数表机制,巧妙地降低了实现难度。

【技术实现步骤摘要】

本专利技术涉及软件安全
,具体涉及基于虚拟函数表替换的软件安全防护方法
技术介绍
随着计算机安全领域相关技术的飞速发展,在没有源代码的情况下对于各类软件的分析越来越容易。近年来,动态分析技术以及软件逆向技术等都已得到充分的发展,在帮助科研者更加精确地分析恶意软件的同时,也存在损害正常软件知识产权的可能性。逆向工程属于正向工程的反转过程,是一个设计恢复的过程。目的是通过分析目标软件或者特定系统,从而认定其主要的架构以及各类构件的属性和构件之间的交互关系,同时通过抽象高层设计来表现构件之间的相互联系。其基本原理是抽取软件系统的核心要素而隐藏技术实现的细节,然后使用抽象的结构在高层上描述软件系统。逆向工程主要遵从数据集采集、知识组织、信息浏览的执行顺序。主要的数据采集很大程度上依赖于知识组织的完成性。同时,信息浏览是整个过程的关键行为,对于原始程序的逻辑设计理解都是在信息浏览中进行的。信息浏览通过遍历目标软件中的多维结构,按计算机领域的划分标准分析以及过滤信息。逆向工程获取的系统结构相比直接的高级语言编写的源代码更符合设计者的实际逻辑和接近实际应用,同时在抽象层上对软件系统的提取表示要更加便于理解。逆向工程在没有源代码的情况下,通过二进制文件恢复系统的核心设计,是一种高可用的分析恶意软件技术,但是在另一方面,也给正常软件的知识产权保护带来了难题。不法者通过逆向工程技术能够获取到正常软件的各类核心信息,以还原正常的软件,从而破坏了软件的知识产权。逆向工程技术仅仅是软件恢复的一种技术,计算机安全领域还涉及有其他的技术用于软件的抽象,所以为了保护软件的安全性,本专利技术提出了一种软件核心功能与辅助功能分开加载以及编译的代码编写技术,能够有效地保护软件系统的安全性。本专利技术基于高级语言的虚函数机制。某些高级语言为了实现多态的机制,构建了虚函数。虚函数的实现通过一张虚函数表,在虚函数表中,保存着当前类中所有虚函数的地址,当前类实例化后,此表便被分配到实例的内存中。无论对象实例被分配到内存中的何处,虚函数表都会被分配到实例的最前面的四个字节处,所以能够通过获取实例对象的地址间接获取到虚函数表的地址,以此来获取实例对象中所有虚函数的内存地址。本专利技术还涉及RC4加密算法和MD5加密算法的运用。RC4为对称加密算法,其不是对明文进行分组加密,而是以字节流的方式对明文的每个字节进行加密,解密的时候对密文中的每个字节进行依次解密。RC4加密算法的特点是算法实现简单,运行速度快,并且密钥长度可变。RC4加密算法分为三个步骤,首先初始化状态向量S和临时向量T,然后初始排列S,最后产生密钥流。MD5加密算法即为信息摘要算法,用于保证信息的一致性和完整性。MD5算法能够将任意长度的数据转换成固定长度的HASH值,其抗修改性和强抗碰撞的特点可以将此HASH值作为其他加密算法的密钥,更大程度地保护加密文件的安全性。
技术实现思路
针对上述现有技术,本专利技术目的在于提供基于虚拟函数表替换的软件安全防护方法,解决现有软件防护技术其机器码生成环境与其运行环境相异时,存在系统函数地址获取失败等技术问题。为达到上述目的,本专利技术采用的技术方案如下:基于虚拟函数表替换的软件安全防护方法,包括如下步骤,步骤1、根据预加载的核心功能函数特征,获取存放有核心二进制代码的加密文件;步骤2、在当前运行环境,寻找应用程序接口函数地址和动态链接库地址,将寻找到的应用程序接口函数地址和动态链接库地址,按虚函数表中虚函数存放结构保存于各个虚函数自定义的数据结构中;步骤3、定义代理类类型指针指向存放有应用程序接口函数地址和动态链接库地址的数据结构,获得重构的虚函数表数据结构;步骤4、获取运行内存,根据重构的虚函数表数据结构和加密文件,通过在运行内存中替换代理类类型指针的地址,加载核心二进制代码至运行内存,从而在加密防护下正常运行程序。上述方法中,所述的步骤1,包括如下步骤步骤1.1、加载核心功能函数代码到内存,获取核心功能函数的首地址和体空间大小;步骤1.2、根据首地址和体空间大小,读取内存中的核心二进制代码,将核心二进制代码存入文件;步骤1.3、利用MD5加密算法计算文件的哈希值;步骤1.4、利用文件的哈希值作为密钥,采用RC4加密算法获得加密文件。上述方法中,所述的步骤2,包括如下步骤步骤2.1、在当前运行环境,虚函数表类中按照核心功能的系统函数调用顺序,分别依次调用相同的应用程序接口函数和动态链接库,找出应用程序接口函数地址和动态链接库地址;步骤2.2、将寻找到的应用程序接口函数地址和动态链接库地址,按虚函数表中虚函数存放结构保存于各个虚函数自定义的数据结构中。上述方法中,所述的步骤4,包括如下步骤,步骤4.1、获取运行内存,解密并读取加密文件内的核心二进制代码至运行内存;步骤4.2、调用重构的虚函数表数据结构作为运行参数代入运行内存,替换代理类类型指针的地址;步骤4.3、重新加载核心二进制代码至运行内存,从而在加密防护下正常运行程序。每款软件都拥有核心重要的功能实现模块,这些模块往往是软件最具有价值的部分,如果此类设计被不法者获得,将使得软件的知识产权得不到应有的保护。所以本专利技术的主要目的便是保护此部分的源代码以及设计思想。将核心代码加载入内存中然后取出放入到特定文件中保存。核心功能代码在编写完成后首先单独加载入内存中。根据PE文件的固定格式,计算文件加载的偏移位置,能够正确地获取函数加载的内存入口,即函数加载的首地址。同时,代码加载入内存后,找寻代码结束的位置(存在特殊符号),以此获取代码加载的大小。高级语言加载入内存之前会编译成二进制代码,即内存中运行的是核心功能的二进制代码,这二进制代码正是本专利技术需要的部分。通过函数加载的首地址以及大小,能够从内存中提取出完整的核心二进制代码。当二进制代码提取出来后,将其保存在特定的文件中,方便之后程序的运行。对于存放二进制代码的文件,本专利技术也考虑到其安全性,所以采用MD5和RC4加密算法对文件进行加密。首先,利用MD5加密算法计算文件的HASH值,因为MD5算法的特性,其生成的HASH值具有唯一性,安全性较高。然后,采用RC4加密算法,将之前生成的HASH值作为密钥,存放二进制代码的文件作为输入,生成加密后的特定文件,从而保护文件的安全性和完整性。虚表重构模块:当核心代码的二进制文件生成的平台与辅助核心代码加载的程序运行的平台不一致时,便会出现二进制文件无法正常运行的情况,为了解决此类问题,本专利技术利用高级语言的虚函数机制保证程序的正常运行。核心代码在编写的时候,对于每一个系统调用,都构建虚函数来完成,保证系统调用在虚函数中实现,由于每个虚函数的地址都存放在虚函数表中,虚函数表的地址存放在对象的固定位置,所以能够很方便地找寻到系统调用的实际内存位置,便于运行时替换。加载核心代码的程序运行的平台即为软件运行的平台,所以需要在此平台下获取所需系统调用的地址。在辅助加载的程序中重新自定义一个VirtualTable类,用于替换核心代码中的系统调用。VirtualTable类中按照虚函数表中系统调用的顺序,分别依次调用相同的API和DLL,这样能够帮助各类调用正常地在当前的系统中运行。这个类在核心代码运行的时候将作为参数传入,本文档来自技高网
...
基于虚拟函数表替换的软件安全防护方法

【技术保护点】
基于虚拟函数表替换的软件安全防护方法,其特征在于,包括如下步骤,步骤1、根据预加载的核心功能函数特征,获取存放有核心二进制代码的加密文件;步骤2、在当前运行环境,寻找应用程序接口函数地址和动态链接库地址,将寻找到的应用程序接口函数地址和动态链接库地址,按虚函数表中虚函数存放结构保存于各个虚函数自定义的数据结构中;步骤3、定义代理类类型指针指向存放有应用程序接口函数地址和动态链接库地址的数据结构,获得重构的虚函数表数据结构;步骤4、获取运行内存,根据重构的虚函数表数据结构和加密文件,通过在运行内存中替换代理类类型指针的地址,加载核心二进制代码至运行内存,从而在加密防护下正常运行程序。

【技术特征摘要】
1.基于虚拟函数表替换的软件安全防护方法,其特征在于,包括如下步骤,步骤1、根据预加载的核心功能函数特征,获取存放有核心二进制代码的加密文件;步骤2、在当前运行环境,寻找应用程序接口函数地址和动态链接库地址,将寻找到的应用程序接口函数地址和动态链接库地址,按虚函数表中虚函数存放结构保存于各个虚函数自定义的数据结构中;步骤3、定义代理类类型指针指向存放有应用程序接口函数地址和动态链接库地址的数据结构,获得重构的虚函数表数据结构;步骤4、获取运行内存,根据重构的虚函数表数据结构和加密文件,通过在运行内存中替换代理类类型指针的地址,加载核心二进制代码至运行内存,从而在加密防护下正常运行程序。2.根据权利要求1所述的基于虚拟函数表替换的软件安全防护方法,其特征在于,所述的步骤1,包括如下步骤步骤1.1、加载核心功能函数代码到内存,获取核心功能函数的首地址和体空间大小;步骤1.2、根据首地址和体空间大小,读取内存中的核心二进制代码,将核心二进制代码存...

【专利技术属性】
技术研发人员:张小松牛伟纳刘路遥王颖曹思宇冯有钲唐海洋宋珺
申请(专利权)人:电子科技大学
类型:发明
国别省市:四川;51

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1