一种基于浮点数类型转换和运算的不透明谓词代码混淆装置及方法制造方法及图纸

技术编号:37621319 阅读:14 留言:0更新日期:2023-05-18 12:12
本发明专利技术公开一种基于浮点数类型转换和运算的不透明谓词代码混淆装置及方法,该装置包括浮点数类型转换精度损失数字收集模块、浮点数加法运算精度损失数字收集模块、浮点数乘法运算精度损失数字收集模块、不透明谓词数据库、混淆代码插入点收集模块、不透明谓词构造模块、不透明谓词代码混淆实施模块。本发明专利技术通过预先收集的符合条件的浮点数或者浮点数对,可以构造一系列不透明谓词用于对目标软件进行代码混淆。本发明专利技术可以对代码进行结构混淆,具有隐蔽性高、通用性好、具有可逆性、开销低等优点,本发明专利技术还可以在权衡软件性能要求和软件安全性要求,实现在产生较低开销的情况下增加按需对软件强化保护。按需对软件强化保护。按需对软件强化保护。

【技术实现步骤摘要】
一种基于浮点数类型转换和运算的不透明谓词代码混淆装置及方法


[0001]本专利技术属于软件安全
,尤其涉及一种基于浮点数类型转换和运算的不透明谓词代码混淆装置及方法。

技术介绍

[0002]随着计算机技术的飞速发展,计算机软件的应用日趋复杂,应用领域愈加广泛,逐渐渗透到人们工作和生活的方方面面。其负面影响之一是计算机软件中的漏洞数量与计算机软件规模成正比。与此同时,信息技术的发展也让计算机技术得以普及,间接导致攻击计算机软件的门槛降低。因此软件逆向、软件破解、软件盗版等恶意行为不断增加,软件安全问题逐渐发展为行业领域广泛关注的焦点和研究方向。
[0003]对软件安全的需求催生出一系列软件保护技术,根据其实现方法的不同可以划分为基于硬件的软件保护技术和基于软件的软件保护技术。其中,基于软件的软件保护技术主要包括软件篡改防护、软件水印、软件加密、软件反调试、软件虚拟机保护、代码混淆等。代码混淆广泛应用,它主要通过重写代码中的部分实现逻辑或者修改软件中标识符名称等实现,在保持程序原有功能不变的要求下对其进行修改,主要用于对抗逆向工程,给攻击者理解和分析程序制造障碍。根据代码混淆原理的不同,可以将其划分为外形混淆、控制结构混淆、数据混淆、预防混淆。当前代码混淆方面的研究主要指向控制结构混淆,绝大部分相关的研究成果仍处于理论研究阶段,相关的新技术方法往往不考虑实用性、通用性以及性能损耗而导致难以推广。因此需要一种具有通用性高、开销低、隐蔽性好等优点的控制结构混淆方法,提高软件保护能力。

技术实现思路
/>[0004]当前代码混淆方面的研究主要指向控制结构混淆,绝大部分相关的研究成果仍处于理论研究阶段,相关的新技术方法往往不考虑实用性、通用性以及性能损耗而导致难以推广。因此需要一种具有通用性高、开销低、隐蔽性好等优点的控制结构混淆方法,提高软件保护能力。本专利技术针对上述问题,提出一种基于浮点数类型转换和运算的不透明谓词代码混淆装置及方法,通过预先收集的符合条件的浮点数或者浮点数对,可以构造一系列不透明谓词用于对目标软件进行代码混淆。
[0005]为了实现上述目的,本专利技术采用以下技术方案:本专利技术一方面提出一种基于浮点数类型转换和运算的不透明谓词代码混淆装置,包括浮点数类型转换精度损失数字收集模块、浮点数加法运算精度损失数字收集模块、浮点数乘法运算精度损失数字收集模块、不透明谓词数据库、混淆代码插入点收集模块、不透明谓词构造模块、不透明谓词代码混淆实施模块;所述浮点数类型转换精度损失数字收集模块用于收集在计算机处理浮点数类型转换时出现精度损失的浮点数;
所述浮点数加法运算精度损失数字收集模块用于收集在计算机进行浮点数加法时出现精度损失的浮点数对;所述浮点数乘法运算精度损失数字收集模块用于收集在计算机进行浮点数乘法时出现精度损失的浮点数对;所述不透明谓词数据库包括浮点数类型转换数组、浮点数加法运算浮点数对数组、浮点数乘法运算浮点数对数组,分别用于存储浮点数类型转换精度损失数字收集模块、浮点数加法运算精度损失数字收集模块、浮点数乘法运算精度损失数字收集模块收集的数据;所述不透明谓词构造模块用于基于不透明谓词数据库中存储的数据生成不透明谓词代码混淆代码;所述混淆代码插入点收集模块用于扫描并收集待混淆代码的可混淆点;所述不透明谓词代码混淆实施模块用于基于不透明谓词构造模块生成的不透明谓词代码混淆代码,及混淆代码插入点收集模块扫描并收集的待混淆代码的可混淆点,对输入的待混淆代码实施不透明谓词代码混淆。
[0006]进一步地,所述不透明谓词构造模块具体用于:通过随机算法选择一种不透明谓词构造方法;如果选择的构造方法是浮点数类型转换,则从不透明谓词数据库的浮点数类型转换数组中随机选择一个浮点数构造不透明谓词;如果选择的构造方法是浮点数加法,则从不透明谓词数据库的浮点数加法运算浮点数对数组中随机选择一个浮点数对构造不透明谓词;如果选择的构造方法是浮点数乘法,则从不透明谓词数据库的浮点数乘法运算浮点数对数组中随机选择一个浮点数对构造不透明谓词。
[0007]进一步地,所述混淆代码插入点收集模块具体用于:创建用于存储混淆代码插入点的数组,扫描以LLVM中间字节码形式存在的待混淆代码中的每一个函数,识别出该函数中每一个基本块,把函数中每一个基本块插入数组。
[0008]进一步地,所述不透明谓词代码混淆实施模块具体用于:将输入的待混淆代码转化为LLVM中间字节码;对于通过混淆代码插入点收集模块收集的待混淆代码的每一个可混淆点,按照用户提供的混淆概率决定是否实施代码混淆;若需要实施代码混淆,则在实施不透明谓词混淆时,首先通过不透明谓词构造模块选择一个不透明谓词;并构造一个虚假执行的基本块以对抗攻击者对代码的逆向分析;然后根据不透明谓词构造基本块间的跳转关系;将混淆后的LLVM中间字节码编译成可执行文件。
[0009]本专利技术另一方面提出一种基于浮点数类型转换和运算的不透明谓词代码混淆方法,包括:通过浮点数类型转换精度损失数字收集模块、浮点数加法运算精度损失数字收集模块、浮点数乘法运算精度损失数字收集模块分别收集在计算机处理浮点数类型转换时出现精度损失的浮点数、在计算机进行浮点数加法时出现精度损失的浮点数对、在计算机进行浮点数乘法时出现精度损失的浮点数对;并分别存储于不透明谓词数据库的浮点数类型
转换数组、浮点数加法运算浮点数对数组、浮点数乘法运算浮点数对数组;通过不透明谓词构造模块基于不透明谓词数据库中存储的数据生成不透明谓词代码混淆代码;通过混淆代码插入点收集模块扫描并收集待混淆代码的可混淆点;对于每个可混淆点,按照用户提供的混淆概率决定是否实施代码混淆,若需要实施代码混淆,则基于不透明谓词代码混淆实施模块进行不透明谓词代码混淆。
[0010]进一步地,在所述通过混淆代码插入点收集模块扫描并收集待混淆代码的可混淆点之前,还包括:通过不透明谓词代码混淆实施模块将输入的待混淆代码转化为LLVM中间字节码。
[0011]进一步地,所述基于不透明谓词数据库中存储的数据生成不透明谓词代码混淆代码包括:通过随机算法选择一种不透明谓词构造方法;如果选择的构造方法是浮点数类型转换,则从不透明谓词数据库的浮点数类型转换数组中随机选择一个浮点数构造不透明谓词;如果选择的构造方法是浮点数加法,则从不透明谓词数据库的浮点数加法运算浮点数对数组中随机选择一个浮点数对构造不透明谓词;如果选择的构造方法是浮点数乘法,则从不透明谓词数据库的浮点数乘法运算浮点数对数组中随机选择一个浮点数对构造不透明谓词。
[0012]进一步地,所述扫描并收集待混淆代码的可混淆点包括:创建用于存储混淆代码插入点的数组,扫描以LLVM中间字节码形式存在的待混淆代码中的每一个函数,识别出该函数中每一个基本块,把函数中每一个基本块插入数组。
[0013]进一步地,所述对于每个可混淆点,按照用户提供的混淆概率决定是否实施代码混淆,若需要实施代码混淆,则基于不透明谓词代码混淆实施模块进行不透明谓词代码混淆包括:对于通过混淆代码插入点收集模块收集本文档来自技高网...

【技术保护点】

【技术特征摘要】
1.一种基于浮点数类型转换和运算的不透明谓词代码混淆装置,其特征在于,包括浮点数类型转换精度损失数字收集模块、浮点数加法运算精度损失数字收集模块、浮点数乘法运算精度损失数字收集模块、不透明谓词数据库、混淆代码插入点收集模块、不透明谓词构造模块、不透明谓词代码混淆实施模块;所述浮点数类型转换精度损失数字收集模块用于收集在计算机处理浮点数类型转换时出现精度损失的浮点数;所述浮点数加法运算精度损失数字收集模块用于收集在计算机进行浮点数加法时出现精度损失的浮点数对;所述浮点数乘法运算精度损失数字收集模块用于收集在计算机进行浮点数乘法时出现精度损失的浮点数对;所述不透明谓词数据库包括浮点数类型转换数组、浮点数加法运算浮点数对数组、浮点数乘法运算浮点数对数组,分别用于存储浮点数类型转换精度损失数字收集模块、浮点数加法运算精度损失数字收集模块、浮点数乘法运算精度损失数字收集模块收集的数据;所述不透明谓词构造模块用于基于不透明谓词数据库中存储的数据生成不透明谓词代码混淆代码;所述混淆代码插入点收集模块用于扫描并收集待混淆代码的可混淆点;所述不透明谓词代码混淆实施模块用于基于不透明谓词构造模块生成的不透明谓词代码混淆代码,及混淆代码插入点收集模块扫描并收集的待混淆代码的可混淆点,对输入的待混淆代码实施不透明谓词代码混淆。2.根据权利要求1所述的一种基于浮点数类型转换和运算的不透明谓词代码混淆装置,其特征在于,所述不透明谓词构造模块具体用于:通过随机算法选择一种不透明谓词构造方法;如果选择的构造方法是浮点数类型转换,则从不透明谓词数据库的浮点数类型转换数组中随机选择一个浮点数构造不透明谓词;如果选择的构造方法是浮点数加法,则从不透明谓词数据库的浮点数加法运算浮点数对数组中随机选择一个浮点数对构造不透明谓词;如果选择的构造方法是浮点数乘法,则从不透明谓词数据库的浮点数乘法运算浮点数对数组中随机选择一个浮点数对构造不透明谓词。3.根据权利要求1所述的一种基于浮点数类型转换和运算的不透明谓词代码混淆装置,其特征在于,所述混淆代码插入点收集模块具体用于:创建用于存储混淆代码插入点的数组,扫描以LLVM中间字节码形式存在的待混淆代码中的每一个函数,识别出该函数中每一个基本块,把函数中每一个基本块插入数组。4.根据权利要求1所述的一种基于浮点数类型转换和运算的不透明谓词代码混淆装置,其特征在于,所述不透明谓词代码混淆实施模块具体用于:将输入的待混淆代码转化为LLVM中间字节码;对于通过混淆代码插入点收集模块收集的待混淆代码的每一个可混淆点,按照用户提供的混淆概率决定是否实施代码混淆;若需要实施代码混淆,则在实施不透明谓词混淆时,首先通过不透明谓词构造模块选择一个不透明谓词;并构造一个虚假执行的基本块以对抗攻击者对代码的逆向分析;
然后根据不透明谓词构造基本块间的跳转关系;将混淆后的LLVM中间字节码编译成可执行文件。5.基于权利要求1
‑...

【专利技术属性】
技术研发人员:王庆丰扈红超梁浩王亚文程国振刘文彦仝玉吴燕鹏商珂霍树民范学云
申请(专利权)人:中国人民解放军战略支援部队信息工程大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1