欢迎来到知嘟嘟! 联系电话:13095918853 卖家免费入驻,海量在线求购! 卖家免费入驻,海量在线求购!
知嘟嘟
我要发布
联系电话:13095918853
知嘟嘟经纪人
收藏
专利号: 2023110400480
申请人: 广东工业大学
专利类型:发明专利
专利状态:已下证
专利领域: 计算;推算;计数
更新日期:2024-11-28
缴费截止日期: 暂无
价格&联系人
年费信息
委托购买

摘要:

权利要求书:

1.一种结合MD5与序列到序列模型的代码混淆方法,其特征在于,包括:

第一步,构建常量数据集:对于待混淆源程序的分支语句中的表达式,获取该表达式中的任意字符串常量和数值型常量作为第一明文,其中数值型常量包括:整型常量、单精度浮点型常量和双精度浮点型常量;然后对第一明文进行加盐处理,得到第二明文;接着使用MD5散列算法对第二明文加密后再添加对应的类型标识符,生成密文;最后为每一对密文和第一明文构造一个第一序偶,所有的第一序偶构建为一个常量数据集;

第二步,构造编码器字典和解码器字典:根据常量数据集中所有第一序偶的密文构造编码器字典,根据常量数据集中所有第一序偶的第一明文构造解码器字典,然后自定义一个起始符和一个结束符并加入至解码器字典;

第三步,数据预处理:对于常量数据集中的每一个第一序偶,首先在第一序偶的第一明文的最后面加上第二步中的结束符,得到第三明文;然后依次检索得到密文中的所有字符在编码器字典中的编号,构成第一编号序列,并且依次检索得到第三明文中的所有字符在解码器字典中的编号,构成第二编号序列;接着对第一编号序列中的编号进行One‑hot编码,构成第一向量序列,对第二编号序列中的编号进行One‑hot编码,构成第二向量序列;最后根据第一向量序列和第二向量序列构造一个第二序偶;

第四步,构建和训练一个序列到序列模型:以门控循环单元(Gate  Recurrent  Unit ,GRU)作为编码器,GRU和全连接层作为解码器,构建一个序列到序列模型;将所有的第二序偶作为训练集,经过训练后得到一个序列到序列模型;

第五步,构造解密函数:根据第四步中的序列到序列模型,构造一个将密文解密为第一明文的函数,该函数称为解密函数;

第六步,构造不透明谓词:将待混淆源程序中的分支语句的表达式中的字符串常量和数值型常量替换为对解密函数的调用,完成常量替换后的表达式即为不透明谓词;

第七步,插入不透明谓词和解密函数:将不透明谓词替代待混淆源程序中的分支语句的原有表达式,并将解密函数插入至待混淆源程序中任意不影响编译的位置,得到混淆后的源程序;

第八步,编译生成可执行应用程序:将混淆后的源程序编译成可执行应用程序。

2.根据权利要求1所述的结合MD5与序列到序列模型的代码混淆方法,其特征在于,所述的第一步的具体步骤包括:(1)对于待混淆源程序的分支语句中的表达式,获取该表达式中的任意字符串常量和数值型常量作为第一明文,其中数值型常量包括整型常量、单精度浮点型常量和双精度浮点型常量;

(2)对第一明文进行加盐处理,得到第二明文:当第一明文为数值型常量时,选取一个固定的常数作为盐并将其与第一明文相加,得到第二明文,当第一明文为字符串常量时,选取一个固定的标点符号作为盐并将其添加到第一明文的最后面,得到第二明文;然后使用MD5散列算法对第二明文进行加密后得到MD5字符串;接着自定义四个互不相同的字符,将它们分别作为字符串常量、整型常量、单精度浮点型常量和双精度浮点型常量的类型标识符;最后根据第一明文的常量类型将对应的类型标识符插入至MD5字符串中,插入的位置可以是MD5字符串中的任意位置;将插入类型标识符后的MD5字符串称为密文;

(3)首先将所有的密文和第一明文都转换为字符串,然后利用每一对密文和第一明文构造一个第一序偶,其中第一元表示密文,第二元表示密文对应的第一明文;所有的第一序偶o构成一个常量数据集O  ={o1,o2,…,on},n为O中第一序偶o的个数。

3.根据权利要求1所述的结合MD5与序列到序列模型的代码混淆方法,其特征在于,所述的第二步的具体步骤包括:(1)遍历O中所有o的,将所有中出现的字符构建为一个字符序列,如果字符存在重复,则只保留一个,该字符序列即为编码器字典;

(2)遍历O中所有o的,将所有中出现的字符构建为一个字符序列,如果字符存在重复,则只保留一个;然后自定义两个字符,分别作为起始符和结束符,其中,起始符和结束符互不相同且均不同于该字符序列中的所有字符;最后在该字符序列的最前面插入起始符和结束符,完成插入操作后的字符序列即为解码器字典。

4.根据权利要求1所述的结合MD5与序列到序列模型的代码混淆方法,其特征在于,所述的第三步的具体步骤包括:对于常量数据集O中的每一个第一序偶,

(1)把结束符添加到第一明文的最后面,得到第三明文;

(2)对密文从左到右进行逐个字符切分,根据依次得到中每个字符在中的编号,所有的编号构成第一编号序列;然后对从左到右进行逐个字符切分,根据依次得到中每个字符在中的编号,所有的编号构成第二编号序列;

(3)计算的长度a和的长度b;然后依次将中的每个编号都One‑hot编码为一个a维列向量,所有的向量构成第一向量序列;依次将中的每个编号都One‑hot编码为一个b维列向量,所有的向量构成第二向量序列;

(4)利用第一向量序列和第二向量序列构造一个第二序偶置项和候选状态偏置项;

当中的所有都已输入至编码器后,结束编码,并将最后时刻的作为中间状态c;

(2)以GRU和全连接层作为序列到序列模型的解码器;GRU的计算公式为:

全连接层的计算公式为:

其中,、和分别依次为第k个时刻的重置门、更新门和候选状态,为第k个时刻的隐藏状态,为第k个时刻解码器的输出,为第k‑1个时刻的隐藏状态,为第k个时刻解码器的输入,即第k‑1个时刻解码器的输出对应的One‑hot编码向量,、、和分别依次为重置门权重矩阵、更新门权重矩阵、候选状态权重矩阵和全连接层权重矩阵,、、和分别依次为重置门偏置项、更新门偏置项、候选状态偏置项和全连接层偏置项;

解码器以中间状态c作为初始时刻的隐藏状态,以起始符的One‑hot编码向量作为初始时刻解码器的输入,当解码器输出结束符时,结束解码;

(3)首先初始化整个序列到序列模型的模型权重,包括权重矩阵、、、、、、和偏置项、、、、、、,设置模型相关的超参数,包括GRU的隐藏层数量、GRU隐藏层单元的数量、批处理的大小、学习率的大小和训练的迭代次数;然后使用所有的第二序偶作为训练集训练模型,其中以作为输入序列,以作为目标序列;最后直到达到预设的训练迭代次数Epoch后停止训练;若此时模型对训练集中的所有输入序列都正确预测为对应的目标序列,则结束训练并保存模型权重;否则增加训练迭代次数Epoch并重新训练模型。

6.根据权利要求1所述的结合MD5与序列到序列模型的代码混淆方法,其特征在于,所述的第五步的具体步骤包括:构造一个输入为密文的解密函数,首先根据权利要求1所述的第三步将转变为向量序列;然后把输入序列到序列模型中,输出一个编号序列;接着根据中的每个编号g,在解码器字典中查找编号与g相等的字符,依次将这些字符构成一个字符序列;随后依次拼接中的所有字符,得到第三明文;删除中的结束符,得到第一明文;最后根据中的类型标识符将转换为对应的常量类型,并将完成常量类型转换后的作为解密函数的输出。

7.根据权利要求6所述的结合MD5与序列到序列模型的代码混淆方法,其特征在于,所述的根据中的类型标识符将转换为对应的常量类型的具体步骤包括:首先根据类型标识符在中的位置,获取中该位置对应的字符;然后根据该字符对进行常量类型转换:当字符为字符串常量的类型标识符时,将转换为字符串;当字符为整型常量的类型标识符时,将转换为整型数值;当字符为单精度浮点型常量的类型标识符时,将转换为单精度浮点型数值;当字符为双精度浮点型常量的类型标识符时,将转换为双精度浮点型数值。

8.一种结合MD5与序列到序列模型的代码混淆系统,用于运行权利要求1‑7任一所述的结合MD5与序列到序列模型的代码混淆方法,其特征在于,包括构建常量数据集模块、构造编码器字典和解码器字典模块、数据预处理模块、构建和训练一个序列到序列模型模块、构造解密函数模块、构造不透明谓词模块、插入不透明谓词和解密函数模块以及编译生成可执行应用程序模块:所述构建常量数据集模块:对于待混淆源程序的分支语句中的表达式,获取该表达式中的任意字符串常量和数值型常量作为第一明文,其中数值型常量包括:整型常量、单精度浮点型常量和双精度浮点型常量;然后对第一明文进行加盐处理,得到第二明文;接着使用MD5散列算法对第二明文加密后再添加对应的类型标识符,生成密文;最后为每一对密文和第一明文构造一个第一序偶,所有的第一序偶构建为一个常量数据集;

所述构造编码器字典和解码器字典模块:根据常量数据集中所有第一序偶的密文构造编码器字典,根据常量数据集中所有第一序偶的第一明文构造解码器字典,然后自定义一个起始符和一个结束符并加入至解码器字典;

所述数据预处理模块:对于常量数据集中的每一个第一序偶,首先在第一序偶的第一明文的最后面加上上述自定义的结束符,得到第三明文;然后依次检索得到密文中的所有字符在编码器字典中的编号,构成第一编号序列,并且依次检索得到第三明文中的所有字符在解码器字典中的编号,构成第二编号序列;接着对第一编号序列中的编号进行One‑hot编码,构成第一向量序列,对第二编号序列中的编号进行One‑hot编码,构成第二向量序列;最后根据第一向量序列和第二向量序列构造一个第二序偶;

所述构建和训练一个序列到序列模型模块:以门控循环单元(Gate  Recurrent  Unit,GRU)作为编码器,GRU和全连接层作为解码器,构建一个序列到序列模型;将所有的第二序偶作为训练集,经过训练后得到一个序列到序列模型;

所述构造解密函数模块:根据上述训练好的序列到序列模型,构造一个将密文解密为第一明文的函数,该函数称为解密函数;

所述构造不透明谓词模块:将待混淆源程序中的分支语句的表达式中的字符串常量和数值型常量替换为对解密函数的调用,完成常量替换后的表达式即为不透明谓词;

所述插入不透明谓词和解密函数模块:将不透明谓词替代待混淆源程序中的分支语句的原有表达式,并将解密函数插入至待混淆源程序中任意不影响编译的位置,得到混淆后的源程序;

所述编译生成可执行应用程序模块:将混淆后的源程序编译成可执行应用程序。