一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

链接库文件加密的方法、装置及计算设备与流程

2021-10-23 01:48:00 来源:中国专利 TAG:互联网 文件加密 装置 链接库 实施


1.本发明实施例涉及互联网技术领域,具体涉及一种链接库文件加密的方法、装置及计算设备。


背景技术:

2.so文件是android系统中的动态链接库文件,android利用ndk技术将c/c 语言实现的核心代码编译为so库文件供java层调用。so文件被破解可能导致应用的核心功能代码和算法泄露。攻击者利用核心功能与算法可轻易抓取到客户端的敏感数据,并对其解密,导致用户的隐私泄露或直接财产损失。因此,so文件是否安全成为影响android整体安全性的关键因素之一。
3.目前较为常用的android系统虚拟机保护机制主要通过自定义虚拟机指令集,在程序编译执行前通过指令替换的方式将原函数或部分关键代码进行隐藏,待程序加载到内存执行时,通过解释器动态进行指令解析,从而达到对android系统原始函数及关键代码的保护。
4.目前的虚拟机保护机制自定义虚拟指令集中的虚拟指令与原始函数存在一一对应关系,一旦虚拟指令集泄露,虚拟机保护机制就会被破解,整个android系统就不再安全。


技术实现要素:

5.鉴于上述问题,本发明实施例提供了一种链接库文件加密的方法、装置及计算设备,用于解决现有技术中存在的虚拟机保护机制容易破解造成的系统安全隐患问题。
6.根据本发明实施例的一个方面,提供了一种链接库文件加密的方法,所述方法包括:
7.获取目标链接库文件对应的虚拟字节码集;
8.确定所述目标链接库文件中需要加密的函数,以得到目标函数;
9.通过随机函数从所述虚拟字节码集中随机选择虚拟字节码作为所述目标函数对应的虚拟指令,以得到虚拟指令映射表,所述虚拟指令映射表包含所述目标函数与所述虚拟指令之间的映射关系;
10.将所述虚拟指令映射表中的虚拟指令替换所述目标函数,以对所述目标函数进行加密。
11.在一种可选的方式中,所述虚拟字节码集包括虚拟操作码集;如果所述目标函数的操作数为常数,则所述通过随机函数从所述虚拟字节码集中随机选择虚拟字节码作为所述目标函数对应的虚拟指令,以得到虚拟指令映射表,包括:
12.通过随机函数从所述虚拟操作码集中随机选择一组虚拟操作码作为所述目标函数的虚拟操作码;
13.将所述目标函数的虚拟操作码和所述目标函数的操作数作为所述目标函数对应的虚拟指令,以得到虚拟指令映射表。
14.在一种可选的方式中,所述虚拟字节码还包括虚拟操作数集;如果所述目标函数的操作数为非常数,则所述通过随机函数从所述虚拟字节码集中随机选择虚拟字节码作为所述目标函数对应的虚拟指令,以得到虚拟指令映射表包括:
15.通过随机函数从所述虚拟操作码集中随机选择一组虚拟操作码作为所述目标函数的虚拟操作码;
16.通过随机函数从所述虚拟操作数集中随机选择一组虚拟操作数作为所述目标函数的虚拟操作数;
17.将选择的虚拟操作码和虚拟操作数组合作为所述目标函数的虚拟指令,以得到虚拟指令映射表。
18.在一种可选的方式中,一个虚拟操作码包含至少一个枚举值,所述通过随机函数从所述虚拟操作码集中随机选择一组虚拟操作码作为所述目标函数的虚拟操作码,包括:
19.通过随机函数从所述虚拟操作码集中随机选择一组虚拟操作码的枚举值作为所述目标函数的虚拟操作码。
20.在一种可选的方式中,所述目标链接库文件中的函数携带函数属性,所述函数属性用于表征所述函数是否需要进行加密;所述确定所述目标链接库文件中需要加密的函数,以得到目标函数,包括:
21.根据所述函数属性确定所述目标链接库文件中需要加密的函数,以得到目标函数。
22.在一种可选的方式中,所述获取所述目标链接库文件对应的虚拟字节码集之前,所述方法还包括:
23.构建链接库文件和虚拟字节码集之间的一一对应关系。
24.根据本发明实施例的另一方面,提供了一种链接库文件解密的方法,所述方法包括:
25.根据虚拟指令映射表对加密后的目标链接库文件进行解密,以执行解密后的目标链接库文件。
26.根据本发明实施例的另一方面,提供了一种链接库文件加密的装置,所述装置包括:
27.获取模块,用于获取目标链接库对应的虚拟字节码集;
28.确定模块,用于确定所述目标链接库文件中需要加密的函数,以得到目标函数;
29.选择模块,用于通过随机函数从所述虚拟字节码集中随机选择虚拟字节码作为所述目标函数对应的虚拟指令,以得到虚拟指令映射表,所述虚拟指令映射表包含所述目标函数与所述虚拟指令之间的映射关系;
30.替换模块,用于将所述虚拟指令映射表中的虚拟指令替换所述目标函数,以对所述目标函数进行加密。
31.根据本发明实施例的另一方面,提供了一种计算设备,包括:处理器、存储器、通信接口和通信总线,所述处理器、所述存储器和所述通信接口通过所述通信总线完成相互间的通信;
32.所述存储器用于存放至少一可执行指令,所述可执行指令使所述处理器执行上述的一种链接库文件加密的方法以及上述的一种链接库文件解密的方法。
33.根据本发明实施例的又一方面,提供了一种计算机可读存储介质,所述存储介质中存储有至少一可执行指令,所述可执行指令使计算设备/装置执行上述的一种链接库文件加密的方法以及上述的一种链接库文件解密的方法。
34.本发明实施例通过随机函数生成一组虚拟指令映射表,然后根据虚拟指令映射表将要保护的目标链接库文件中的待加密函数翻译成不同的虚拟指令,从而对目标链接库文件进行加密。由于本发明实施例中的待加密函数对应的虚拟指令是由随机函数随机生成的,每次执行该动态链接库文件对其中的待加密函数进行加密时,同一函数对应的虚拟指令均不相同。因此,本发明实施例的加密方法可靠性更高,降低了动态链接库文件所在系统出现安全隐患的风险。
35.上述说明仅是本发明实施例技术方案的概述,为了能够更清楚了解本发明实施例的技术手段,而可依照说明书的内容予以实施,并且为了让本发明实施例的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
36.附图仅用于示出实施方式,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
37.图1示出了本发明实施例提供的一种链接库文件加密的方法的流程示意图;
38.图2示出了本发明另一实施例提供的一种链接库文件加密的方法的流程示意图;
39.图3示出了本发明另一实施例提供的一种链接库文件加密的方法的流程示意图;
40.图4示出了本发明实施例提供的一种链接库文件加密的装置的功能框图;
41.图5示出了本发明实施例提供的一种计算设备的结构示意图。
具体实施方式
42.下面将参照附图更详细地描述本发明的示例性实施例。虽然附图中显示了本发明的示例性实施例,然而应当理解,可以以各种形式实现本发明而不应被这里阐述的实施例所限制。
43.本发明实施例用于对链接库文件进行加密,具体用于对链接库文件中需要加密的函数进行加密。本发明实施例中的链接库文件是初始的代码编译之后生成的中间文件,执行该中间文件即可实现初始的代码对应的功能。本发明实施例并不限定链接库文件所基于的函数语言。例如,链接库文件可以是android系统中的c/c 语言编译之后生成的so文件。本发明实施例在对链接库文件进行加密时,各个待加密的函数所对应的虚拟指令是随机生成的,因此,即便某一个加密后的链接库文件泄露,破译人员也无法对该链接库文件进行破解,更无法知悉整个系统中的加密规则,从而使链接库文件以及生成链接库文件的系统更加安全。下面通过各具体实施方式对本发明实施例的整体构思进行说明。
44.图1示出了本发明实施例的一种链接库文件加密的方法流程图。如图1所示,该方法包括以下步骤:
45.步骤110:获取目标链接库文件对应的虚拟字节码集。
46.其中,目标链接库文件是需要进行加密保护的链接库文件。以android系统为例,在android系统下,包含多个链接库文件,即so文件,获取其中需要加密的一个链接库文件
作为目标链接库文件。
47.每一个链接库文件对应有一个虚拟字节码集。各链接库文件对应的虚拟字节码集不同。链接库文件和虚拟字节码集之间的对应关系是预先设定的。各虚拟字节码集中包含的虚拟字节码可以相同也可以不同。各链接库文件对应的虚拟字节码集可以由本领域技术人员进行设置,本发明实施例并不限定各虚拟字节码集的具体内容。
48.步骤120:确定目标链接库文件中需要加密的函数,以得到目标函数。
49.其中,目标链接库文件中需要加密的函数可以预先设定。在设定目标链接库文件中需要加密的函数时,可以对目标链接库文件中的所有函数进行加密,也可以对目标链接库文件中的部分函数进行加密。对于需要加密的函数,预先设置标签,以对需要加密的函数进行标识。在一种具体的实施方式中,目标链接库中的函数携带函数属性,用于表征该函数是否需要进行加密。例如,函数属性为函数注解,在函数注解中标识该函数是否需要加密。将需要加密的函数作为目标函数,以对目标函数进行加密。
50.步骤130:通过随机函数从虚拟字节码集中随机选择虚拟字节码作为目标函数对应的虚拟指令,以得到虚拟指令映射表。
51.其中,随机函数可以根据目标链接库文件对应的源码类型选择。例如,在android系统中,链接库文件是由c语言生成的so文件,则随机函数可以选择c语言中的任何一个随机函数,例如,rand函数、srand函数等。随机函数可以通过随机因子生成一个伪随机数列,根据该伪随机数列从虚拟字节码集中选择对应的虚拟字节码。其中,随机因子用于限定所生成的随机数的范围。例如,随机因子为100时,随机函数通过随机因子生成的伪随机数列中的数均介于0-100之间。将随机因子生成的伪随机数列作为虚拟字节码集中的虚拟字节码选择的序号,选择一组虚拟字节码作为目标函数对应的虚拟指令。例如,生成的随机数序列为1,2,3,则从虚拟字节码集中选择第一个随机字节码、第二个随机字节码和第三个随机字节码作为一组虚拟字节码,该组虚拟字节码为目标函数对应的虚拟指令。将该虚拟指令与目标函数之间的对应关系存储,得到虚拟指令映射表。虚拟指令映射表包含目标函数与虚拟指令之间的映射关系。
52.步骤140:将所述虚拟指令映射表中的虚拟指令替换所述目标函数,以对所述目标函数进行加密。
53.本发明实施例通过随机函数生成一组虚拟指令映射表,然后根据虚拟指令映射表将要保护的目标链接库文件中的待加密函数翻译成不同的虚拟指令,从而对目标链接库文件进行加密。由于本发明实施例中的待加密函数对应的虚拟指令是由随机函数随机生成的,每次执行该动态链接库文件对其中的待加密函数进行加密时,同一函数对应的虚拟指令均不相同。因此,本发明实施例的加密方法可靠性更高,降低了动态链接库文件所在系统出现安全隐患的风险。
54.图2示出了本发明另一个实施例的一种链接库文件加密的方法的流程图。如图2所示,该方法包括以下步骤:
55.步骤210:获取目标链接库文件对应的虚拟字节码集,虚拟字节码集包括虚拟操作码集。
56.在本步骤中,虚拟字节码集包括虚拟操作码集。其中,虚拟操作码集中的虚拟操作码是预先设置的,本发明实施例并不限定虚拟操作码的具体形式。
57.步骤220:确定目标链接库文件中需要加密的函数,以得到目标函数。
58.步骤230:如果目标函数的操作数为常数,则通过随机函数从虚拟操作码集中随机选择一组虚拟操作码作为目标函数的虚拟操作码。
59.在本步骤中,目标函数的操作数即目标函数的功能操作对象。例如,目标函数用于实现1和2的加和,则1和2为目标函数的操作数。随机函数从虚拟操作码中随机选择一组虚拟操作码的方式与步骤130中从虚拟字节码中随机选择虚拟字节码的方式相同,请参阅步骤130的具体描述,在此不做赘述。
60.步骤240:将目标函数的虚拟操作码和目标函数的操作数作为目标函数对应的虚拟指令,以得到虚拟指令映射表。
61.在本步骤中,将目标函数的名称使用虚拟操作码代替,目标函数的操作数不变,得到目标函数对应的虚拟指令。例如,目标函数为求取1和2之和的函数,在链接库文件中的实际指令为“add(1,2)”,通过随机函数得到的“add”所对应的虚拟操作码为“vadd”,则“add(1,2)”对应的虚拟指令为“vadd(1,2)”,映射表中存储“add(1,2)”和“vadd(1,2)”之间的对应关系。
62.步骤250:将虚拟指令映射表中的虚拟指令替换目标函数,以对目标函数进行加密。
63.本发明实施例在目标函数的操作数为常数时,对目标函数的功能函数通过操作码进行加密,操作数不变,由于在破解加密的函数时,常数不存在被破解的风险,因此,通过本发明实施例避免了不必要的常数加密计算,节省了计算资源。
64.图3示出了本发明另一个实施例的一种链接库文件加密的方法的流程图。如图3所示,该方法包括以下步骤:
65.步骤310:获取目标链接库文件对应的虚拟字节码集,虚拟字节码集包括虚拟操作码集和虚拟操作数集。
66.在本步骤中,虚拟操作码集和虚拟操作数集是预先设置的,虚拟操作码集中存储虚拟操作码,虚拟操作数集中存储虚拟操作数。虚拟操作码和虚拟操作数的数据结构可以相同也可以不同,本发明实施例并不以此为限。
67.步骤320:确定目标链接库文件中需要加密的函数,以得到目标函数。
68.步骤330:如果目标函数的操作数为非常数,则通过随机函数从虚拟操作码集中随机选择一组虚拟操作码作为目标函数的虚拟操作码,通过随机函数从虚拟操作数集中随机选择一组虚拟操作数作为目标函数的虚拟操作数。
69.在本步骤中,目标函数的操作数为非常数时,该操作数可能是整个链接库文件中的全局变量,对操作数进行加密可以提高链接库文件的破解难度。随机函数可以通过随机因子生成两个伪随机数列,一个伪随机数列用于选择一组虚拟操作码,另一个伪随机数列用于选择一组虚拟操作数。虚拟操作数与虚拟操作码的选择方式与步骤130中虚拟字节码的选择方式相同,具体可以参阅步骤130的具体说明。
70.步骤340:将选择的虚拟操作码和虚拟操作数组合作为目标函数的虚拟指令,以得到虚拟指令映射表。
71.在本步骤中,将目标函数的名称使用虚拟操作码替代,目标函数的操作数用虚拟操作数替代,得到目标函数对应的虚拟指令。例如,目标函数为求取变量a和变量b之和的函
数,在链接库文件中的实际指令为“add(a,b)”,通过随机函数得到的“add”所对应的虚拟操作码为“vadd”,a和b对应的虚拟操作数分别为va和vb,则“add(a,b)”对应的虚拟指令为“vadd(va,vb)”,映射表中存储“add(a,b)”和“vadd(va,vb)”之间的对应关系。
72.步骤350:将虚拟指令映射表中的虚拟指令替换目标函数,以对目标函数进行加密。
73.本发明实施例在目标函数的操作数为非常数时,将目标函数转换为虚拟操作码,将目标函数的操作数转换为虚拟操作数,从而提高了目标函数的破解难度,增强了目标函数的加密可靠性。
74.在一些实施例中,虚拟操作码包含至少一个枚举值,通过随机函数从虚拟操作码集中随机选择一组虚拟操作码时,在确定随机选择的一组虚拟操作码后,从该组虚拟操作码对应的各虚拟操作码的枚举值中随机选择相应的枚举值作为目标函数对应的虚拟操作码。在从一个虚拟操作码中选择其对应的枚举值时,也可以通过随机函数的方式进行选择,选择方式与步骤130中选择虚拟字节码的方式相同。例如,add对应的虚拟操作码为vadd,vadd对应的枚举值为0x1e、0x2d、0x10,通过随机函数选择的枚举值为0x1e、0x2d,则add对应的虚拟操作码为(0x1e、0x2d)。由于一个虚拟操作码对应至少一个枚举值,将虚拟操作码的枚举值作为目标函数对应的虚拟操作码,相较于直接使用虚拟操作码可以生成更多种组合方式,从而进一步提高了对目标函数加密的可靠性。
75.在一些实施例中,对链接库文件加密后,链接库文件中的函数和用于实现对加密的函数进行解密的函数一起存储,虚拟指令映射表存储在另一个存储空间,通过这种方式,未加密的函数和加密的函数可以按照链接库文件中各函数的排布顺序进行指令,在执行到加密的函数时,调用虚拟指令映射表对加密函数进行解密。以android系统生成的so文件为例,so文件中的函数和解密的函数存放在text节区,虚拟映射表存放在textss节区。具体的存储位置可以由本领域技术人员在实施本发明实施例时设置,本发明实施例并不以此为限。
76.在一些实施例中,还提供了一种链接库文件的解密方法。即根据虚拟指令映射表对加密后的目标链接库文件进行解密,以执行解密后的目标链接库文件。在另外一些实施例中,也可以执行加密后的目标链接库文件,如果执行到虚拟指令,再通过访问虚拟指令映射表的方式获取对应的目标函数,以完成整个目标链接库文件的执行。
77.图4示出了本发明实施例的一种链接库文件加密的装置结构示意图。如图4所示,该装置包括:获取模块410、确定模块420、选择模块430和替换模块440。其中,获取模块410用于获取获取目标链接库对应的虚拟字节码集。确定模块420,用于确定所述目标链接库文件中需要加密的函数,以得到目标函数。选择模块430,用于通过随机函数从所述虚拟字节码集中随机选择虚拟字节码作为所述目标函数对应的虚拟指令,以得到虚拟指令映射表,所述虚拟指令映射表包含所述目标函数与所述虚拟指令之间的映射关系。替换模块440,用于将所述虚拟指令映射表中的虚拟指令替换所述目标函数,以对所述目标函数进行加密。
78.在一种可选的方式中,所述虚拟字节码集包括虚拟操作码集;如果所述目标函数的操作数为常数,选择模块430进一步用于:
79.通过随机函数从所述虚拟操作码集中随机选择一组虚拟操作码作为所述目标函数的虚拟操作码;
specific integrated circuit),或者是被配置成实施本发明实施例的一个或多个集成电路。计算设备包括的一个或多个处理器,可以是同一类型的处理器,如一个或多个cpu;也可以是不同类型的处理器,如一个或多个cpu以及一个或多个asic。
97.存储器506,用于存放程序510。存储器506可能包含高速ram存储器,也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。
98.程序510具体可以被处理器502调用使计算设备执行图1中的步骤110~步骤140,图2中的步骤210~250,图3中的步骤310~350,以及实现图4中的模块410~模块460的功能。
99.本发明实施例提供了一种计算机可读存储介质,所述存储介质存储有至少一可执行指令,该可执行指令在计算设备/装置上运行时,使得所述计算设备/装置执行上述任意方法实施例中的一种链接库文件加密的方法以及链接库文件解密的方法。
100.本发明实施例提供了一种计算机程序,所述计算机程序可被处理器调用使计算设备执行上述任意方法实施例中的一种链接库文件加密的方法以及链接库文件解密的方法。
101.本发明实施例提供了一种计算机程序产品,计算机程序产品包括存储在计算机可读存储介质上的计算机程序,计算机程序包括程序指令,当程序指令在计算机上运行时,使得所述计算机执行上述任意方法实施例中的链接库文件加密的方法以及链接库文件解密的方法。
102.在此提供的算法或显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明实施例也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
103.在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
104.类似地,应当理解,为了精简本发明并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明实施例的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
105.本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代
替。
106.此外,本领域的技术人员能够理解,尽管在此的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
107.应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。上述实施例中的步骤,除有特殊说明外,不应理解为对执行顺序的限定。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献

  • 日榜
  • 周榜
  • 月榜