字符串字面量的处理方法、装置、电子设备和存储介质与流程

文档序号:28743316发布日期:2022-02-07 22:48阅读:78来源:国知局
字符串字面量的处理方法、装置、电子设备和存储介质与流程

1.本发明涉及计算机技术领域,更具体的说,涉及一种字符串字面量的处理方法、装置、电子设备和存储介质。


背景技术:

2.在源代码中内嵌的字符串(即两个双引号之间的字符序列)称为字符串字面量,比如,“string”、“literal”。llvm是一个完整的编译器框架,可以解析源代码中的字符串字面量并将解析结果放置在编译结果中合适的位置。在c/c++编程语言国际标准中,字符串字面量需要拥有静态存储区,所谓静态存储区指存储在其中的对象在程序执行期间一直存在不会被丢弃,因此,llvm通常将字符串字面量放置在文件的只读存储区域中,任何人仅需要对只读存储区域进行简单的扫描和解析就能提取出程序中所有的字符串字面量。
3.由于字符串字面量中可能包含敏感信息,如客户的电话号码、文件的存储路径、合同的签订日期等,因此,若字符串字面量被攻击者获取,不仅程序逻辑容易被攻破,甚至还会造成较大的经济损失。
4.因此,如何提高字符串字面量存储的安全性成为本领域技术人员亟需解决的技术问题。


技术实现要素:

5.有鉴于此,本发明公开一种字符串字面量的处理方法、装置、电子设备和存储介质,以实现在无需人工参与的情况下,提高字符串字面量存储的安全性。
6.一种字符串字面量的处理方法,包括:
7.对基于llvm的原始中间表示中的每个字符串字面量采用预设加密算法进行加密生成加密字符串字面量,并在缓存区记录每个所述加密字符串字面量和对应的加密信息,其中,每个所述加密字符串字面量的字节长度不小于对应的所述字符串字面量的字节长度;
8.将所述原始中间表示中的各个所述字符串字面量替换成对应的所述加密字符串字面量得到目标中间表示;
9.在所述目标中间表示中所有的所述加密字符串字面量即将被访问时,调用与所述预设加密算法对应的解密函数,由所述解密函数基于所述加密信息对每个所述加密字符串字面量进行解密得到对应的所述字符串字面量,直至所有的所述加密字符串字面量全部解密完成。
10.可选的,所述对每个所述字符串字面量采用预设加密算法进行加密生成加密字符串字面量,并在缓存区记录每个所述加密字符串字面量和对应的加密信息,具体包括:
11.调用llvm优化模块对所述原始中间表示进行优化,得到优化中间表示;
12.对所述优化中间表示中的每个所述字符串字面量采用所述预设加密算法进行加密生成所述加密字符串字面量;
13.记录每个所述加密字符串字面量和对应的加密信息。
14.可选的,在所述目标中间表示中所有的所述加密字符串字面量即将被访问时,调用与所述预设加密算法对应的解密函数,具体包括:
15.在main函数调用之前,调用与所述预设加密算法对应的所述解密函数;
16.或者,
17.在动态库被装载进程序之前,调用与所述预设加密算法对应的所述解密函数。
18.可选的,所述预设加密算法为aes加密算法、sm3算法和sm4算法中的任意一种。
19.可选的,当所述预设加密算法为aes加密算法时,所述加密信息包括:所述字符串字面量对应的密钥和初始向量。
20.一种字符串字面量的处理装置,包括:
21.加密单元,用于对基于llvm的原始中间表示中的每个字符串字面量采用预设加密算法进行加密生成加密字符串字面量,并在缓存区记录每个所述加密字符串字面量和对应的加密信息,其中,每个所述加密字符串字面量的字节长度不小于对应的所述字符串字面量的字节长度;
22.替换单元,用于将所述原始中间表示中的各个所述字符串字面量替换成对应的所述加密字符串字面量得到目标中间表示;
23.解密单元,用于在所述目标中间表示中所有的所述加密字符串字面量即将被访问时,调用与所述预设加密算法对应的解密函数,由所述解密函数基于所述加密信息对每个所述加密字符串字面量进行解密得到对应的所述字符串字面量,直至所有的所述加密字符串字面量全部解密完成。
24.可选的,所述加密单元具体包括:
25.优化子单元,用于调用llvm优化模块对所述原始中间表示进行优化,得到优化中间表示;
26.加密子单元,用于对所述优化中间表示中的每个所述字符串字面量采用所述预设加密算法进行加密生成所述加密字符串字面量;
27.记录子单元,用于记录每个所述加密字符串字面量和对应的加密信息。
28.可选的,所述解密单元具体用于:
29.在main函数调用之前,调用与所述预设加密算法对应的所述解密函数;
30.或者,
31.在动态库被装载进程序之前,调用与所述预设加密算法对应的所述解密函数。
32.一种电子设备,所述电子设备包括存储器和处理器;
33.所述存储器用于存储至少一个指令;
34.所述处理器用于执行所述至少一个指令以实现上述所述的字符串字面量的处理方法。
35.一种计算机可读存储介质,所述计算机可读存储介质存储至少一个指令,所述至少一个指令被处理器执行时实现上述所述的字符串字面量的处理方法。
36.从上述的技术方案可知,本发明公开了一种字符串字面量的处理方法、装置、电子设备和存储介质,对基于llvm的原始中间表示中的每个字符串字面量采用预设加密算法进行加密生成加密字符串字面量,并在缓存区记录每个加密字符串字面量和对应的加密信
息,将原始中间表示中的各个字符串字面量替换成对应的加密字符串字面量得到目标中间表示,在目标中间表示中所有的加密字符串字面量即将被访问时,调用与预设加密算法对应的解密函数,由加密函数基于加密信息对每个加密字符串字面量进行解密得到对应的字符串字面量。本发明在llvm的中间表示层对各个字符串字面量进行加密,并在所有的加密字符串字面量即将被访问时进行解密,从而使得放置加密字符串字面量的文件中无法搜索到原始的字符串字面量,但是在程序运行时,各个加密字符串字面量已被解密,因此大大提高了字符串字面量存储的安全性,整个过程无需人工参与,省时省力。
附图说明
37.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据公开的附图获得其他的附图。
38.图1为本发明实施例公开的一种字符串字面量的处理方法流程图;
39.图2为本发明实施例公开的一种加密字符串字面量的生成方法流程图;
40.图3为本发明实施例公开的另一种字符串字面量的处理方法流程图;
41.图4为本发明实施例公开的另一种字符串字面量的处理装置的结构示意图;
42.图5为本发明实施例公开的电子设备的结构示意图。
具体实施方式
43.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
44.本发明实施例公开了一种字符串字面量的处理方法、装置、电子设备和存储介质,对基于llvm的原始中间表示中的每个字符串字面量采用预设加密算法进行加密生成加密字符串字面量,并在缓存区记录每个加密字符串字面量和对应的加密信息,将原始中间表示中的各个字符串字面量替换成对应的加密字符串字面量得到目标中间表示,在目标中间表示中所有的加密字符串字面量即将被访问时,调用与预设加密算法对应的解密函数,基于加密信息对每个加密字符串字面量进行解密得到对应的字符串字面量,直至所有的加密字符串字面量全部解密完成。本发明在llvm的中间表示层对各个字符串字面量进行加密,并在所有的加密字符串字面量即将被访问时进行解密,从而使得放置加密字符串字面量的文件中无法搜索到原始的字符串字面量,但是在程序运行时,各个加密字符串字面量已被解密,因此大大提高了字符串字面量存储的安全性,整个过程无需人工参与,省时省力。
45.参见图1,本发明实施例公开的一种字符串字面量的处理方法流程图,该方法包括:
46.步骤s101、对基于llvm的原始中间表示中的每个字符串字面量采用预设加密算法进行加密生成加密字符串字面量,并在缓存区记录每个所述加密字符串字面量和对应的加密信息;
47.其中,每个加密字符串字面量的字节长度不小于对应的字符串字面量的字节长度。
48.llvm各个分层的工作原理如下:
49.1、编译器前端:将编写好的源代码进行预处理、词法分析、语法分析、语义分析,最终生成中间表示ir,其中,预处理、词法分析、语法分析和语义分析也即对源代码进行解析的过程,预处理、词法分析、语法分析和语义分析的具体工作原理可参见现有成熟方案,此处不再赘述。
50.2、中间表示ir:将源代码所承载的信息充分解析后,用另外一种阐述方式更高效地表达与原始代码完全等效的信息。
51.3、编译器后端:基于中间表示ir,生成计算机可以执行的文件。
52.基于上述原理,本发明的发明人经过研究后发现,字符串字面量加密和插入解密算法的流程在llvm的ir层最为合适,原因为:一、编译器前端会将不必要地字符串字面量剔除、将重复地字符串字面量合并;二、编译器后端可以直接生成各种平台架构文件。
53.因此,本发明对原始中间表示中的每个字符串字面量采用预设加密算法进行加密生成加密字符串字面量。假设第i个字符串字面量为stri,字节长度为li,则对第i个字符串字面量stri加密后得到的对应加密字符串字面量为strii,字节长度为lii,其中,需要保证lii≥li,否则需要填充无用字节来使lii≥li满足。
54.其中,加密信息是指在加密字符串字面量时用到的必要参数,比如异或加密需要记录参与异或运算的数值,aes需要记录初始向量iv和密钥key。
55.步骤s102、将原始中间表示中的各个字符串字面量替换成对应的加密字符串字面量得到目标中间表示;
56.比如,原始中间表示中第i个字符串字面量为stri,对第i个字符串字面量stri加密后得到的对应加密字符串字面量为strii,则将原始中间表示中的所有的stri全部替换成对应的strii,得到目标中间表示。
57.步骤s103、在目标中间表示中所有的加密字符串字面量即将被访问时,调用与预设加密算法对应的解密函数,由解密函数基于加密信息对每个加密字符串字面量进行解密得到对应的字符串字面量,直至所有的加密字符串字面量全部解密完成。
58.解密函数指能够解密已加密字符串字面量的一段代码,解密函数可以理解为完成某一工作的代码集合。
59.在对原始字符串字面量加密过程中,编译器记录原始字符串字面量的序号、加密算法和加密相关信息。编译器放置解密函数时,根据原始字符串字面量的序号确定加密算法对应的解密函数,并加密相关信息一并传入解密函数。
60.需要说明的是,不同的预设加密算法对应不同的解密函数,在对各个字符串字面量进行加密时,可以针对所有的字符串字面量均采用相同的预设加密算法,也可以针对不同的字符串字面量采用不同的预设加密算法,只需要保证在对加密字符串字面量解密时采用与预设加密算法对应的解密函数即可。
61.本实施例中,在对目标中间表示中所有的加密字符串字面量进行解密时,需要在对每个加密字符串字面量进行解密时,均需要重新调用解密函数进行解密。
62.假设目标中间表示中的加密字符串字面量共有k个,则在目标中间表示中所有的
加密字符串字面量即将被访问时,针对每个加密字符串字面量,均需要调用与预设加密算法对应的解密函数进行解密得到对应的字符串字面量,当所有的加密字符串字面量均解密完成后,再执行后续的对各个解密字符串字面量的访问操作。
63.在实际应用中,解密函数基于记录每个加密字符串字面量和加密信息的对应关系,查找到与当前待解密的加密字符串字面量的唯一标识对应的加密字符串字面量的加密信息,解密函数基于该加密信息对加密字符串字面量进行解密得到对应的字符串字面量。
64.综上可知,本发明公开了一种字符串字面量的处理方法,对基于llvm的原始中间表示中的每个字符串字面量采用预设加密算法进行加密生成加密字符串字面量,并在缓存区记录每个加密字符串字面量和对应的加密信息,将原始中间表示中的各个字符串字面量替换成对应的加密字符串字面量得到目标中间表示,在目标中间表示中所有的加密字符串字面量即将被访问时,调用与预设加密算法对应的解密函数,基于加密信息对每个加密字符串字面量进行解密得到对应的字符串字面量,直至所有的加密字符串字面量全部解密完成。本发明在llvm的中间表示层对各个字符串字面量进行加密,并在所有的加密字符串字面量即将被访问时进行解密,从而使得放置加密字符串字面量的文件中无法搜索到原始的字符串字面量,但是在程序运行时,各个加密字符串字面量已被解密,因此大大提高了字符串字面量存储的安全性,整个过程无需人工参与,省时省力。
65.另外,在llvm的中间表示层对各个字符串字面量进行加解密,不会影响开发者源代码的任何语义,并且只要是编译器后端支持的平台架构本方案都可以兼容。
66.为防止简单加密算法被计算机自动化穷举破译,本发明中的预设加密算法采用安全性高的加密算法,比如,预设加密算法为aes(advanced encryption standard,高级加密标准)加密算法、sm3(国产哈希算法)算法和sm4算法中的任意一种,当然,预设加密算法还可以采用这三种算法以外的其他安全性高的加密算法,此处不再列举。
67.假设,当预设加密算法为aes加密算法时,加密信息包括:第i个字符串字面量stri对应的密钥keyi和初始向量ivi。
68.需要说明的是,aes是美国政府采用的一种区块加密标准,是对称密钥加密中最流行的算法之一,在安全方面有扎实的理论基础。而初始向量和密钥是aes算法本身规定的。
69.为进一步优化上述实施例,本发明还提供了原始中间表示的生成过程,具体如下:
70.调用llvm编译器前端对原始c/c++源代码进行解析,生成所述原始中间表示。
71.其中,llvm编译器前端对原始c/c++源代码解析的过程包括:预处理、词法分析、语法分析和语义分析。
72.上述实施例中,目标中间表示中所有的加密字符串字面量即将被访问时的情况主要包括两种:第一种,在main函数调用之前;第二种,在动态库被装载进程序之前。
73.也就是说,在main函数调用之前,调用与预设加密算法对应的解密函数,或者,在动态库被装载进程序之前,调用与预设加密算法对应的解密函数。
74.llvm是编译器,能够将程序员编写的源代码转换为计算机真正可以执行的程序,程序存放时需要有一定的编译结构,动态库是其中一种编译结构。
75.动态库是一种存储代码片段的文件,可以将原来不存在程序中的代码片段引入程序。当代码片段被引入时,可能引入字符串字面量。
76.在c/c++程序运行时,开发人员编写的代码通常会在调用main函数之后执行,或是
在动态库被装载时,在动态库被装载进程序之后执行,因此,本发明在main函数调用之前调用解密函数对各个加密字符串字面量进行解密,或者,在动态库被装载进程序之前调用解密函数对各个加密字符串字面量进行解密,以保证当字符串字面量被访问时,加密字符串字面量已恢复至原始代码中的字符串字面量。这样,在程序运行时,当解密函数对每个加密字符串字面量解密完成后,原本代表加密字符串字面量strii的内存区域所存储的数据与原始的字符串字面量stri完全一致,从而使得放置strii的文件中无法搜索到stri,但是在程序运行时,strii已被解密恢复为stri。
77.为提高原始中间表示中的各个字符串字面量的准确性,本发明在对各个字符串字面量进行加密之前,对原始中间表示进行了优化。
78.因此,为进一步优化上述实施例,参见图2,本发明实施例公开的一种加密字符串字面量的生成方法流程图,也即,图1所示实施例中的步骤s101具体可以包括:
79.步骤s201、调用llvm优化模块对原始中间表示进行优化,得到优化中间表示;
80.其中,llvm优化模块对原始中间表示进行优化的具体工作原理可参见现有成熟方案,此处不再赘述。
81.步骤s202、对优化中间表示中的每个字符串字面量采用预设加密算法进行加密生成加密字符串字面量;
82.为防止简单加密算法被计算机自动化穷举破译,本发明中的预设加密算法采用安全性高的加密算法,比如,预设加密算法为aes(advanced encryption standard,高级加密标准)加密算法、sm3(国产哈希算法)算法和sm4算法中的任意一种,当然,预设加密算法还可以采用这三种算法以外的其他安全性高的加密算法,此处不再列举。
83.步骤s203、记录每个加密字符串字面量和对应的加密信息。
84.综上可知,本发明通过调用llvm优化模块对原始中间表示进行优化,并对优化中间表示中的每个字符串字面量采用预设加密算法进行加密,可以使得放置加密字符串字面量的文件中无法搜索到原始的字符串字面量,从而提高字符串字面量存储的安全性。通过记录每个加密字符串和对应的加密信息,可以便于加密字符串字面量即将被访问时,基于加密信息对每个加密字符串字面量进行解密得到对应的字符串字面量,从而便于后续的程序运行。
85.为便于理解本发明公开的对字符串字面量的整个处理过程,下面提供一个对字符串字面量的详细处理方案,如下:
86.参见图3,本发明实施例公开的另一种字符串字面量的处理方法流程图,该方法包括:
87.步骤s301、调用llvm优化模块对原始中间表示进行优化,得到优化中间表示;
88.步骤s302、对优化中间表示中的每个字符串字面量采用预设加密算法进行加密生成加密字符串字面量,并在缓存区记录每个加密字符串字面量和对应的加密信息;
89.其中,每个加密字符串字面量的字节长度不小于对应的字符串字面量的字节长长度。
90.为防止简单加密算法被计算机自动化穷举破译,本发明中的预设加密算法采用安全性高的加密算法,比如,预设加密算法为aes(advanced encryption standard,高级加密标准)加密算法、sm3(国产哈希算法)算法和sm4算法中的任意一种,当然,预设加密算法还
可以采用这三种算法以外的其他安全性高的加密算法,此处不再列举。
91.步骤s303、将原始中间表示中的各个字符串字面量替换成对应的加密字符串字面量得到目标中间表示;
92.步骤s304、在main函数调用之前或在动态库被装载进程序之前,调用与预设加密算法对应的解密函数,由解密函数基于加密信息对当前加密字符串字面量进行解密得到对应的字符串字面量;
93.步骤s305、判断当前时刻是否还有未解密的加密字符串字面量,如果是,则返回步骤s304,如果否,则执行步骤s306;
94.步骤s306、调用main函数或将动态库装载进程序。
95.综上可知,本发明通过调用llvm优化模块对原始中间表示进行优化,并对优化中间表示中的每个字符串字面量采用预设加密算法进行加密,可以使得放置加密字符串字面量的文件中无法搜索到原始的字符串字面量,从而提高字符串字面量存储的安全性。通过记录每个加密字符串和对应的加密信息,可以便于加密字符串字面量即将被访问时,基于加密信息对每个加密字符串字面量进行解密得到对应的字符串字面量。通过在llvm的中间表示层对各个字符串字面量进行加密,并在所有的加密字符串字面量即将被访问时进行解密,从而使得放置加密字符串字面量的文件中无法搜索到原始的字符串字面量,但是在程序运行时,各个加密字符串字面量已被解密,因此大大提高了字符串字面量存储的安全性,整个过程无需人工参与,省时省力。
96.与上述方法实施例相对应,本发明还公开了一种字符串字面量的处理装置。
97.参见图4,本发明实施例公开的一种字符串字面量的处理装置的结构示意图,该处理装置包括:
98.加密单元401,用于对基于llvm的原始中间表示中的每个字符串字面量采用预设加密算法进行加密生成加密字符串字面量,并在缓存区记录每个所述加密字符串字面量和对应的加密信息;
99.其中,每个所述加密字符串字面量的字节长度不小于对应的所述字符串字面量的字节长度。
100.其中,每个加密字符串字面量的字节长度不小于对应的字符串字面量的字节长度。
101.llvm各个分层的工作原理如下:
102.1、编译器前端:将编写好的源代码进行预处理、词法分析、语法分析、语义分析,最终生成中间表示ir,其中,预处理、词法分析、语法分析和语义分析也即对源代码进行解析的过程,预处理、词法分析、语法分析和语义分析的具体工作原理可参见现有成熟方案,此处不再赘述。
103.2、中间表示ir:将源代码所承载的信息充分解析后,用另外一种阐述方式更高效地表达与原始代码完全等效的信息。
104.3、编译器后端:基于中间表示ir,生成计算机可以执行的文件。
105.基于上述原理,本发明的发明人经过研究后发现,字符串字面量加密和插入解密算法的流程在llvm的ir层最为合适,原因为:一、编译器前端会将不必要地字符串字面量剔除、将重复地字符串字面量合并;二、编译器后端可以直接生成各种平台架构文件。
106.因此,本发明对原始中间表示中的每个字符串字面量采用预设加密算法进行加密生成加密字符串字面量。假设第i个字符串字面量为stri,字节长度为li,则对第i个字符串字面量stri加密后得到的对应加密字符串字面量为strii,字节长度为lii,其中,需要保证lii≥li,否则需要填充无用字节来使lii≥li满足。
107.其中,加密信息是指在加密字符串字面量时用到的必要参数,比如异或加密需要记录参与异或运算的数值,aes需要记录初始向量iv和密钥key。
108.替换单元402,用于将所述原始中间表示中的各个所述字符串字面量替换成对应的所述加密字符串字面量得到目标中间表示;
109.比如,原始中间表示中第i个字符串字面量为stri,对第i个字符串字面量stri加密后得到的对应加密字符串字面量为strii,则将原始中间表示中的所有的stri全部替换成对应的strii,得到目标中间表示。
110.解密单元403,用于在所述目标中间表示中所有的所述加密字符串字面量即将被访问时,调用与所述预设加密算法对应的解密函数,由所述解密函数基于所述加密信息对每个所述加密字符串字面量进行解密得到对应的所述字符串字面量,直至所有的所述加密字符串字面量全部解密完成。
111.解密函数指能够解密已加密字符串字面量的一段代码,解密函数可以理解为完成某一工作的代码集合。
112.在对原始字符串字面量加密过程中,编译器记录原始字符串字面量的序号、加密算法和加密相关信息。编译器放置解密函数时,根据原始字符串字面量的序号确定加密算法对应的解密函数,并加密相关信息一并传入解密函数。
113.需要说明的是,不同的预设加密算法对应不同的解密函数,在对各个字符串字面量进行加密时,可以针对所有的字符串字面量均采用相同的预设加密算法,也可以针对不同的字符串字面量采用不同的预设加密算法,只需要保证在对加密字符串字面量解密时采用与预设加密算法对应的解密函数即可。
114.本实施例中,在对目标中间表示中所有的加密字符串字面量进行解密时,需要在对每个加密字符串字面量进行解密时,均需要重新调用解密函数进行解密。
115.综上可知,本发明公开了一种字符串字面量的处理装置,对基于llvm的原始中间表示中的每个字符串字面量采用预设加密算法进行加密生成加密字符串字面量,并在缓存区记录每个加密字符串字面量和对应的加密信息,将原始中间表示中的各个字符串字面量替换成对应的加密字符串字面量得到目标中间表示,在目标中间表示中所有的加密字符串字面量即将被访问时,调用与预设加密算法对应的解密函数,基于加密信息对每个加密字符串字面量进行解密得到对应的字符串字面量,直至所有的加密字符串字面量全部解密完成。本发明在llvm的中间表示层对各个字符串字面量进行加密,并在所有的加密字符串字面量即将被访问时进行解密,从而使得放置加密字符串字面量的文件中无法搜索到原始的字符串字面量,但是在程序运行时,各个加密字符串字面量已被解密,因此大大提高了字符串字面量存储的安全性,整个过程无需人工参与,省时省力。
116.另外,在llvm的中间表示层对各个字符串字面量进行加解密,不会影响开发者源代码的任何语义,并且只要是编译器后端支持的平台架构本方案都可以兼容。
117.为提高原始中间表示中的各个字符串字面量的准确性,本发明在对各个字符串字
面量进行加密之前,对原始中间表示进行了优化。
118.因此,加密单元401具体可以包括:
119.优化子单元,用于调用llvm优化模块对所述原始中间表示进行优化,得到优化中间表示;
120.加密子单元,用于对所述优化中间表示中的每个所述字符串字面量采用所述预设加密算法进行加密生成所述加密字符串字面量;
121.记录子单元,用于记录每个所述加密字符串字面量和对应的加密信息。
122.综上可知,本发明通过调用llvm优化模块对原始中间表示进行优化,并对优化中间表示中的每个字符串字面量采用预设加密算法进行加密,可以使得放置加密字符串字面量的文件中无法搜索到原始的字符串字面量,从而提高字符串字面量存储的安全性。通过记录每个加密字符串和对应的加密信息,可以便于加密字符串字面量即将被访问时,基于加密信息对每个加密字符串字面量进行解密得到对应的字符串字面量,从而便于后续的程序运行。
123.上述实施例中,目标中间表示中所有的加密字符串字面量即将被访问时的情况主要包括两种:第一种,在main函数调用之前;第二种,在动态库被装载进程序之前。因此,解密单元403具体可以用于:
124.在main函数调用之前,调用与所述预设加密算法对应的所述解密函数;
125.或者,在动态库被装载进程序之前,调用与所述预设加密算法对应的所述解密函数。
126.需要特别说明的是,装置实施例中各组成部分的具体工作原理,请参见方法实施例对应部分,此处不再赘述。
127.与上述实施例相对应,如图5所示,本发明还提供了一种电子设备,电子设备可以包括:处理器1和存储器2;
128.其中,处理器1和存储器2通过通信总线3完成相互间的通信;
129.处理器1,用于执行至少一个指令;
130.存储器2,用于存储至少一个指令;
131.处理器1可能是一个中央处理器cpu,或者是特定集成电路asic(application specific integrated circuit),或者是被配置成实施本发明实施例的一个或多个集成电路。
132.存储器2可能包含高速ram存储器,也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。
133.其中,处理器执行至少一个指令实现如下功能:
134.对基于llvm的原始中间表示中的每个字符串字面量采用预设加密算法进行加密生成加密字符串字面量,并在缓存区记录每个所述加密字符串字面量和对应的加密信息,其中,每个所述加密字符串字面量的字节长度不小于对应的所述字符串字面量的字节长度;
135.将所述原始中间表示中的各个所述字符串字面量替换成对应的所述加密字符串字面量得到目标中间表示;
136.在所述目标中间表示中所有的所述加密字符串字面量即将被访问时,调用与所述
预设加密算法对应的解密函数,由所述解密函数基于所述加密信息对每个所述加密字符串字面量进行解密得到对应的所述字符串字面量,直至所有的所述加密字符串字面量全部解密完成。
137.综上可知,本发明公开的电子设备中,在llvm的中间表示层对各个字符串字面量进行加密,并在所有的加密字符串字面量即将被访问时进行解密,从而使得放置加密字符串字面量的文件中无法搜索到原始的字符串字面量,但是在程序运行时,各个加密字符串字面量已被解密,因此大大提高了字符串字面量存储的安全性,整个过程无需人工参与,省时省力。
138.与上述实施例相对应,本发明还公开了一种计算机可读存储介质,计算机可读存储介质存储至少一个指令,所述至少一个指令被处理器执行时实现如下功能:
139.对基于llvm的原始中间表示中的每个字符串字面量采用预设加密算法进行加密生成加密字符串字面量,并在缓存区记录每个所述加密字符串字面量和对应的加密信息,其中,每个所述加密字符串字面量的字节长度不小于对应的所述字符串字面量的字节长度;
140.将所述原始中间表示中的各个所述字符串字面量替换成对应的所述加密字符串字面量得到目标中间表示;
141.在所述目标中间表示中所有的所述加密字符串字面量即将被访问时,调用与所述预设加密算法对应的解密函数,由所述解密函数基于所述加密信息对每个所述加密字符串字面量进行解密得到对应的所述字符串字面量,直至所有的所述加密字符串字面量全部解密完成。
142.综上可知,本发明公开的计算机可读存储介质中,在llvm的中间表示层对各个字符串字面量进行加密,并在所有的加密字符串字面量即将被访问时进行解密,从而使得放置加密字符串字面量的文件中无法搜索到原始的字符串字面量,但是在程序运行时,各个加密字符串字面量已被解密,因此大大提高了字符串字面量存储的安全性,整个过程无需人工参与,省时省力。
143.需要特别说明的是,电子设备和计算机可读存储介质的具体工作原理,请参见方法实施例对应部分,此处不再赘述。
144.最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
145.本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。
146.对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明
将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1