本发明涉及网络信息安全,特别涉及一种面向软件保护的api哈希函数自动生成方法及系统。
背景技术:
1、随着互联网技术的迅速发展,极大的推动了计算机软件市场的发展壮大,各种应用软件层出不穷,但与此同时,各式各样的应用软件随之带来的是日益严峻的软件盗版问题,为窃取商业机密、国家机密提供了新的渠道。攻击者通过对计算机应用软件进行逆向分析,修改程序执行逻辑,对软件进行破解,达成软件盗版、恶意代码植入等目的,严重侵犯了软件开发者的知识产权和计算机安全。
2、由于windows应用程序通过windows操作系统提供的api进行系统资源的访问与使用,诸如文件访问修改,网络通信以及进程创建等,因此软件开发者在进行windows操作系统下的应用程序开发时,为实现特定功能需要调用windows系统下的win32 api函数。故api函数的调用在很大程度上反映了程序行为,为逆向分析者理解程序功能实现和行为提供丰富的语义信息。经验丰富的逆向分析人员能够通过调用的windows api函数推测各函数模块功能,迅速定位到关键代码,使得软件的安全性受到威胁。因而,对api函数调用进行保护成为抗逆向分析中的重要课题。
3、为了实现对windows api函数调用的保护,在过去几年中,提出了windows api函数调用混淆技术,旨在对抗逆向分析,包括对api函数的通过修改函数命名方式的命名混淆,对传递给api函数调用的参数进行加密和编码的参数加密方式,修改代码控制流程以对抗静态分析工具和反汇编工具解析的控制流混淆,动态生成函数调用的方式避免静态分析工具对函数调用识别的动态调用以及使用自定义函数代替标准api函数调用的api重定向技术。
4、但无论是通过调用getprocaddress函数获取dll文件首地址还是通过调用loadlibrarya函数获知api函数地址,都需要使用dll文件名称及api函数名称进行获取(调用api获取或通过解析dll文件结构),若未对名称进行加密,在面对功能日渐强大的静态的反汇编工具时,都能一览无余地出现在导入表及字符串信息中。api hashing技术在软件保护领域的应用已经十分广泛,通过诸如rc4,bkdr,sha,md5等等哈希算法实现对敏感动态链接库及api函数名称进行加密。但随之带来的问题是,这些哈希函数运算特征过于明显,通过大量的抑或和移位运算,通过对运算特征的检测,能够轻松定位到加密函数的位置,结合动态调试工具,能够将关键的动态链接库和api函数提取出来,从而破解软件,使软件保护效果不理想。
技术实现思路
1、为此,本发明提供一种面向软件保护的api哈希函数自动生成方法及系统,解决现有api哈希函数运算特征明显导致的软件保护效果不理想问题,采取随机化方式生成哈希函数,能够使运算更具随机性,不易提取特征,提升api函数调用方式安全性,进而能够较好地实现软件保护目的。
2、按照本发明所提供的设计方案,一方面,提供一种面向软件保护的api哈希函数自动生成方法,包含:
3、获取目标api哈希语法树,利用预先收集的常规运算操作符并通过遍历语法树节点构造语法树对应的随机算术表达式;
4、将随机算术表达式写入预设哈希函数模板并生成哈希函数,以利用生成的哈希函数计算软件保护中目标api对应函数名称。
5、作为本发明面向软件保护的api哈希函数自动生成方法,进一步地,利用预先收集的常规运算操作符并通过遍历语法树节点构造语法树对应的随机算术表达式,包含:
6、采用深度优先搜索算法遍历语法树节点,将叶子节点赋值为随机常数或变量名称,将父节点赋值为运算操作符,将随机常数或变量名称作为操作数并结合对应父节点的运算操作符生成对应的随机算术表达式。
7、作为本发明面向软件保护的api哈希函数自动生成方法,进一步地,利用预先收集的常规运算操作符并通过遍历语法树节点构造语法树对应的随机算术表达式,还包含:
8、对随机算术表达式中运算操作符和运算操作符对应的操作数进行检查,使随机算术表达式中各运算操作符的运算规则合规。
9、作为本发明面向软件保护的api哈希函数自动生成方法,进一步地,预先收集的常规运算操作符,包括但不限于:加运算符、减运算符、乘运算符、除运算符和取模运算符。
10、作为本发明面向软件保护的api哈希函数自动生成方法,进一步地,将随机算术表达式写入预设哈希函数模板并生成哈希函数,包含:
11、首先,基于变量名称创建一个或多个哈希函数模板,并各哈希函数模板中设置掩码;
12、然后,选择哈希模板,将随机算术表达式写入选择的哈希模板的掩码中并生成哈希函数。
13、作为本发明面向软件保护的api哈希函数自动生成方法,进一步地,还包含:
14、将哈希函数以源文件格式进行保存,利用指定动态链接库文件中api对哈希函数功能进行校验,以通过验证哈希函数对api函数名称生成的哈希值是否产生冲突来剔除出现碰撞的哈希函数。
15、作为本发明面向软件保护的api哈希函数自动生成方法,进一步地,利用指定动态链接库文件中api对哈希函数功能进行校验,包括:
16、首先,利用编译工具生成哈希函数可执行文件;
17、接着,将预先收集的各动态链接库文件中的api函数名称作为参数,调用哈希函数可执行文件进行哈希计算并存储计算返回的哈希值;
18、然后,利用脚本语言读取存储的哈希值并进行查重,若出现哈希值冲突,则剔除对应哈希函数可执行文件,若未出现哈希值冲突,则对哈希函数进行存储。
19、进一步地,本发明还提供一种面向软件保护的api哈希函数自动生成系统,包含:处理模块和生成模块,其中,
20、处理模块,用于获取目标api哈希语法树,利用预先收集的常规运算操作符并通过遍历语法树节点构造语法树对应的随机算术表达式;
21、生成模块,用于将随机算术表达式写入预设哈希函数模板并生成哈希函数,以利用生成的哈希函数计算软件保护中目标api对应函数名称。
22、本发明的有益效果:
23、本发明通过根节点递归分支并随机设定语法树高度来构建随机的语法树,并采用设定的加减乘除取模几种常见运算符作为运算的操作符,将特定范围内的常数和变量作为操作数,随机构建生成算术表达式,基于语法树随机构建哈希函数,摒弃移位和抑或运算,且并未使用常见的加密算法,不易被准确定位识别,与此同时,采取随机化方式生成哈希函数,能够使运算更具随机性,不易提取特征,提升api函数调用方式安全性;通过哈希函数自动生构建及哈希值碰撞验证能够自动化快速生成无碰撞的哈希函数,解决人工编写效率低下问题,提高api函数调用方法的安全性,能够实现api函数名称的完美哈希,能够增强api函数调用安全性,进而达到软件保护的目的,具有较好的应用前景。
1.一种面向软件保护的api哈希函数自动生成方法,其特征在于,包含:
2.根据权利要求1所述的面向软件保护的api哈希函数自动生成方法,其特征在于,利用预先收集的常规运算操作符并通过遍历语法树节点构造语法树对应的随机算术表达式,包含:
3.根据权利要求3所述的面向软件保护的api哈希函数自动生成方法,其特征在于,利用预先收集的常规运算操作符并通过遍历语法树节点构造语法树对应的随机算术表达式,还包含:
4.根据权利要求1或2或3所述的面向软件保护的api哈希函数自动生成方法,其特征在于,预先收集的常规运算操作符,包括但不限于:加运算符、减运算符、乘运算符、除运算符和取模运算符。
5.根据权利要求1所述的面向软件保护的api哈希函数自动生成方法,其特征在于,将随机算术表达式写入预设哈希函数模板并生成哈希函数,包含:
6.根据权利要求1所述的面向软件保护的api哈希函数自动生成方法,其特征在于,还包含:
7.根据权利要求6所述的面向软件保护的api哈希函数自动生成方法,其特征在于,利用指定动态链接库文件中api对哈希函数功能进行校验,包括:
8.一种面向软件保护的api哈希函数自动生成系统,其特征在于,包含:处理模块和生成模块,其中,
9.一种电子设备,其特征在于,包括:
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机程序,当计算机程序被执行时,能够实现如权利要求1~7任一项所述的方法。