一种混淆代码的运行方法和装置转让专利

申请号 : CN201810394451.6

文献号 : CN108804883B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 陈钢陈赫

申请人 : 北京奇艺世纪科技有限公司

摘要 :

本发明提供了一种混淆代码的运行方法和装置,该方法包括:计算预设运算函数中参数的每个取值与预设运算函数中已知数值的运算结果;将参数的每个取值和对应的运算结果存储至新建的数据表;接收运行预设运算函数的目标输入,目标输入包括参数的目标取值;响应于目标输入,在数据表中查找目标取值对应的目标运算结果并输出目标运算结果。本发明通过将预设运算函数中参数的每个取值和每个取值和已知取值的运算结果存储至数据表中,从而在运行该预设运算函数时,能够通过直接查询数据表的方式来查找参数的目标取值对应的目标运算结果,通过查数据表的方式能够完全的将预设运算函数的代码逻辑进行隐藏,提升了混淆代码的破解难度,提升了代码安全性。

权利要求 :

1.一种混淆代码的运行方法,其特征在于,包括:

计算预设运算函数中参数的每个取值与所述预设运算函数中已知数值的运算结果;

将所述参数的每个取值和对应的运算结果存储至新建的数据表;

接收运行所述预设运算函数的目标输入,所述目标输入包括所述参数的目标取值;

响应于所述目标输入,在所述数据表中查找所述目标取值对应的目标运算结果并输出所述目标运算结果。

2.根据权利要求1所述的方法,其特征在于,当所述参数的数据类型对应的数据长度M大于预设数据长度时;

所述计算预设运算函数中参数的每个取值与所述预设运算函数中已知数值的运算结果,包括:对预设运算函数中的已知数值进行按位分割,得到对应N个数据位范围的N个数值段,其中,每个数值段的数据长度为4位,N=M/4;

对所述预设运算函数中的参数构成的未知数进行所述按位分割,得到对应N个数据位范围的N个子未知数,其中,每个子未知数的数据长度为4位,N=M/4;

针对所述N个子未知数,计算目标数据位范围对应的目标子未知数的每个取值与对应所述目标数据位范围的目标数值段之间的子运算结果,得到对应目标数据位范围的多个子运算结果,其中,所述目标数据位范围为所述N个数据位范围中的每个数据位范围;

所述将所述参数的每个取值和对应的运算结果存储至新建的数据表,包括:新建对应N个数据位范围的N个数据表,每个对应目标数据位范围的目标数据表包括子未知数字段和子运算结果字段,所述子未知数字段用于存储对应目标数据位范围的子未知数的每个取值,所述子运算结果字段用于存储对应所述目标数据位范围的多个子运算结果;

将对应目标数据位范围的子未知数的每个取值存储至对应目标数据范围的目标数据表中子未知数字段下的多个第一数据项中;

将对应所述目标数据位范围的多个子运算结果存储至所述目标数据表中子运算结果字段下的对应所述子未知数的每个取值的多个第二数据项中。

3.根据权利要求2所述的方法,其特征在于,当所述预设运算函数包括乘法运算函数和/或加法运算函数时,所述目标数据表还包括第一进位字段和第二进位字段,所述第一进位字段用于存储目标数据表中每个子运算结果的第一进位数,所述第二进位字段用于存储第一数据表中每个子运算结果的第二进位数,其中,所述第一数据表为所述N个数据表中数据位范围与所述目标数据表的目标数据位范围相邻且低于所述目标数据位范围的数据表。

4.根据权利要求2所述的方法,其特征在于,所述响应于所述目标输入,在所述数据表中查找所述目标取值对应的目标运算结果,包括:响应于所述目标输入,对所述目标取值进行按位分割,得到对应N个数据位范围的N个子目标取值,其中,每个子目标取值的数据长度为4位,N=M/4;

按照数据位范围从低到高的顺序依次在所述N个数据表中查找每个子目标取值对应的子运算结果,得到对应N个数据位范围的N个目标子运算结果;

对所述N个目标子运算结果进行按位重组,得到所述目标取值对应的目标运算结果。

5.根据权利要求3所述的方法,其特征在于,所述响应于所述目标输入,在所述数据表中查找所述目标取值对应的目标运算结果,还包括:响应于所述目标输入,对所述目标取值进行按位分割,得到对应N个数据位范围的N个子目标取值,其中,每个子目标取值的数据长度为4位,N=M/4;

在对应第i数据位范围的第i数据表中查找对应第i数据位范围的第i子目标取值所对应的第i子运算结果,以及在所述第i数据表中查找所述第i子运算结果在第一进位字段中对应的第i进位数,其中,i为大于0且小于N的整数;

在对应第i+1数据位范围的第i+1数据表中查找对应第i+1数据位范围的第i+1子目标取值,以及在第i+1数据表的第二进位字段中查找所述第i进位数;

在所述第i+1数据表中确定所述第i+1子目标取值和所述第i进位数对应的第i+1子运算结果,以及在所述第i+1数据表中查找所述第i+1子运算结果在第一进位字段中对应的第i+1进位数;

将在N个数据表查找得到的N个子运算结果进行按位重组,得到所述目标取值对应的目标运算结果;

其中,第i+1数据位范围高于所述第i数据位范围,且与所述第i数据位范围相邻。

6.一种混淆代码的运行装置,其特征在于,包括:

计算模块,用于计算预设运算函数中参数的每个取值与所述预设运算函数中已知数值的运算结果;

存储模块,用于将所述参数的每个取值和对应的运算结果存储至新建的数据表;

接收模块,用于接收运行所述预设运算函数的目标输入,所述目标输入包括所述参数的目标取值;

查找输出模块,用于响应于所述目标输入,在所述数据表中查找所述目标取值对应的目标运算结果并输出所述目标运算结果。

7.根据权利要求6所述的装置,其特征在于,

所述计算模块包括:

第一分割子模块,用于当所述参数的数据类型对应的数据长度M大于预设数据长度时,对预设运算函数中的已知数值进行按位分割,得到对应N个数据位范围的N个数值段,其中,每个数值段的数据长度为4位,N=M/4;

第二分割子模块,用于对所述预设运算函数中的参数构成的未知数进行所述按位分割,得到对应N个数据位范围的N个子未知数,其中,每个子未知数的数据长度为4位,N=M/

4;

计算子模块,用于针对所述N个子未知数,计算目标数据位范围对应的目标子未知数的每个取值与对应所述目标数据位范围的目标数值段之间的子运算结果,得到对应目标数据位范围的多个子运算结果,其中,所述目标数据位范围为所述N个数据位范围中的每个数据位范围;

所述存储模块包括:

新建子模块,用于新建对应N个数据位范围的N个数据表,每个对应目标数据位范围的目标数据表包括子未知数字段和子运算结果字段,所述子未知数字段用于存储对应目标数据位范围的子未知数的每个取值,所述子运算结果字段用于存储对应所述目标数据位范围的多个子运算结果;

第一存储子模块,用于将对应目标数据位范围的子未知数的每个取值存储至对应目标数据范围的目标数据表中子未知数字段下的多个第一数据项中;

第二存储子模块,用于将对应所述目标数据位范围的多个子运算结果存储至所述目标数据表中子运算结果字段下的对应所述子未知数的每个取值的多个第二数据项中。

8.根据权利要求7所述的装置,其特征在于,当所述预设运算函数包括乘法运算函数和/或加法运算函数时,所述目标数据表还包括第一进位字段和第二进位字段,所述第一进位字段用于存储目标数据表中每个子运算结果的第一进位数,所述第二进位字段用于存储第一数据表中每个子运算结果的第二进位数,其中,所述第一数据表为所述N个数据表中数据位范围与所述目标数据表的目标数据位范围相邻且低于所述目标数据位范围的数据表。

9.根据权利要求7所述的装置,其特征在于,所述查找输出模块包括:

第三分割子模块,用于响应于所述目标输入,对所述目标取值进行按位分割,得到对应N个数据位范围的N个子目标取值,其中,每个子目标取值的数据长度为4位,N=M/4;

第一查找子模块,用于按照数据位范围从低到高的顺序依次在所述N个数据表中查找每个子目标取值对应的子运算结果,得到对应N个数据位范围的N个目标子运算结果;

第一重组子模块,用于对所述N个目标子运算结果进行按位重组,得到所述目标取值对应的目标运算结果。

10.根据权利要求8所述的装置,其特征在于,所述查找输出模块还包括:第四分割子模块,用于响应于所述目标输入,对所述目标取值进行按位分割,得到对应N个数据位范围的N个子目标取值,其中,每个子目标取值的数据长度为4位,N=M/4;

第二查找子模块,用于在对应第i数据位范围的第i数据表中查找对应第i数据位范围的第i子目标取值所对应的第i子运算结果,以及在所述第i数据表中查找所述第i子运算结果在第一进位字段中对应的第i进位数,其中,i为大于0且小于N的整数;

第三查找子模块,用于在对应第i+1数据位范围的第i+1数据表中查找对应第i+1数据位范围的第i+1子目标取值,以及在第i+1数据表的第二进位字段中查找所述第i进位数;

第四查找子模块,用于在所述第i+1数据表中确定所述第i+1子目标取值和所述第i进位数对应的第i+1子运算结果,以及在所述第i+1数据表中查找所述第i+1子运算结果在第一进位字段中对应的第i+1进位数;

第二重组子模块,用于将在N个数据表查找得到的N个子运算结果进行按位重组,得到所述目标取值对应的目标运算结果;

其中,第i+1数据位范围高于所述第i数据位范围,且与所述第i数据位范围相邻。

说明书 :

一种混淆代码的运行方法和装置

技术领域

[0001] 本发明涉及代码加密技术领域,特别是涉及一种混淆代码的运行方法和装置。

背景技术

[0002] 为了提升代码的安全性,避免重要逻辑代码被破解,因此提出了代码混淆方案。目前的代码混淆工具在混淆单条指令时,通常的做法是使用多条可以相互抵消的指令进行叠加的方式来进行代码混淆。例如将f(x)=x+2混淆为f(x)=x-(-2);再如,将a=b+c混淆为:r=rand(),表示r为一个随机数;a=b+r;a=a+c;a=a-r。
[0003] 现有的这种代码混淆方案虽然易于实现,但是反编译者可以使用编译器对代码进行优化的方式来将混淆后的代码地还原成原始代码,使得混淆后的代码安全性较弱,容易被破解。

发明内容

[0004] 本发明提供了一种混淆代码的运行方法和装置,以解决相关技术中的代码混淆方案所存在的混淆后代码破解难度低,代码安全性差的问题。
[0005] 为了解决上述问题,根据本发明的一个方面,本发明公开了一种混淆代码的运行方法,包括:
[0006] 计算预设运算函数中参数的每个取值与所述预设运算函数中已知数值的运算结果;
[0007] 将所述参数的每个取值和对应的运算结果存储至新建的数据表;
[0008] 接收运行所述预设运算函数的目标输入,所述目标输入包括所述参数的目标取值;
[0009] 响应于所述目标输入,在所述数据表中查找所述目标取值对应的目标运算结果并输出所述目标运算结果。
[0010] 可选地,当所述参数的数据类型对应的数据长度M大于预设数据长度时;
[0011] 所述计算预设运算函数中参数的每个取值与所述预设运算函数中已知数值的运算结果,包括:
[0012] 对预设运算函数中的已知数值进行按位分割,得到对应N个数据位范围的N个数值段,其中,每个数值段的数据长度为4位,N=M/4;
[0013] 对所述预设运算函数中的参数构成的未知数进行所述按位分割,得到对应N个数据位范围的N个子未知数,其中,每个子未知数的数据长度为4位,N=M/4;
[0014] 针对所述N个子未知数,计算目标数据位范围对应的目标子未知数的每个取值与对应所述目标数据位范围的目标数值段之间的子运算结果,得到对应目标数据位范围的多个子运算结果,其中,所述目标数据位范围为所述N个数据位范围中的每个数据位范围;
[0015] 所述将所述参数的每个取值和对应的运算结果存储至新建的数据表,包括:
[0016] 新建对应N个数据位范围的N个数据表,每个对应目标数据位范围的目标数据表包括子未知数字段和子运算结果字段,所述子未知数字段用于存储对应目标数据位范围的子未知数的每个取值,所述子运算结果字段用于存储对应所述目标数据位范围的多个子运算结果;
[0017] 将对应目标数据位范围的子未知数的每个取值存储至对应目标数据范围的目标数据表中子未知数字段下的多个第一数据项中;
[0018] 将对应所述目标数据位范围的多个子运算结果存储至所述目标数据表中子运算结果字段下的对应所述子未知数的每个取值的多个第二数据项中。
[0019] 可选地,当所述预设运算函数包括乘法运算函数和/或加法运算函数时,所述目标数据表还包括第一进位字段和第二进位字段,所述第一进位字段用于存储目标数据表中每个子运算结果的第一进位数,所述第二进位字段用于存储第一数据表中每个子运算结果的第二进位数,其中,所述第一数据表为所述N个数据表中数据位范围与所述目标数据表的目标数据位范围相邻且低于所述目标数据位范围的数据表。
[0020] 可选地,所述响应于所述目标输入,在所述数据表中查找所述目标取值对应的目标运算结果,包括:
[0021] 响应于所述目标输入,对所述目标取值进行按位分割,得到对应N个数据位范围的N个子目标取值,其中,每个子目标取值的数据长度为4位,N=M/4;
[0022] 按照数据位范围从低到高的顺序依次在所述N个数据表中查找每个子目标取值对应的子运算结果,得到对应N个数据位范围的N个目标子运算结果;
[0023] 对所述N个目标子运算结果进行按位重组,得到所述目标取值对应的目标运算结果。
[0024] 可选地,所述响应于所述目标输入,在所述数据表中查找所述目标取值对应的目标运算结果,还包括:
[0025] 响应于所述目标输入,对所述目标取值进行按位分割,得到对应N个数据位范围的N个子目标取值,其中,每个子目标取值的数据长度为4位,N=M/4;
[0026] 在对应第i数据位范围的第i数据表中查找对应第i数据位范围的第i子目标取值所对应的第i子运算结果,以及在所述第i数据表中查找所述第i子运算结果在第一进位字段的多个第一数据项中对应的第i进位数,其中,i为大于0且小于N的整数;
[0027] 在对应第i+1数据位范围的第i+1数据表中查找对应第i+1数据位范围的第i+1子目标取值,以及在第i+1数据表中第二进位字段的多个第二数据项中查找所述第i进位数;
[0028] 在所述第i+1数据表中确定所述第i+1子目标取值和所述第i进位数对应的第i+1子运算结果,以及在所述第i+1数据表中查找所述第i+1子运算结果在第一进位字段的多个第一数据项中对应的第i+1进位数;
[0029] 将在N个数据表查找得到的N个子运算结果进行按位重组,得到所述目标取值对应的目标运算结果;
[0030] 其中,第i+1数据位范围高于所述第i数据位范围,且与所述第i数据位范围相邻。
[0031] 根据本发明的另一方面,本发明还公开了一种混淆代码的运行装置,包括:
[0032] 计算模块,用于计算预设运算函数中参数的每个取值与所述预设运算函数中已知数值的运算结果;
[0033] 存储模块,用于将所述参数的每个取值和对应的运算结果存储至新建的数据表;
[0034] 接收模块,用于接收运行所述预设运算函数的目标输入,所述目标输入包括所述参数的目标取值;
[0035] 查找输出模块,用于响应于所述目标输入,在所述数据表中查找所述目标取值对应的目标运算结果并输出所述目标运算结果。
[0036] 可选地,所述计算模块包括:
[0037] 第一分割子模块,用于当所述参数的数据类型对应的数据长度M大于预设数据长度时,对预设运算函数中的已知数值进行按位分割,得到对应N个数据位范围的N个数值段,其中,每个数值段的数据长度为4位,N=M/4;
[0038] 第二分割子模块,用于对所述预设运算函数中的参数构成的未知数进行所述按位分割,得到对应N个数据位范围的N个子未知数,其中,每个子未知数的数据长度为4位,N=M/4;
[0039] 计算子模块,用于针对所述N个子未知数,计算目标数据位范围对应的目标子未知数的每个取值与对应所述目标数据位范围的目标数值段之间的子运算结果,得到对应目标数据位范围的多个子运算结果,其中,所述目标数据位范围为所述N个数据位范围中的每个数据位范围;
[0040] 所述存储模块包括:
[0041] 新建子模块,用于新建对应N个数据位范围的N个数据表,每个对应目标数据位范围的目标数据表包括子未知数字段和子运算结果字段,所述子未知数字段用于存储对应目标数据位范围的子未知数的每个取值,所述子运算结果字段用于存储对应所述目标数据位范围的多个子运算结果;
[0042] 第一存储子模块,用于将对应目标数据位范围的子未知数的每个取值存储至对应目标数据范围的目标数据表中子未知数字段下的多个第一数据项中;
[0043] 第二存储子模块,用于将对应所述目标数据位范围的多个子运算结果存储至所述目标数据表中子运算结果字段下的对应所述子未知数的每个取值的多个第二数据项中。
[0044] 可选地,当所述预设运算函数包括乘法运算函数和/或加法运算函数时,所述目标数据表还包括第一进位字段和第二进位字段,所述第一进位字段用于存储目标数据表中每个子运算结果的第一进位数,所述第二进位字段用于存储第一数据表中每个子运算结果的第二进位数,其中,所述第一数据表为所述N个数据表中数据位范围与所述目标数据表的目标数据位范围相邻且低于所述目标数据位范围的数据表。
[0045] 可选地,所述查找输出模块包括:
[0046] 第三分割子模块,用于响应于所述目标输入,对所述目标取值进行按位分割,得到对应N个数据位范围的N个子目标取值,其中,每个子目标取值的数据长度为4位,N=M/4;
[0047] 第一查找子模块,用于按照数据位范围从低到高的顺序依次在所述N个数据表中查找每个子目标取值对应的子运算结果,得到对应N个数据位范围的N个目标子运算结果;
[0048] 第一重组子模块,用于对所述N个目标子运算结果进行按位重组,得到所述目标取值对应的目标运算结果。
[0049] 可选地,述查找输出模块还包括:
[0050] 第四分割子模块,用于响应于所述目标输入,对所述目标取值进行按位分割,得到对应N个数据位范围的N个子目标取值,其中,每个子目标取值的数据长度为4位,N=M/4;
[0051] 第二查找子模块,用于在对应第i数据位范围的第i数据表中查找对应第i数据位范围的第i子目标取值所对应的第i子运算结果,以及在所述第i数据表中查找所述第i子运算结果在第一进位字段的多个第一数据项中对应的第i进位数,其中,i为大于0且小于N的整数;
[0052] 第三查找子模块,用于在对应第i+1数据位范围的第i+1数据表中查找对应第i+1数据位范围的第i+1子目标取值,以及在第i+1数据表中第二进位字段的多个第二数据项中查找所述第i进位数;
[0053] 第四查找子模块,用于在所述第i+1数据表中确定所述第i+1子目标取值和所述第i进位数对应的第i+1子运算结果,以及在所述第i+1数据表中查找所述第i+1子运算结果在第一进位字段的多个第一数据项中对应的第i+1进位数;
[0054] 第二重组子模块,用于将在N个数据表查找得到的N个子运算结果进行按位重组,得到所述目标取值对应的目标运算结果;
[0055] 其中,第i+1数据位范围高于所述第i数据位范围,且与所述第i数据位范围相邻。
[0056] 与现有技术相比,本发明包括以下优点:
[0057] 本发明通过将预设运算函数中参数的每个取值和每个取值和已知取值的运算结果存储至数据表中,从而在运行该预设运算函数时,能够通过直接查询数据表的方式来查找参数的目标取值对应的目标运算结果,在这个过程中无需编写预设运算函数的代码逻辑,而是转换成了查表的过程,从而实现了代码混淆,并且,通过查数据表的方式能够完全的将预设运算函数的代码逻辑进行隐藏,从而提升了混淆代码的破解难度,提升了代码安全性。

附图说明

[0058] 图1是本发明的一种混淆代码的运行方法实施例的步骤流程图;
[0059] 图2是本发明的一种数据表的示意图;
[0060] 图3是本发明的一种数据表查询实施例的流程图;
[0061] 图4是本发明的另一种数据表的示意图;
[0062] 图5是本发明的一种混淆代码的运行装置实施例的结构框图。

具体实施方式

[0063] 为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。
[0064] 参照图1,示出了本发明的一种混淆代码的运行方法实施例的步骤流程图,具体可以包括如下步骤:
[0065] 步骤101,计算预设运算函数中参数的每个取值与所述预设运算函数中已知数值的运算结果;
[0066] 其中,预设运算函数包括但不限于加法运算函数、乘法运算函数、异或运算函数中的任意一个或几个的结合。并且,其中,加法运算函数可以是连续加法运算,例如a+b+2。乘法和异或运算类似,也可以是连续运算。
[0067] 其中,函数中的参数可以是一个或多个,例如a+b+2中的参数包括a和b。
[0068] 这里以预设运算函数f(x)=3+x为例进行说明。其中,在代码混淆前f(x)=3+x的代码包括f(x)的函数代码,以及运行该函数f(x)的代码,这样会使f(x)=3+x的代码逻辑容易被破解,即了解到该运算为加法运算,且加数为3。那么为了保护代码的安全,本发明实施例对该函数进行了代码混淆,本步骤中,首先需要计算出x的每个取值与3的所有加法运算结果。其中,x可以具有数值范围,本发明对此并不限定。
[0069] 步骤102,将所述参数的每个取值和对应的运算结果存储至新建的数据表;
[0070] 其中,可以将参数x的每个取值和对应的加法运算结果都存储至一个新建的数据表中。这里以十进制为例进行说明,例如参数x没有数值范围要求,那么作为十进制的x所有取值包括0~9,那么就可以将0~9中的每个数值与已知数值3进行加法运算,从而得到运算结果,数据表如图2所示。
[0071] 可选地,在一个实施例中运算结果可能会超过十进制,例如7+3=10,那么存储的结果为0,可以在如图2所示的表中添加进位1,同样的8+3、9+3也同样存在进位的情况,存储结果如图2所示。
[0072] 其中,需要注意的是,参数x的每个取值和使用该取值得到的运算结果都是对应存储的,即,图2中每行数据是存在对应关系的。
[0073] 那么本发明实施例中不直接编写函数f(x)=3+x的代码逻辑,以及运行该函数的代码逻辑,而是直接编写构建上述数据表的代码逻辑,以及编写将函数的参数的取值和对应运算结果存储在数据表中的代码逻辑,从而避免函数f(x)=3+x的代码逻辑,以及运行该函数的代码逻辑被暴露的问题。
[0074] 步骤103,接收运行所述预设运算函数的目标输入,所述目标输入包括所述参数的目标取值;
[0075] 其中,在运行函数f(x)时,该目标输入可以是运行f(x)的触发指令,该触发指令携带者参数x的目标取值,例如,在实际运行函数时,需要计算x=6时的运算结果,这里参数x的目标取值就为6。
[0076] 步骤104,响应于所述目标输入,在所述数据表中查找所述目标取值对应的目标运算结果并输出所述目标运算结果。
[0077] 其中,由于在将参数x的取值和运算结果存储至数据表时,参数x的取值和运算结果是存在对应关系的,因此,可以直接在如图2所示的数据表中查找到x=6时的运算结果,即为9,且进位为0。最后,就可以将查询结果9输出。
[0078] 需要注意的是,本实施例中为了便于读者理解本发明因此以十进制数据的运算为例进行了上述代码混淆的说明,但是在实际应用中,计算机识别的语言是二进制的,因此,在实际应用中,数据表中存储的数据也是二进制的,但是不论数据是几进制的都不影响本发明上述方法的实现,且实现原理是一致的,因此,这里不再对二进制数据进行上述方法的详细阐述,可直接参考上述十进制数据运算的原理。
[0079] 借助于本发明上述实施例的技术方案,本发明通过将预设运算函数中参数的每个取值和每个取值和已知取值的运算结果存储至数据表中,从而在运行该预设运算函数时,能够通过直接查询数据表的方式来查找参数的目标取值对应的目标运算结果,在这个过程中无需编写预设运算函数的代码逻辑,而是转换成了查表的过程,从而实现了代码混淆,并且,通过查数据表的方式能够完全的将预设运算函数的代码逻辑进行隐藏,从而提升了混淆代码的破解难度,提升了代码安全性。
[0080] 可选地,当所述参数的数据类型对应的数据长度M大于预设数据长度时,在执行步骤101时,可以通过以下方式来实现:
[0081] 其中,在实际应用中,参数的取值是二进制数,那么参数的取值数量与数据长度M是相关联的,即参数的取值包括2M个,那么数据表中存储的数据行则包括2M行,因此,如果M过大,则会造成数据表中的数据过多,使得数据表在内存中占用过大,从而降低系统性能。那么本实施例中设置了预设数据长度,例如4位(bit),当参数的数据类型对应的数据长度M小于等于4bit时,则可以通过维护一个数据表来存储参数的所有取值和对应的运算结果。
而当参数的数据类型对应的数据长度M大于4bit时,则可以通过维护M/4个数据表的方式来存储参数的所有取值和对应的运算结果。
[0082] 具体而言:
[0083] S11,对预设运算函数中的已知数值进行按位分割,得到对应N个数据位范围的N个数值段,其中,每个数值段的数据长度为4位,N=M/4;
[0084] 其中,参数的数据类型包括但不限于int32和int64。
[0085] 例如,参数的数据类型为int32,占用2个字节,即32bit。例如预设运算函数为上述异或运算函数f(x)=3⊕x,那么不论已知数值的数据长度够不够32bit,都采用32bit进行分割,高位不足则补0。
[0086] 那么已知数值3的二进制数据为:
[0087] 0000 0000 0000 0000 0000 0000 0000 0011;
[0088] 将已知数值的二进制数据按照从低位到高位的顺序4bit为一组进行划分,得到8个数值段:第0~3bit为0011;第4~7bit为0000;第8~11bit为0000;第12~15bit为0000;第16~19bit为0000;第20~23bit为0000;第24~27bit为0000;第28~31bit为0000;
[0089] S12,对所述预设运算函数中的参数构成的未知数进行所述按位分割,得到对应N个数据位范围的N个子未知数,其中,每个子未知数的数据长度为4位,N=M/4;
[0090] 其中,对于参数x构成的未知数,其也是32bit长度,因此,也需要按照S11进行分割,每4bit为一组;
[0091] 参数x的第0~3bit为????;第4~7bit为????;第8~11bit为????;第12~15bit为????;第16~19bit为????;第20~23bit为????;第24~27bit为????;第28~31bit为????;
[0092] 其中,每个“?”的取值包括0或1。
[0093] S13,针对所述N个子未知数,计算目标数据位范围对应的目标子未知数的每个取值与对应所述目标数据位范围的目标数值段之间的子运算结果,得到对应目标数据位范围的多个子运算结果,其中,所述目标数据位范围为所述N个数据位范围中的每个数据位范围;
[0094] 以第0~3bit的数据位范围为例进行说明,已知数值的第0~3bit为0011,而未知数的第0~3bit是????,即四位都是未知的,但是每个“?”的取值包括0或1,所以,未知数的4
第0~3bit包括2 =16种,分别为0000,0001,0010,0011,0100,0101,0110,0111,1000,
1001,1010,1011,1100,1101,1110,1111。
[0095] 所以,可以将第0~3bit的子未知数的16种可能分别与已知数值的第0~3bit为0011进行异或运算,从而得到16个子运算结果。
[0096] 针对其他数据位范围的运算与上述第0~3bit的计算方法类似,这里不再赘述。
[0097] 在执行步骤102时,可以通过以下方式来实现:
[0098] S21,新建对应N个数据位范围的N个数据表,每个对应目标数据位范围的目标数据表包括子未知数字段和子运算结果字段,所述子未知数字段用于存储对应目标数据位范围的子未知数的每个取值,所述子运算结果字段用于存储对应所述目标数据位范围的多个子运算结果;
[0099] 这里如图3所示,本发明新建了8个数据表,每个数据表对应一个数据位范围,数据位范围包括第0~3bit、第4~7bit、第8~11bit、第12~15bit、第16~19bit、第20~23bit、第24~27bit、第28~31bit。
[0100] S22,将对应目标数据位范围的子未知数的每个取值存储至对应目标数据范围的目标数据表中子未知数字段下的多个第一数据项中;
[0101] S23,将对应所述目标数据位范围的多个子运算结果存储至所述目标数据表中子运算结果字段下的对应所述子未知数的每个取值的多个第二数据项中。
[0102] 以第0~3bit的数据表存储的数据为例进行说明,其他数据位范围的数据表存储数据的方法类似,这里不再赘述。
[0103]子未知数 子运算结果(异或运算结果)
0000 0011
0001 0010
0010 0001
0011 0000
0100 0111
0101 0110
0110 0101
0111 0100
1000 1011
1001 1010
1010 1001
1011 1000
1100 1111
1101 1110
1110 1101
1111 1100
[0104] 表1
[0105] 其中,表1中的第0~3bit的数据位的多个子未知数分别与第0~3bit的数据位的已知数值的0011进行异或运算,子运算结果分别存储至表1中的子运算结果列中。
[0106] 其中,经过本实施例的步骤可以将未知数的所有可能数值与已知数值的异或运算结果按照数据位范围分别存储至如图3所示的8个数据表中。
[0107] 那么在执行步骤104中的所述响应于所述目标输入,在所述数据表中查找所述目标取值对应的目标运算结果的步骤时,则可以通过以下方式来实现:
[0108] S411,响应于所述目标输入,对所述目标取值进行按位分割,得到对应N个数据位范围的N个子目标取值,其中,每个子目标取值的数据长度为4位,N=M/4;
[0109] 例如参数x的目标取值为1111 0000 0000 0000 0000 0000 0000 0011。
[0110] 将目标取值的二进制数据按照从低位到高位的顺序4bit为一组进行划分,得到8个数值段:第0~3bit为0011;第4~7bit为0000;第8~11bit为0000;第12~15bit为0000;第16~19bit为0000;第20~23bit为0000;第24~27bit为0000;第28~31bit为1111;
[0111] S412,按照数据位范围从低到高的顺序依次在所述N个数据表中查找每个子目标取值对应的子运算结果,得到对应N个数据位范围的N个目标子运算结果;
[0112] 即按照如图3所示的箭头的顺序依次查找8个数据表中的8个子运算结果。具体而言,在查第0~3bit的数据位范围的数据表时,即在上述表1中的子未知数字段下查找目标取值的第0~3bit(0011)对应的子运算结果0000;然后,再在第4~7bit的数据位范围的数据表中的子未知数字段下查找目标取值的第4~7bit(0000)对应的子运算结果0000…….直到对第28~31bit这最后一个数据表中对应的子运算结果1111,从而得到8个数据位范围的8个子运算结果。
[0113] S413,对所述N个目标子运算结果进行按位重组,得到所述目标取值对应的目标运算结果。
[0114] 其中,可以将8个子运算结果按照从高位到低位的顺序进行重组,从而得到目标取值1111 0000 0000 0000 0000 0000 0000 0011与已知数值0000 0000 0000 0000 0000 0000 0000 0011的目标运算结果为:1111 0000 0000 0000 0000 0000 0000 0000。
[0115] 这样,本发明实施例的方法在确定预设运算函数中参数的数据类型的数据长度大于预设数据长度时,为了降低数据表对内存的过多占用,本发明可以将例如32位的运算转换为8组4位的运算,从而降低数据表对内存空间的占用,提升系统性能。
[0116] 其中,在上述实施例中,预设运算函数(例如异或运算)中未涉及进位的情况,可选地,当所述预设运算函数包括乘法运算函数和/或加法运算函数时,则会存在进位的情况。
[0117] 那么在本实施例中,上述目标数据表还包括第一进位字段和第二进位字段,所述第一进位字段用于存储目标数据表中每个子运算结果的第一进位数,所述第二进位字段用于存储第一数据表中每个子运算结果的第二进位数,其中,所述第一数据表为所述N个数据表中数据位范围与所述目标数据表的目标数据位范围相邻且低于所述目标数据位范围的数据表。
[0118] 参照图2和图4的针对f(x)=33+x生成的2个数据表为例进行说明,其中,图2中的数据表对应的数据位范围为个位,而图4中的数据表对应的数据位范围为十位,本例中以十进制数据进行说明,但是需要注意的是,这里的以10进制进行说明只是为了便于读者理解本发明,而在实际应用中,由于计算机只能识别二进制数据,所以不论是数据表中存储的数据,还是输入或输出的数据都是二进制数据。其中,图2和图4的表中的进位字段即为上述第一进位字段,用于存储本数据表中在进行每组数据的加法运算时的第一进位数;而图4中的表的“低位是否进位”字段即为上述第二进位字段,其中,该第二进位字段用于存储图2中的个位的数据表中的进位数。可选地,如图4所示,第二进位字段也可以将所有进位情况(无进位情况0,有进位情况1)都存储,并且,图4中的结果字段则为上述子运算结果字段。
[0119] 那么在执行步骤104的所述响应于所述目标输入,在所述数据表中查找所述目标取值对应的目标运算结果的步骤时,还可以通过以下方式来实现:
[0120] S421,响应于所述目标输入,对所述目标取值进行按位分割,得到对应N个数据位范围的N个子目标取值,其中,每个子目标取值的数据长度为4位,N=M/4;
[0121] S422,在对应第i数据位范围的第i数据表中查找对应第i数据位范围的第i子目标取值所对应的第i子运算结果,以及在所述第i数据表中查找所述第i子运算结果在第一进位字段的多个第一数据项中对应的第i进位数,其中,i为大于0且小于N的整数;
[0122] S423,在对应第i+1数据位范围的第i+1数据表中查找对应第i+1数据位范围的第i+1子目标取值,以及在第i+1数据表中第二进位字段的多个第二数据项中查找所述第i进位数;
[0123] S424,在所述第i+1数据表中确定所述第i+1子目标取值和所述第i进位数对应的第i+1子运算结果,以及在所述第i+1数据表中查找所述第i+1子运算结果在第一进位字段的多个第一数据项中对应的第i+1进位数;
[0124] S425,将在N个数据表查找得到的N个子运算结果进行按位重组,得到所述目标取值对应的目标运算结果;
[0125] 其中,第i+1数据位范围高于所述第i数据位范围,且与所述第i数据位范围相邻。
[0126] 例如第i数据位范围为第0~3bit数据位范围,则第i+1数据位范围为第4~7bit数据位范围,以此类推直至第28~32bit数据位范围。
[0127] 其中,上述过程以10进制进行简要说明,流程如下,例如f(x)=33+x中的参数x的目标取值为18,则分割为十位数范围的1和个位数范围8。首先在图2所示的个位数据表中查找被加数为8对应的结果为1,以及该结果对应的进位为1;然后,再在图4所示的十位数据表中的被加数中查找1,以及在低位是否进位中查找1,最后,查找被加数为1,且低位是否进位的数值为1对应的结果5,且进位为0,因此,最后经过两个表的查询得到十位数结果为5,个位数结果为1,那么经过重组得到的目标运算结果为51。即18+33=51。
[0128] 对于上述实施例中的二进制数据的处理和数据查找过程与上述举例中的十进制数据的处理和查找过程类似,这里不再赘述。
[0129] 借助于本发明上述实施例的技术方案,本发明实施例通过生成对应不同数据位范围的多个数据表,并预先将运算结果存储至数据表中,在运行函数时根据参数的数值的不同进行查表操作,从而获得多个数据位范围的多个子运算结果,最后进行重组,从而得到运算结果,针对涉及进位的运算同样适用。本发明混淆后的代码不进行真正的函数运算,从而防止了编译优化的可能,并能够使得混淆后的代码逻辑大大膨胀,使得反编译者很难恢复原指令;并将代码混淆后发布,减少了代码泄露的风险;既提升了混淆后的代码的破解难度,又能够保护代码不被攻击者看透从而增加代码安全性。
[0130] 需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明实施例并不受所描述的动作顺序的限制,因为依据本发明实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本发明实施例所必须的。
[0131] 与上述本发明实施例所提供的方法相对应,参照图5,示出了本发明一种混淆代码的运行装置实施例的结构框图,具体可以包括如下模块:
[0132] 计算模块51,用于计算预设运算函数中参数的每个取值与所述预设运算函数中已知数值的运算结果;
[0133] 存储模块52,用于将所述参数的每个取值和对应的运算结果存储至新建的数据表;
[0134] 接收模块53,用于接收运行所述预设运算函数的目标输入,所述目标输入包括所述参数的目标取值;
[0135] 查找输出模块54,用于响应于所述目标输入,在所述数据表中查找所述目标取值对应的目标运算结果并输出所述目标运算结果。
[0136] 可选地,所述计算模块51包括:
[0137] 第一分割子模块,用于当所述参数的数据类型对应的数据长度M大于预设数据长度时,对预设运算函数中的已知数值进行按位分割,得到对应N个数据位范围的N个数值段,其中,每个数值段的数据长度为4位,N=M/4;
[0138] 第二分割子模块,用于对所述预设运算函数中的参数构成的未知数进行所述按位分割,得到对应N个数据位范围的N个子未知数,其中,每个子未知数的数据长度为4位,N=M/4;
[0139] 计算子模块,用于针对所述N个子未知数,计算目标数据位范围对应的目标子未知数的每个取值与对应所述目标数据位范围的目标数值段之间的子运算结果,得到对应目标数据位范围的多个子运算结果,其中,所述目标数据位范围为所述N个数据位范围中的每个数据位范围;
[0140] 可选地,所述存储模块52包括:
[0141] 新建子模块,用于新建对应N个数据位范围的N个数据表,每个对应目标数据位范围的目标数据表包括子未知数字段和子运算结果字段,所述子未知数字段用于存储对应目标数据位范围的子未知数的每个取值,所述子运算结果字段用于存储对应所述目标数据位范围的多个子运算结果;
[0142] 第一存储子模块,用于将对应目标数据位范围的子未知数的每个取值存储至对应目标数据范围的目标数据表中子未知数字段下的多个第一数据项中;
[0143] 第二存储子模块,用于将对应所述目标数据位范围的多个子运算结果存储至所述目标数据表中子运算结果字段下的对应所述子未知数的每个取值的多个第二数据项中。
[0144] 可选地,当所述预设运算函数包括乘法运算函数和/或加法运算函数时,所述目标数据表还包括第一进位字段和第二进位字段,所述第一进位字段用于存储目标数据表中每个子运算结果的第一进位数,所述第二进位字段用于存储第一数据表中每个子运算结果的第二进位数,其中,所述第一数据表为所述N个数据表中数据位范围与所述目标数据表的目标数据位范围相邻且低于所述目标数据位范围的数据表。
[0145] 可选地,所述查找输出模块54包括:
[0146] 第三分割子模块,用于响应于所述目标输入,对所述目标取值进行按位分割,得到对应N个数据位范围的N个子目标取值,其中,每个子目标取值的数据长度为4位,N=M/4;
[0147] 第一查找子模块,用于按照数据位范围从低到高的顺序依次在所述N个数据表中查找每个子目标取值对应的子运算结果,得到对应N个数据位范围的N个目标子运算结果;
[0148] 第一重组子模块,用于对所述N个目标子运算结果进行按位重组,得到所述目标取值对应的目标运算结果。
[0149] 可选地,所述查找输出模块54还包括:
[0150] 第四分割子模块,用于响应于所述目标输入,对所述目标取值进行按位分割,得到对应N个数据位范围的N个子目标取值,其中,每个子目标取值的数据长度为4位,N=M/4;
[0151] 第二查找子模块,用于在对应第i数据位范围的第i数据表中查找对应第i数据位范围的第i子目标取值所对应的第i子运算结果,以及在所述第i数据表中查找所述第i子运算结果在第一进位字段的多个第一数据项中对应的第i进位数,其中,i为大于0且小于N的整数;
[0152] 第三查找子模块,用于在对应第i+1数据位范围的第i+1数据表中查找对应第i+1数据位范围的第i+1子目标取值,以及在第i+1数据表中第二进位字段的多个第二数据项中查找所述第i进位数;
[0153] 第四查找子模块,用于在所述第i+1数据表中确定所述第i+1子目标取值和所述第i进位数对应的第i+1子运算结果,以及在所述第i+1数据表中查找所述第i+1子运算结果在第一进位字段的多个第一数据项中对应的第i+1进位数;
[0154] 第二重组子模块,用于将在N个数据表查找得到的N个子运算结果进行按位重组,得到所述目标取值对应的目标运算结果;
[0155] 其中,第i+1数据位范围高于所述第i数据位范围,且与所述第i数据位范围相邻。
[0156] 对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
[0157] 本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
[0158] 本领域内的技术人员应明白,本发明实施例的实施例可提供为方法、装置、或计算机程序产品。因此,本发明实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
[0159] 本发明实施例是参照根据本发明实施例的方法、终端设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
[0160] 这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
[0161] 这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
[0162] 尽管已描述了本发明实施例的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明实施例范围的所有变更和修改。
[0163] 最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。
[0164] 以上对本发明所提供的一种混淆代码的运行方法和一种混淆代码的运行装置,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。