一种代码加密方法及相关组件
文献发布时间:2023-06-19 09:32:16
技术领域
本申请涉及计算机软件技术领域,特别涉及一种代码加密方法、装置、设备及一种可读存储介质。
背景技术
目前,各公司和企业下的运行代码中可能存在一些机密的实现方法(或者商业机密)不希望被其它人所了解,出于保护代码逻辑的需要,需要对运行代码进行加密处理。
相关技术中通过是通过JavaScript(后称js)对代码进行混淆实现代码加密。
但是混淆后的代码仍然是可被二次修改的代码,甚至目前存在一些反混淆工具能够在一定程度上逆向混淆,配合js强大的内部调试,用户可以轻松地推导出代码逻辑,或对其进行修改,因而,采用混淆的伪“加密”无法保证代码的安全性,对项目安全带来隐患。与此同时,由于混淆加密通过引入多余代码来实现代码的混淆加密,需要修改原有抽象语法树,会造成性能上的消耗,会极大程度影响代码的执行效率。
因此,如何在保障代码执行效率的同时实现有效的代码加密保护,是本领域技术人员急需解决的问题。
发明内容
本申请的目的是提供代码加密方法,该方法可以在保障代码执行效率的同时实现有效的代码加密保护;本申请的另一目的是提供代码加密装置、设备及一种可读存储介质。
为解决上述技术问题,本申请提供一种代码加密方法,包括:
确定待加密代码;
调用编译器将所述待加密代码编译为二进制文件;
将所述二进制文件添加至目的项目中的目的地址;
在所述目的项目中根据二进制文件运行规则调用所述二进制文件进行功能执行。
可选地,所述确定待加密代码,包括:
确定待保护的原始代码;
确定所述原始代码中的待保护逻辑操作;
将所述待保护逻辑操作转换为函数,作为待加密函数;
对所述待加密函数进行编程语言转换,得到待加密函数代码;
将所述待加密函数代码作为所述待加密代码。
可选地,对所述待加密函数进行编程语言转换,包括:根据Rust或C++编程语言将所述待加密函数进行编程语言转换。
可选地,当所述待加密代码为vue项目代码时,所述调用编译器将所述待加密代码编译为二进制文件,包括:调用Emscripten编译器将所述待加密代码编译为wasm二进制文件。
本申请还提供了一种代码加密装置,该装置包括:
代码确定单元,用于确定待加密代码;
代码编译单元,用于调用编译器将所述待加密代码编译为二进制文件;
文件添加单元,用于将所述二进制文件添加至目的项目中的目的地址;
文件调用单元,用于在所述目的项目中根据二进制文件运行规则调用所述二进制文件进行功能执行。
可选地,所述代码确定单元包括:
原始代码确定子单元,用于确定待保护的原始代码;
逻辑操作确定子单元,用于确定所述原始代码中的待保护逻辑操作;
函数转换子单元,用于将所述待保护逻辑操作转换为函数,作为待加密函数;
语言转换子单元,用于对所述待加密函数进行编程语言转换,得到待加密函数代码;
代码获取子单元,用于将所述待加密函数代码作为所述待加密代码。
可选地,语言转换子单元具体为:第一语言转换子单元,所述第一语言转换子单元用于:根据Rust或C++编程语言将所述待加密函数进行编程语言转换。
可选地,当所述待加密代码为vue项目代码时,所述代码编译单元具体为第一编译单元,所述第一编译单元用于:调用Emscripten编译器将所述待加密代码编译为wasm二进制文件。
本申请还提供了一种代码加密设备,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序时实现所述的代码加密方法的步骤。
本申请还提供了一种可读存储介质,所述可读存储介质上存储有程序,所述程序被处理器执行时实现所述的代码加密方法的步骤。
本申请所提供的代码加密方法中,在确定待加密代码之后,将代码编译成二进制文件,利用二进制文件难以破译的特性来达到对保护代码的需要,相较于传统js混淆加密方式大幅度提高了破解代码逻辑的难度,同时未引入混淆代码,在功能调用执行时可以直接运行二进制文件,可以在极大程度上提高性能,使代码的执行可以充分发挥硬件性能从而达到原生的效率,提升执行效率。
本申请还提供了一种代码加密装置、设备及一种可读存储介质,具有上述有益效果,在此不再赘述。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本申请实施例提供的一种代码加密方法的流程图;
图2为本申请实施例提供的一种vue项目示意图;
图3为本申请实施例提供的一种代码加密装置的结构框图;
图4为本申请实施例提供的一种代码加密设备的结构示意图。
具体实施方式
本申请的核心是提供代码加密方法,该方法可以提高网站防护精准率和高效性的同时最大化减少误拦截;本申请的另一核心是提供代码加密装置、设备及一种可读存储介质。
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
请参考图1,图1为本实施例提供的一种代码加密方法的流程图,该方法主要包括以下步骤:
步骤s110、确定待加密代码;
待加密代码为待进行加密保护的代码部分,可以为某个指定的函数代码,也可以为完成的实现某个功能的代码部分。其中待加密代码均尽量保证为js代码,从而保证后续二进制的正常转化以及执行。
本实施例中对于待加密代码的确定实现方式不做限定,比如可以接收导入的代码,作为待加密代码,也可以对完整的代码进行逻辑操作的提取,并将提取后的代码作为待加密代码等。
可选地,一种确定待加密代码的实现方式主要包括如下几个步骤:
(1)确定待保护的原始代码;
(2)确定原始代码中的待保护逻辑操作;
(3)将待保护逻辑操作转换为函数,作为待加密函数;
(4)对待加密函数进行编程语言转换,得到待加密函数代码;
其中,对待加密函数进行编程语言转换的过程具体可以为:根据Rust或C++编程语言将待加密函数进行编程语言转换。上述两种编程语言类型可以实现优良读取以及兼容效果下的变成语言转换,本实施例中仅以上述语言转换方式为例进行介绍,其他可以实现变成语言转换的功能以及模块在此不再赘述。
(5)将待加密函数代码作为待加密代码。
上述代码确定方式中,既可以实现对于关键逻辑部分(即逻辑操作)的加密,又方便对于加密后的关键逻辑部分的调用,输入以及输出的数据均可以按照传统的方式进行写入,方便后续的程序调用。
本实施例中仅以上述代码确定方式为例进行详细介绍,其他基于本申请的待加密代码确定过程均可参照上述介绍,在此不再赘述。
步骤s120、调用编译器将待加密代码编译为二进制文件;
编译器的作用在于将代码转换为二进制文件,本实施例中对于编译器的具体类型不做限定,比如可以为Emscripten编译器等,可以实现上述功能即可。
本实施例中通过将待加密代码编译为二进制文件,二进制文件相较传统js混淆加密方式在代码逻辑的破译难度上来说大大提升,因此将待加密代码编译为二进制文件进行存储可以实现对于代码的可靠加密,同时通过二进制转换进行代码加密时又未引入额外的混淆代码或改变原有抽象语法树,避免了混淆代码以及原有语法书的修改对于原有代码的执行影响,二进制文件可以直接被调用实现功能响应,因此该种加密处理方式既可以保障代码的安全性,又可以保障高效的代码执行。
步骤s130、将二进制文件添加至目的项目中的目的地址;
目的项目即待保护代码被调用实现功能响应的项目,目的地址为目的项目中存储二进制文件的区域。
将二进制文件添加至目的项目中的目的地址后,目标项目就可以从目的地址中直接实现对于二进制文件的调用。
步骤s140、在目的项目中根据二进制文件运行规则调用二进制文件进行功能执行。
而其中,二进制文件运行规则用于实现二进制代码文件的直接调用,具体运行规则的设置可以参照相关技术的介绍,在此不做限定。
在保证待保护代码的正常功能实现,本实施例中直接调用安全加密存储的二进制文件实现功能调用,而具体的基于二进制文件的调用实现方式可以参照相关技术的介绍,在此不再赘述。
基于上述介绍,本实施例所提供的代码加密方法中,在确定待加密代码之后,将代码编译成二进制文件,利用二进制文件难以破译的特性来达到对保护代码的需要,相较于传统js混淆加密方式大幅度提高了破解代码逻辑的难度,同时未引入混淆代码,在功能调用执行时可以直接运行二进制文件,可以在极大程度上提高性能,使代码的执行可以充分发挥硬件性能从而达到原生的效率,提升执行效率。
上述实施例中对于不同应用场景下的具体功能实现不做限定,本实施例中介绍一种应用于vue项目的优化实现方案,具体地提供了基于WebAssembly的vue逻辑函数加密的方法,致力于解决Vue项目中逻辑代码暴露所带来的安全风险和版权风险,并提高代码执行效率。
本实施例中应用于vue项目,vue项目为一种常用的浏览器,如图2所示为一种vue项目示意图,vue项目分为三个部分:UI界面、JavaScript层以及WebAssembly层。其中,UI界面,负责数据的展示以及用户的操作获取;JavaScript层作为wasm与UI界面的中间层,负责获取UI界面用户的操作,并获取相应数据传入WebAssembly层,同时获取WebAssembly层的处理后的数据并将处理后的数据在UI界面展示;WebAssembly层,主要负责数据的相应处理操作,本实施例中主要通过WebAssembly来进行代码加密,通过将vue浏览器项目中的逻辑函数提取编译成wasm二进制文件,可以有效的防止函数代码逻辑被破译,同时直接运行二进制格式,可以充分发挥硬件能力提高程序性能。
需要说明的是,本实施例中调用Emscripten编译器来进行代码编译,Emscripten编译器的运行条件时需要安装Emscripten SDK并配置环境变量,因此在安装完EmscriptenSDK并配置环境变量后,才可以进行代码编译操作。
具体的一种实现步骤如下:
(1)将vue项目中的待保护的逻辑操作转换为函数,作为待加密函数;
例如:某个表格需要在每一列数据后添加操作项,这时可以将这次操作提取出来,作为待保护的逻辑操作做成一个表格操作项添加函数,以便于对该逻辑操作进行加密的同时保障对于该逻辑操作的正常输入以及输出处理。
而其中,分析逻辑操作需要传入的参数、进行的操作、需要返回的参数,实际使用中可能会出现不需要传入参数或不需要返回参数或都不需要的情况都可以由编码人员根据情况判断。比如如果有部分逻辑需要取得两个参数的和,这部分操作抽象的函数所需要传入的参数为需要相加的A、B,需要进行的操作为C=A+B,所需要返回的函数为和C。这时通过传入参数就可以达到执行本部分操作的目的。
需要说明的是,若实际编码经验丰富,或者待保护的代码为整段代码时,可以跳过该步骤。
(2)对待加密函数进行编程语言转换,得到程序文件;
对待加密函数进行编程语言转换,以保证输入数据可以获得所需要的正确的结果。
本步骤的目的在于将逻辑操作转化为逻辑代码,本实施例中仅以Rust/C+作为编程语言类型为例,即对待加密函数进行编程语言转换具体可以根据Rust/C++等编程语言实现该函数,该两种语言形式兼容性强,可以保障较优的浏览器支持效果。
而具体地根据编程语言进行函数实现的过程可以参照相关技术的介绍,在此不再赘述。
(3)调用Emscripten编译器将步骤(2)中编写的程序文件编译成wasm二进制文件;
本实施例中使用Emscripten编译器进行程序文件的编译,该种编译器可以实现较优的浏览器支持效果,在此仅以该中编译器类型为例。
WebAssembly(缩写wasm)是由W3C社区组开发的开放标准,它是一种安全,便携,低级代码设计用于高效执行和紧凑表示的格式。它的主要目标是使Web上的高性能应用,不需要针对网络的特定假设或提供特定的定制化的网络功能,因此它可以在其他环境中直接使用,也就是良好的跨平台特性。
本实施例中选用wasm二进制文件来进行加密的文件类型以及功能实现的文件类型,主要原因在于,wasm为W3C协会制定的浏览器支持的二进制文件,二进制文件具有极强的安全性,反编译难度巨大,同时因为二进制文件的性能极高,几乎可以达到原生的性能。也可以编译为其他类型的二进制文件,本实施例中不再赘述。
而具体的使用Emscripten编译器将第二步中编写的程序文件编译成wasm二进制文件的一种实现方式如下:在Emscripten中的终端窗口通过输入命令‘emcc hello.c-sWASM=1 -o hello.js’将程序文件编译成wasm二进制文件,其中hello.c为所需要编译的文件名称,hello.js为引入二进制文件的示例文件名称。
(4)将步骤(3)中生成的wasm文件引入项目,并在需要的地方通过js调用实现功能。
本实施例汇总直接运行二进制文件,可以保障运行过程中代码的保密性,同时保障其正常业务功能的实现。
而其中,直接调用运行二进制文件的实现过程可以参照相关技术的实现方式,在此不做限定。为加深理解,在此介绍一种步骤(4)的实现方式:第一步,通过fetch(path)函数加载文件,再使用arrayBuffer()子函数将文件转换为ArrayBuffer,最后使用WebAssembly.compile(ArrayBuffer)函数,获得本文件实例module(实例命名可自定义);第二步,通过‘imports.env=imports.env||{}’初始化变量环境,再通过执行‘imports.env.memoryBase=imports.env.memoryBase||0’和‘imports.env.memory=imports.env.memory||new WebAssembly.Memory({initial:256})’语句开辟内存空间,通过执行‘imports.env.tableBase=imports.env.tableBase||0’和‘imports.env.table=imports.env.table||new WebAssembly.Table({initial:0,element:'anyfunc'})’语句来创建变量映射表;第三步,通过new WebAssembly.Instance(module,imports)即可创建WebAssembly实例,这里将本实例命名为instance,其中module,imports分别为前两步操作后的文件实例和变量Object,通过instance.exports即可导出所需函数进行具体操作。其中,:path为文件路径,imports为传入的变量Object。
本实施例中通过将vue项目中的逻辑操作转换为wasm二进制文件,由于二进制文件难以破译的特性来达到对保护代码的需要,同时,wasm在浏览器上运行可以充分发挥硬件性能,相较于传统js混淆加密方式大幅度提高了性能。
请参考图3,图3为本实施例提供的代码加密装置的结构框图;该装置主要包括:代码确定单元110、代码编译单元120、文件添加单元130以及文件调用单元140。本实施例提供的代码加密装置可与上述代码加密方法相互对照。
其中,代码确定单元110主要用于确定待加密代码;
代码编译单元120主要用于调用编译器将待加密代码编译为二进制文件;
文件添加单元130主要用于将二进制文件添加至目的项目中的目的地址;
文件调用单元140主要用于在目的项目中根据二进制文件运行规则调用二进制文件进行功能执行。
可选地,代码确定单元具体可以包括:
原始代码确定子单元,用于确定待保护的原始代码;
逻辑操作确定子单元,用于确定原始代码中的待保护逻辑操作;
函数转换子单元,用于将待保护逻辑操作转换为函数,作为待加密函数;
语言转换子单元,用于对待加密函数进行编程语言转换,得到待加密函数代码;
代码获取子单元,用于将待加密函数代码作为待加密代码。
可选地,语言转换子单元具体可以为:第一语言转换子单元,第一语言转换子单元用于:根据Rust或C++编程语言将待加密函数进行编程语言转换。
可选地,当待加密代码为vue项目代码时,代码编译单元具体可以为第一编译单元,第一编译单元用于:调用Emscripten编译器将待加密代码编译为wasm二进制文件。
本实施例提供一种代码加密设备,主要包括:存储器以及处理器。
其中,存储器用于存储程序;
处理器用于执行程序时实现如上述实施例介绍的代码加密方法的步骤,具体可参照上述代码加密方法的介绍。
请参考图4,为本实施例提供的代码加密设备的结构示意图,该代码加密设备可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上处理器(centralprocessing units,CPU)322(例如,一个或一个以上处理器)和存储器332,存储器332存储有一个或一个以上的计算机应用程序342或数据344。其中,存储器332可以是短暂存储或持久存储。存储在存储器332的程序可以包括一个或一个以上模块(图示没标出),每个模块可以包括对数据处理设备中的一系列指令操作。更进一步地,中央处理器322可以设置为与存储器332通信,在代码加密设备301上执行存储介质330中的一系列指令操作。
代码加密设备301还可以包括一个或一个以上电源326,一个或一个以上有线或无线网络接口350,一个或一个以上输入输出接口358,和/或,一个或一个以上操作系统341,例如Windows ServerTM,Mac OS XTM,UnixTM,LinuxTM,FreeBSDTM等等。
上面图1所描述的代码加密方法中的步骤可以由本实施例介绍的代码加密设备的结构实现。
本实施例公开一种可读存储介质,其上存储有程序,程序被处理器执行时实现如上述实施例介绍的代码加密方法的步骤,具体可参照上述实施例中对代码加密方法的介绍。
该可读存储介质具体可以为U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可存储程序代码的可读存储介质。
说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
以上对本申请所提供的代码加密方法、装置、设备及可读存储介质进行了详细介绍。本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以对本申请进行若干改进和修饰,这些改进和修饰也落入本申请权利要求的保护范围内。
- 一种代码加密方法及相关组件
- 一种基于AES算法的信息加密方法、系统及相关组件