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

软件异构化开发环境构建方法及装置

2022-07-31 06:49:24 来源:中国专利 TAG:


1.本发明属于网络空间安全技术领域,具体涉及一种软件异构化开发环境构建方法及装置。


背景技术:

2.近年来,由于软件开发与分发机制中的“单一文化主义”,通过逆向工程等途径进行非法软件盗版的现象日益严重。且当前普遍应用的大规模分布式系统中往往存在大量的共模漏洞,这也增加了大规模攻击的风险。而依靠交由不同团队进行软件开发以增加软件的异构性,增强其抗逆向工程的能力,所需的开销代价是巨大的。
3.针对此问题,软件异构化技术被提出来实现自动化更改软件的内部接口和结构以生成其独特的异构化版本,打破了“单一文化主义”,并在软件部署过程中引入了“多元文化主义”。恶意软件是旨在在用户计算机上运行其代码以破坏计算机的操作或按照攻击者的意愿操纵系统的任何软件。为此,它需要有关如何与环境交互以及访问资源的知识。而软件异构化技术改变了软件的内部接口,并使得恶意软件难以掌握这些知识。因此,恶意软件变得与环境不兼容,并最终变得无法采取有效措施来损害系统,对于保护大规模分布式系统,降低大规模攻击风险是一种十分有效的防御技术。
4.但是当前缺少面向大众开发者的低应用门槛的部署软件异构化技术的开发环境,且异构化工具的应用受不同语言、不同操作系统影响较大,为开发者实际使用部署异构化增加了难度。


技术实现要素:

5.针对现有技术中存在的缺陷,本发明提出一种软件异构化开发环境构建方法及装置,设计的软件异构化开发环境支持多种不同主流编程语言,提供多种部署模式,为营造内生安全产业生态提供了重要支撑。
6.为解决上述技术问题,本发明采用以下的技术方案:本发明提供了一种软件异构化开发环境构建方法,包含以下步骤:为软件异构化开发环境部署准备工作,软件异构化开发环境是基于开源集成开发环境扩展实现的;部署软件开发环境前端,负责读取用户异构化选项;部署后端软件异构化组件,通过命令封装器与软件开发环境前端进行交互,为用户提供软件异构化功能服务,并将生成的若干异构化版本文件返回给用户;对软件开发环境前端和后端软件异构化组件进行联调测试。
7.进一步地,所述为软件异构化开发环境部署准备工作包括:安装gcc、g 、autoconf和automake软件,搭建go、python、php、javascript和java编程语言的开发、执行环境。
8.进一步地,所述软件开发环境前端以软件异构化插件的形式提供多种编程语言的
异构化配置视图,通过多种可视化控件完成与用户的交互;同时软件异构化开发环境中对每个异构化功能配置解释页面,用于说明该功能的效果。
9.进一步地,所述命令封装器将用户在软件异构化插件界面中的异构化功能参数配置以及软件变体数量整合成具体命令操作,然后调用相应编程语言的后端软件异构化组件执行。
10.进一步地,根据编程语言种类不同,所述后端软件异构化组件包括c/c 异构化组件、python异构化组件、java异构化组件、javascript异构化组件、php异构化组件和go异构化组件,每个异构化组件提供针对该编程语言的异构化功能。
11.进一步地,每个后端软件异构化组件被封装为相应语言的异构化组件的可执行文件/脚本,由该可执行文件/脚本执行相关异构化功能,并生成所需数量的多个异构化版本文件。
12.进一步地,利用智能编排算法针对每种编程语言在相应的软件异构化插件中配置最优异构化功能。
13.进一步地,利用软件异构化评估插件对异构软件评估,得到差异化最大的异构软件。
14.进一步地,所述软件异构化评估插件包括基于控制流图评估插件、基于 gadgets评估插件以及基于模糊哈希函数评估插件;所述基于控制流图评估插件通过生成异构软件的控制流图,从控制流图的节点和路径的不同定性分析软件差异;所述基于 gadgets评估插件搜寻软件中的代码片段gadgets,通过逐条比对异构软件中gadgets的存活率,也就是完全相同gadgets的数量占总gadgets数量来定量评估软件差异;所述基于模糊哈希函数评估插件通过哈希函数提取软件的局部指纹信息并进行比较,定量分析软件异构程度。
15.本发明还提供了一种软件异构化开发环境构建装置,包括:准备工作模块,用于为软件异构化开发环境部署准备工作,软件异构化开发环境是基于开源集成开发环境扩展实现的;前端部署模块,用于部署软件开发环境前端,负责读取用户异构化选项;后端部署模块,用于部署后端软件异构化组件,通过命令封装器与软件开发环境前端进行交互,为用户提供软件异构化功能服务,并将生成的若干异构化版本文件返回给用户;测试模块,用于对软件开发环境前端和后端软件异构化组件进行联调测试。
16.与现有技术相比,本发明具有以下优点:当前缺少面向大众开发者的低应用门槛的部署软件异构化技术的开发环境,且异构化工具的应用受不同语言、不同操作系统影响较大,为开发者实际使用部署异构化增加了难度。针对此问题,本发明提出一种软件异构化开发环境构建方法,该方法将代码编写、多样化编译、代码变形和异构执行体生成有机融合,支持c、c 、python、java、javascript、php、go等多种不同主流编程语言,提供多种部署模式,为营造内生安全产业生态提供了重要支撑。
附图说明
17.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现
有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
18.图1是本发明实施例一的软件异构化开发环境构建方法的流程示意图;图2是本发明实施例二的基于c、c 、go语言的软件异构化方法的流程示意图;图3是本发明实施例三的基于python、php、javascript语言的软件异构化方法的流程示意图;图4是本发明实施例四的基于java语言的软件异构化方法的流程示意图;图5是本发明实施例一的异构软件评估方法的流程示意图。
具体实施方式
19.为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例,基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
20.实施例一如图1所示的,本实施例的软件异构化开发环境构建方法,包含以下步骤:步骤s11,为软件异构化开发环境部署准备工作,软件异构化开发环境是基于开源集成开发环境(ide,integrated development environment )扩展实现的;步骤s12,部署软件开发环境前端,负责读取用户异构化选项;步骤s13,部署后端软件异构化组件,通过命令封装器与软件开发环境前端进行交互,为用户提供软件异构化功能服务,并将生成的若干异构化版本文件返回给用户;步骤s14,对软件开发环境前端和后端软件异构化组件进行联调测试。
21.具体的,所述为软件异构化开发环境部署准备工作包括:安装gcc、g 、autoconf和automake等软件,搭建go、python、php、javascript和java等编程语言的开发、执行环境。
22.本实施例的软件异构化开发环境适配多种硬件平台以及多种操作系统,能够为绝大多数的软件开发场景提供支撑,并支持ide和云devops等多种应用模式;在云devops模式下,可将软件异构化工具链以容器的形式部署在云环境中,通过云管平台可视化界面对外提供软件异构化服务,将软件异构化过程整合到自动化的研发综合管理体系中。
23.所述软件开发环境前端以软件异构化插件的形式提供多种编程语言的异构化配置视图,通过多种可视化控件完成与用户的交互,大大降低了软件异构化技术的应用门槛,同时软件异构化开发环境中对每个异构化功能配置了解释页面,用于说明该功能的效果,帮助用户根据其需要准确定制功能组合。在ide模式下,系统具备传统ide应有的单步调测、语法检查、自动补全等功能外,还具有良好的可视效果和可操作性。
24.软件异构化插件依托开源ide所提供的插件开发环境实现,对开源ide的相关功能进行扩展,向用户提供服务。该软件异构化插件具有良好的可视效果和可操作性,在ide模式下,通过该可视化插件界面进行功能参数配置即可实现软件异构化。具体是:软件异构化插件根据编程语言的不同,提供多个异构化配置视图,每个异构化配置视图中有针对该编程语言所特定的多种异构化功能,具体支持垃圾代码插入、控制流平坦化、模糊谓词和等效
指令替换等多种代码混淆方法,栈帧布局随机化、寄存器分配随机化、函数列表随机化和堆-栈转换等多种内存布局随机化方法;并支持用户通过配置指定的软件多样化生成方法、生成策略、生成数量和场景等,即可自动化获得所需数量的异构化版本文件,支持通过提示信息显示每种异构化功能的效果,便于用户了解每种异构化功能的原理和效果,提供有好的操作界面。
25.所述命令封装器在软件异构化开发环境中为前后端提供交互的功能,将用户在软件异构化插件界面中的异构化功能参数配置以及软件变体数量整合成具体命令操作,然后调用相应编程语言的后端软件异构化组件执行。用户只需要通过软件开发环境前端中的异构化配置视图勾选所需功能,并进行参数配置,便可直接获得由后端软件异构化组件自动化生成的所需的异构化版本文件。
26.根据编程语言种类不同,所述后端软件异构化组件分为多个独立的异构化组件模块,具体包括c/c 异构化组件、python异构化组件、java异构化组件、javascript异构化组件、php异构化组件和go异构化组件,每个异构化组件都可提供针对该编程语言的异构化功能。每个后端软件异构化组件被封装为相应语言的异构化组件的可执行文件/脚本,由该可执行文件/脚本执行相关异构化功能,并生成用户所需数量的多个异构化版本文件。
27.进一步的,c/c 异构化组件用于对c/c 项目进行栈帧布局随机化、控制流平坦、全局变量随机化、空指令插入、字符串加密、基本块分割、指令替换等异构化处理,生成若干异构化版本可执行文件;go异构化组件用于对go语言项目进行栈帧布局随机化、控制流平坦、全局变量随机化、空指令插入、字符串加密、基本块分割、指令替换等异构化处理,生成若干异构化版本可执行文件;python异构化组件用于对python文件进行垃圾代码插入、代码压缩、代码加密、名称转换等异构化处理,生成若干异构化版本的python文件;php异构化组件用于对php文件进行名称转换、代码块洗牌、循环转换、if转换、字符串转换、控制流平坦、代码加密等异构化处理,生成若干异构化版本的php文件;javascript异构化组件用于对javascript文件进行字符串转换、控制流平坦、变量重命名、代码压缩、设置目标环境、垃圾代码插入、源文件映射代码加密等异构化处理,生成若干异构化版本的javascript文件;java异构化组件用于对java编译后的class文件以及jar文件进行名称转换、控制流平坦、字符串加密、内部类移除、数字混淆、硬件绑定等异构化处理,生成若干异构化版本的class文件或jar文件。
28.优选的,利用智能编排算法针对每种编程语言在相应的软件异构化插件中配置最优异构化功能,也可由用户按需进行配置修改,定制相应的异构化功能配置。后端软件异构化组件随机生成若干不同异构化功能配置方案,并根据不同异构化方案生成若干异构化版本文件,并进行评估,根据用户需求得到最优的异构化文件。
29.利用软件异构化评估插件对异构软件评估,得到差异化最大的异构软件;所述软件异构化评估插件包括基于控制流图评估插件、基于 gadgets评估插件以及基于模糊哈希函数评估插件;所述基于控制流图评估插件通过生成异构软件的控制流图,从控制流图的节点和路径的不同定性分析软件差异;所述基于 gadgets评估插件搜寻软件中的代码片段gadgets,通过逐条比对异构软件中gadgets的存活率,也就是完全相同gadgets的数量占总gadgets数量来定量评估软件差异;所述基于模糊哈希函数评估插件通过哈希函数提取软件的局部指纹信息并进行比较,定量分析软件异构程度。
30.如图5所示,异构软件评估方法包含以下步骤:步骤s51,软件开发环境前端读取用户需比较的异构软件;步骤s52,基于控制流图评估插件通过分析二进制软件,能够提取并展示二进制程序的控制流图,通过节点、路径比较控制流图差异;步骤s53,基于 gadgets评估插件搜寻软件中的gadgets,比较地址相同,内容也相同的gadgets,计算存活率;步骤s54,基于模糊哈希函数评估插件通过哈希函数给出软件差异值;步骤s55,综合以上三个插件的评估结果,得出差异化最大的异构软件。
31.与上述软件异构化开发环境构建方法相应地,本实施例还提供一种软件异构化开发环境构建装置,包括:准备工作模块,用于为软件异构化开发环境部署准备工作,软件异构化开发环境是基于开源集成开发环境扩展实现的;前端部署模块,用于部署软件开发环境前端,负责读取用户异构化选项;后端部署模块,用于部署后端软件异构化组件,通过命令封装器与软件开发环境前端进行交互,为用户提供软件异构化功能服务,并将生成的若干异构化版本文件返回给用户;测试模块,用于对软件开发环境前端和后端软件异构化组件进行联调测试。
32.实施例二如图2所示,本实施例公开一种基于c、c 、go语言的软件异构化方法,包含以下步骤:步骤s21,软件开发环境前端读入用户异构化选项,并解析成异构化参数;步骤s22,c/c /go异构化组件根据异构化参数编译待异构化的c/c /go源程序文件;步骤s23,c/c /go异构化组件生成异构化版本的可执行文件。
33.实施例三如图3所示,本实施例公开一种基于python、php、javascript语言的软件异构化方法,包含以下步骤:步骤s31,软件开发环境前端读入用户异构化选项,并解析成异构化参数;步骤s32,python/php/javascript异构化组件读入待异构化的python/php/javascript文件并解析;步骤s33,python/php/javascript异构化组件根据异构化参数修改待异构化的python/php/javascript文件;步骤s34,python/php/javascript异构化组件生成异构化版本的python/php/javascript文件。
34.实施例四如图4所示,本实施例公开一种基于java语言的软件异构化方法,包含以下步骤:步骤s41,软件开发环境前端读入用户异构化选项,并解析成异构化参数;步骤s42,java异构化组件读入待异构化的文件(class文件、jar文件或者war文件),并解析其字节码;
步骤s43,java异构化组件根据异构化参数修改待异构化文件的字节码;步骤s44,java异构化组件根据修改后的字节码生成异构化版本文件。
35.需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。
36.最后需要说明的是:以上所述仅为本发明的较佳实施例,仅用于说明本发明的技术方案,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所做的任何修改、等同替换、改进等,均包含在本发明的保护范围内。
再多了解一些

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

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

相关文献