CN116910712A - 代码保护方法、系统、电子设备及存储介质 - Google Patents
代码保护方法、系统、电子设备及存储介质 Download PDFInfo
- Publication number
- CN116910712A CN116910712A CN202310865954.8A CN202310865954A CN116910712A CN 116910712 A CN116910712 A CN 116910712A CN 202310865954 A CN202310865954 A CN 202310865954A CN 116910712 A CN116910712 A CN 116910712A
- Authority
- CN
- China
- Prior art keywords
- source code
- called
- code
- source
- codes
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 101
- 230000007246 mechanism Effects 0.000 claims abstract description 34
- 238000006243 chemical reaction Methods 0.000 claims description 26
- 230000008569 process Effects 0.000 claims description 17
- 238000004590 computer program Methods 0.000 claims description 12
- 230000006870 function Effects 0.000 description 12
- 238000013507 mapping Methods 0.000 description 11
- 238000010586 diagram Methods 0.000 description 6
- 238000012795 verification Methods 0.000 description 6
- 238000004891 communication Methods 0.000 description 5
- 238000011161 development Methods 0.000 description 4
- 238000012986 modification Methods 0.000 description 4
- 230000004048 modification Effects 0.000 description 4
- 238000012360 testing method Methods 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 2
- 238000013459 approach Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/10—Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
- G06F21/12—Protecting executable software
- G06F21/14—Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Multimedia (AREA)
- Technology Law (AREA)
- Computer Hardware Design (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Storage Device Security (AREA)
Abstract
本发明提供一种代码保护方法、系统、电子设备及存储介质,涉及计算机技术领域,该方法包括:接收调用对象发送的调用指令,根据所述调用指令,获取待调用源代码的类名;根据所述类名,在数据库中获取所述待调用源代码的字节码;采用所述待调用源代码的编程语言类型对应的反射机制加载所述字节码,得到所述待调用源代码;执行所述待调用源代码,并将执行结果发送至所述调用对象。本发明实现一方面将源代码存储在数据库中,恶意攻击者无法直接访问和修改源代码,另一方面,由于源代码被编译为字节码,并使用反射机制加载和执行,恶意攻击者也无法进行逆向工程和反编译,实现了对源代码的有效安全保护。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种代码保护方法、系统、电子设备及存储介质。
背景技术
随着计算机技术的不断发展,软件开发已经成为计算机开发的必要部分。在软件开发过程中,源代码是最重要的资产之一,因为它包含了软件的核心逻辑和算法。因此,源代码的保护对于软件开发来说至关重要。
目前,由于一些反编译工具的出现,使得软件代码容易被反向编译,导致其源代码被攻击者掌恶意攻击者进行逆向工程和反编译,使得源代码的安全性较差。
因此,如何对代码进行有效的保护,是目前业界亟待解决的问题。
发明内容
本发明提供一种代码保护方法、系统、电子设备及存储介质,用以解决现有技术中源代码容易被攻击者掌恶意攻击者进行逆向工程和反编译,使得源代码的安全性较差的缺陷,实现对源代码机进行保护,以提高源代码的安全性。
本发明提供一种代码保护方法,包括:
接收调用对象发送的调用指令,根据所述调用指令,获取待调用源代码的类名;
根据所述类名,在数据库中获取所述待调用源代码的字节码;
采用所述待调用源代码的编程语言类型对应的反射机制加载所述字节码,得到所述待调用源代码;
执行所述待调用源代码,并将执行结果发送至所述调用对象。
根据本发明提供的一种代码保护方法,在所述根据所述类名,在数据库中获取所述待调用源代码的字节码之前,所述方法还包括:
基于目标转换算法,对各源代码进行数据转换;
采用目标编译算法,对转换后的各源代码进行编译,得到各源代码的字节码;
建立各源代码的字节码与各源代码的类名之间的关联关系,得到第一关联关系;
将所述第一关联关系存储在所述数据库中。
根据本发明提供的一种代码保护方法,在所述采用目标编译算法,对转换后的各源代码进行编译,得到各源代码的字节码之后,所述方法还包括:
对各源代码的字节码进行加密,得到加密字节码;
建立各源代码的所述加密字节码与各源代码的类名之间的关联关系,得到第二关联关系;
将所述第二关联关系存储在所述数据库中。
根据本发明提供的一种代码保护方法,所述根据所述类名,在数据库中获取所述待调用源代码的字节码,包括:
根据所述类名以及所述第一关联关系,在所述数据库中获取所述待调用源代码的字节码;或者,
根据所述类名以及所述第二关联关系,在所述数据库中获取所述待调用源代码的加密字节码;
对所述待调用源代码的加密字节码进行解密,得到所述待调用源代码的字节码。
根据本发明提供的一种代码保护方法,所述采用所述待调用源代码的编程语言类型对应的反射机制加载所述字节码,得到所述待调用源代码,包括:
根据所述目标转换算法以及所述目标编译算法,采用所述反射机制对所述待调用源代码的字节码进行反编译,得到所述待调用源代码。
根据本发明提供的一种代码保护方法,在所述基于目标转换算法,对各源代码进行数据转换之前,所述方法还包括:
根据所述数据库的类型,获取目标算法库;
在所述目标算法库中加载所述目标编译算法和所述目标转换算法。
根据本发明提供的一种代码保护方法,所述根据所述类名,在数据库中获取所述待调用源代码的字节码,包括:
根据所述调用指令,获取所述调用对象的调用权限信息;
在根据所述调用权限信息确定所述调用对象具备调用所述待调用源代码的权限的情况下,根据所述类名,在所述数据库中获取所述待调用源代码的字节码。
本发明还提供一种代码保护系统,包括:
接收模块,用于接收调用对象发送的调用指令,根据所述调用指令,获取待调用源代码的类名;
获取模块,用于根据所述类名,在数据库中获取所述待调用源代码的字节码;
编译模块,用于采用所述待调用源代码的编程语言类型对应的反射机制加载所述字节码,得到所述待调用源代码;
执行模块,用于执行所述待调用源代码,并将执行结果发送至所述调用对象。
本发明还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述任一种所述代码保护方法。
本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如上述任一种所述代码保护方法。
本发明还提供一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现如上述任一种所述代码保护方法。
本发明提供的代码保护方法、系统、电子设备及存储介质,通过根据调用指令,实时获取待调用源代码的类名,并根据类名在数据库中获取所述待调用源代码的字节码,以及采用反射机制动态加载字节码获取待调用源代码和执行待调用源代码,一方面将源代码存储在数据库中,恶意攻击者无法直接访问和修改源代码,另一方面,由于源代码被编译为字节码,并使用反射机制加载和执行,恶意攻击者也无法进行逆向工程和反编译,实现了对源代码的有效安全保护。
附图说明
为了更清楚地说明本发明或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明提供的代码保护方法的流程示意图之一;
图2是本发明提供的计算机设备的结构示意图;
图3是本发明提供的代码保护方法的流程示意图之二;
图4是本发明提供的代码保护系统的结构示意图;
图5是本发明提供的电子设备的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明中的附图,对本发明中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
需要说明的是,本申请中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
随着计算机技术的不断发展,软件开发已经成为计算机开发的必要部分。在软件开发过程中,源代码是最重要的资产之一,因为它包含了软件的核心逻辑和算法。因此,源代码的保护对于软件开发来说至关重要。
目前,常见的源代码保护方法包括加密、混淆和签名等。加密是指将源代码转换为一种难以理解的形式,以防止未经授权的访问和修改。混淆是指对源代码进行变形,使其难以理解,以防止反编译和逆向工程。签名是指对源代码进行数字签名,以确保其完整性和真实性。
但是,由于反编译工具的出现,这些方法仍存在一定的局限性。例如,加密和混淆可以防止未经授权的访问和修改,但无法防止恶意攻击者进行逆向工程和反编译,签名可以确保源代码的完整性和真实性,但无法防止源代码的泄露和盗用,因此,源代码的安全性仍然较差。
综上,目前业界亟需一种更加高效和安全的源代码保护技术,以确保源代码的安全性,由此保护软件开发公司和软件作者的代码保护权。
针对上述问题,本实施例提供一种代码保护方法、系统、电子设备及存储介质,该方法通过源代码存储到数据库中,并使用存储过程动态加载和执行源代码,一方面由于源代码存储在数据库中,恶意攻击者无法直接访问和修改源代码。另一方面,由于源代码被编译为字节码,并使用反射机制加载和执行,恶意攻击者也无法进行逆向工程和反编译,实现了对源代码的有效安全保护。
下面结合图1-图3描述本发明的代码保护方法。
图1为本申请实施例提供的代码保护方法的流程示意图之一,该方法可以应用于JAVA编程语言下的源代码保护或者PYTHON编程语言下的源代码保护等,本实施对此不作具体地限定。以下以JAVA编程语言下的源代码保护展开详细说明,对于其它编程语言下的源代码保护,本实施例提供的方案同样适用。
在一些实施例中,本实施例中的代码保护方法的执行主体可以是代码保护系统,该系统可以是电子设备、电子设备中的部件、集成电路、或芯片。该电子设备可以是移动电子设备,也可以为非移动电子设备。示例性的,移动电子设备可以为手机、平板电脑、笔记本电脑、掌上电脑、车载电子设备、可穿戴设备、超级移动个人计算机(ultra-mobilepersonal computer,UMPC)、上网本或者个人数字助理(personal digital assistant,PDA)等,非移动电子设备可以为服务器、网络附属存储器(Network Attached Storage,NAS)、个人计算机(personal computer,PC)、电视机(television,TV)、柜员机或者自助机等,本发明不作具体限定。
图2为本申请实施例提供的计算机设备的结构示意图;可选地,本实施例提供的代码保护方法可以应用于如图2所示的包含内存、处理器以及带外控制器的计算机设备。如图2所示,内存与处理器通信连接、处理器与带外控制器通信连接;内存用于为计算机设备提供存储空间,如存储用于执行代码保护方法的程序等;处理器包括OS管理单元以及处理器固件,OS(Operating System,操作系统)管理单元用于对主管并控制计算机操作、运用和运行硬件、软件资源和提供公共服务来组织用户交互等;处理器用于通过OS管理单元以及处理器固件从内存加载代码保护方法的程序,并执行代码保护方法的程序,以实现代码保护;带外控制器包括带外管理模块,如BMC(Baseboard Management Controller,基板管理控制器),用于对计算机板卡进行管理。
如图1所示,代码保护方法包括如下步骤:
步骤101,接收调用对象发送的调用指令,根据所述调用指令,获取待调用源代码的类名;
所称的调用对象可以是所需调用源代码的对象,如用户终端、服务器等设备。
其中,调用指令用于请求进行源代码调用,其在需要进行源代码调用时发出。此处的调用指令可以是用户在用户终端输入的用户输入,也可以经由其他控制器或者用户终端其他设备在某种条件下产生的信息,如定时触发的调用指令。所称的用户输入,可以是通过命令行界面输入、图形化界面输入、触摸输入、下拉选择输入、语音输入、手势输入、视觉输入、脑机输入等输入的信息等,本实施例对此不做具体地限定。
命令行界面(Command Line Interface,CLI),是在图形用户界面得到普及之前使用最为广泛的用户界面,它通常不支持鼠标,用户通过键盘输入指令,计算机接收到指令后,予以执行。图形化界面(Graphical User Interface,GUI),又称图形用户接口,是指采用图形方式显示的计算机操作用户界面。
所称的源代码(也称源程序)是指未编译的按照一定的程序设计语言规范书写的文本文件,是一系列人类可读的计算机语言指令。
可选地,在接收到调用对象发送的调用指令的情况下,可以是直接根据调用指令,获取待调用源代码的类名;也可以是对调用指令进行验证,如权限验证或者正确性验证之后,在调用指令通过验证的情况下,再获取待调用源代码的类名,以确保源代码的安全性和有效性。
此处,待调用源代码的类名可以是预先与调用指令的标识之间建立有映射关系;或者待调用源代码的类名以指令信息的形式携带在调用指令中,本实施例对此不作具体地限定。
获取待调用源代码的类名的方式包括:对于待调用源代码的类名预先与调用指令的标识之间建立有映射关系的情况下,可以是通过调用指令的标识,以及调用指令的标识与源代码的类名之间的映射关系进行查找获取的;对于待调用源代码的类名以指令信息的形式携带在调用指令中的情况下,可以从调用指令中解析出待调用源代码的类名;获取待调用源代码的类名的方式具体根据待调用源代码的类名与调用指令之间的关系进行适应性确定,以提高代码保护方法的适用性。
步骤102,根据所述类名,在数据库中获取所述待调用源代码的字节码;
此处的数据库可以是MySQL数据库和Oracle数据库等,本实施例对此不作具体地限定。下文以MySQL数据库为例,对本实施例提供的代码保护方法展开描述。
其中,数据库中预先建立有各源代码的字节码与各源代码的类名之间的直接的关联关系或者间接的关联关系;例如,各源代码的字节码与代码标识之间建立有直接的关联关系,代码标识与各源代码的类名之间建立有直接的关联关系,由此建立起各源代码的字节码-代码标识-各源代码的类名之间的映射关系,即代码标识可以作为各源代码的字节码与类名关联的中间变量,以实现各源代码的字节码与类名之间的关联性。
需要说明的是,数据库在接收到更新指令的情况下,也可根据更新指令获取的待更新源代码,实时更新数据库,由此丰富数据库,以最大限定满足各种源代码的保护需求,提高代码保护性能。所称的更新至少包括增加、删除、修改源代码的关联信息。
可选地,在获取到类名之后,可以根据类名与字节码之间直接或间接的关联关系,在数据库中查找获取相应的字节码。
此处的字节码是采用一种或多种利用编译程序,对待调用源代码进行编码得到。该字节码可以是一种包含执行程序,由一序列代码/数据对组成的二进制文件,为一种中间码。
步骤103,采用所述待调用源代码的编程语言类型对应的反射机制加载所述字节码,得到所述待调用源代码;
所称的,反射机制是指在程序的运行状态中,可以构造任意一个类的对象,可以了解任意一个对象所属的类,可以了解任意一个类的成员变量和方法,可以调用任意一个对象的属性和方法。这种动态获取程序信息以及动态调用对象的功能称为反射机制。
需要说明的是,本实施例所采用的反射机制的类型与待调用源代码的编程语言类型相匹配,如待调用源代码为JAVA源代码的情况下,对应的反射机制为JAVA的反射机制。
可选地,在代码调用过程中,可以采用待调用源代码的编程语言类型对应的反射机制动态加载字节码,以反编译得到相应的待调用源代码。
步骤104,执行所述待调用源代码,并将执行结果发送至所述调用对象。
可选地,在获取到待调用源代码之后,可以执行待调用源代码中的各种函数如主函数(也即main函数),以实现特定功能,并将代码调用过程中的执行结果实时发送至调用对象,以便调用对象实时获取待调用源代码的执行结果。
此处的执行结果,包括但不限于执行状态和输出结果,本实施例对此不作具体地限定。所称的执行状态包括执行成功和执行失败。
本实施例提供的代码保护方法,通过根据调用指令,实时获取待调用源代码的类名,并根据类名在数据库中获取所述待调用源代码的字节码,以及采用反射机制动态加载字节码获取待调用源代码和执行待调用源代码,一方面将源代码存储在数据库中,恶意攻击者无法直接访问和修改源代码,另一方面,由于源代码被编译为字节码,并使用反射机制加载和执行,恶意攻击者也无法进行逆向工程和反编译,实现了对源代码的有效安全保护。
在一些实施例中,在所述根据所述类名,在数据库中获取所述待调用源代码的字节码之前,所述方法还包括:
基于目标转换算法,对各源代码进行数据转换;
采用目标编译算法,对转换后的各源代码进行编译,得到各源代码的字节码;
建立各源代码的字节码与各源代码的类名之间的关联关系,得到第一关联关系;
将所述第一关联关系存储在所述数据库中。
可选地,目标转换算法和目标编译算法可以是预先编写的得到;也可以是在与数据库的类型对应的算法库中加载获取的。
在一些实施例中,在所述基于目标转换算法,对各源代码进行数据转换之前,所述方法还包括:
根据所述数据库的类型,获取目标算法库;
在所述目标算法库中加载所述目标编译算法和所述目标转换算法。
可选地,在数据库为MySQL数据库的情况下,目标转换算法可以是在MySQL算法库中加载的MySQL转换算法,以将各源代码转换为目标MySQL语句,并将目标MySQL语句存储在数据库中,由于恶意攻击者无法熟知源代码的存储规则,导致其无法直接访问或者修改源代码,由此增加源代码的安全性。目标编译算法可以是在MySQL算法库中加载的MySQL编译算法,如CAST()函数,该函数用于将某种数据类型的表达式显式转换为另一种数据类型。
其中,CAST()函数包括用AS关键词分割的源数据和目标数据类型,也即AS之前的参数为所需处理的源数据,AS之后的参数为所需转换的目标数据类型。
进一步,为了进一步增加源代码的安全性,还可以在数据库中创建一个存储过程,该存储过程中接收目标参数,该目标参数可以是各源代码的类名。在存储过程中,使用查询语句从数据库中获取该类名对应的源代码,并将其编译为字节码。
并且,建立各源代码的字节码与各源代码的类名之间的直接关联关系,得到第一关联关系,将第一关联关系存储在数据库中。
示例性地,对于源代码为JAVA类测试代码,其具体代码如表1所示。
表1Java类测试代码的源代码
图3为本申请实施例提供的代码保护方法的流程示意图之二;如图3所示,在对于源代码为Java类测试代码,需要执行步骤301到步骤304实现代码保护方法。
表2源代码转换代码
步骤301,执行MySQL转换算法,将该源代码转换为目标MySQL语句,并存储在MySQL数据库中,具体代码如表2所示。
步骤302,在MySQL数据库中创建一个存储过程,该存储过程接受一个参数,该参数为源代码的类名;
步骤303,在存储过程中,使用动态SQL语句从MySQL数据库中获取指定类名的源代码,并将其编译为字节码,以对源代码进行存储。
表3源代码存储代码
步骤304,在代码调用过程中,使用Java反射机制加载字节码,并通过执行待调用源代码,如“execute_java('Test')”,即可执行待调用源代码中的各种函数,并输出执行结果返回给调用者,如输出执行结果为“Hello World!”。
本实施例提供的方法,在数据库中对源代码进行数据转换和编译,由于恶意攻击者无法熟知源代码的存储规则,导致其无法直接访问或者修改源代码,提高逆向工程难度,由此增加源代码的安全性。
在一些实施例中,在所述采用目标编译算法,对转换后的各源代码进行编译,得到各源代码的字节码之后,所述方法还包括:
对各源代码的字节码进行加密,得到加密字节码;
建立各源代码的所述加密字节码与各源代码的类名之间的关联关系,得到第二关联关系;
将所述第二关联关系存储在所述数据库中。
可选地,为了进一步保护源代码的安全性,还可以对编译得到的各源代码的字节码进行加密,形成加密字节码;并建立加密字节码与各源代码的类名之间的关联关系,得到第二关联关系,将第二关联关系存储在数据库中。
本实施例提供的方法,在数据库中对源代码进行数据转换、编译以及加密,可以最大限度地限制恶意攻击者直接访问或者修改源代码,由此进一步增加源代码的安全性。
在一些实施例中,所述根据所述类名,在数据库中获取所述待调用源代码的字节码,包括:
根据所述类名以及所述第一关联关系,在所述数据库中获取所述待调用源代码的字节码;或者,
根据所述类名以及所述第二关联关系,在所述数据库中获取所述待调用源代码的加密字节码;
对所述待调用源代码的加密字节码进行解密,得到所述待调用源代码的字节码。
可选地,在数据库中预先建立有第一关联关系的情况下,直接根据类名以及第一关联关系,在数据库中查找待调用源代码的字节码;在数据库中预先建立有第二关联关系的情况下,根据类名以及第二关联关系,先获取对应的加密字节码,接着对加密字节码进行解密之后,得到待调用源代码的字节码,由此实现通过多种映射关系,即可高效精准地查找到相应的待调用源代码的字节码,进而提高代码保护的适应性。
在一些实施例中,所述采用所述待调用源代码的编程语言类型对应的反射机制加载所述字节码,得到所述待调用源代码,包括:
根据所述目标转换算法以及所述目标编译算法,采用所述反射机制对所述待调用源代码的字节码进行反编译,得到所述待调用源代码。
可选地,在采用反射机制对字节码进行反编译的情况下,可以根据目标转换算法以及目标编译算法,对待调用源代码的字节码进行反编译,以得到完整有效地编译出待调用源代码,进而实现在保护源代码安全性的同时,确保源代码调用的准确性和有效性。
在一些实施例中,所述根据所述类名,在数据库中获取所述待调用源代码的字节码,包括:
根据所述调用指令,获取所述调用对象的调用权限信息;
在根据所述调用权限信息确定所述调用对象具备调用所述待调用源代码的权限的情况下,根据所述类名,在所述数据库中获取所述待调用源代码的字节码。
此处,调用权限信息可以是预先与调用指令的标识之间建立有映射关系;或者调用权限信息以指令信息的形式携带在调用指令中,本实施例对此不作具体地限定。
可选地,获取调用权限信息的方式包括:对于调用权限信息预先与调用指令的标识之间建立有映射关系的情况下,可以是通过调用指令的标识,以及调用指令的标识与调用权限信息之间的映射关系进行查找获取的;对于调用权限信息以指令信息的形式携带在调用指令中的情况下,可以从调用指令中解析出调用权限信息;获取调用权限信息的方式具体根据调用权限信息与调用指令之间的关系进行适应性确定,本实施例对此不作具体地限定。
此处的调用权限信息用于表征调用对象是否具备调用待调用源代码的权限。
可选地,在获取到调用权限信息之后,可以根据调用权限信息确定调用对象是否具备调用待调用源代码的权限,在确定调用对象具备调用待调用源代码的权限的情况下,根据类名,在数据库中获取待调用源代码的字节码。
本实施例提供的方法,通过在调用源代码之前对目标对象的访问权限进行验证,以在确定调用对象具备调用待调用源代码的权限的情况下,才执行代码调用过程,可以有效防止源代码的泄露和盗用,以及防止逆向工程和反编译,进一步提高源代码的安全性。
下面对本发明提供的代码保护系统进行描述,下文描述的代码保护系统与上文描述的代码保护方法可相互对应参照。
图4为本申请实施例提供的代码保护系统的结构示意图,如图4所示,该系统包括:
接收模块401用于接收调用对象发送的调用指令,根据所述调用指令,获取待调用源代码的类名;
可选地,在接收到调用对象发送的调用指令的情况下,可以是直接根据调用指令,获取待调用源代码的类名;也可以是对调用指令进行验证,如权限验证或者正确性验证之后,在调用指令通过验证的情况下,再获取待调用源代码的类名,以确保源代码的安全性和有效性。
此处,待调用源代码的类名可以是预先与调用指令的标识之间建立有映射关系;或者待调用源代码的类名以指令信息的形式携带在调用指令中,本实施例对此不作具体地限定。
获取待调用源代码的类名的方式包括:对于待调用源代码的类名预先与调用指令的标识之间建立有映射关系的情况下,可以是通过调用指令的标识,以及调用指令的标识与源代码的类名之间的映射关系进行查找获取的;对于待调用源代码的类名以指令信息的形式携带在调用指令中的情况下,可以从调用指令中解析出待调用源代码的类名;获取待调用源代码的类名的方式具体根据待调用源代码的类名与调用指令之间的关系进行适应性确定,本实施例对此不作具体地限定。
获取模块402用于根据所述类名,在数据库中获取所述待调用源代码的字节码;
可选地,在获取到类名之后,可以根据类名与字节码之间直接或间接的关联关系,在数据库中查找获取相应的字节码。
此处的字节码是采用一种或多种利用编译程序,对待调用源代码进行编码得到。该字节码可以是一种包含执行程序,由一序列代码/数据对组成的二进制文件,为一种中间码。
编译模块403用于采用所述待调用源代码的编程语言类型对应的反射机制加载所述字节码,得到所述待调用源代码;
可选地,在代码调用过程中,可以采用待调用源代码的编程语言类型对应的反射机制动态加载字节码,以反编译得到相应的待调用源代码。
执行模块404用于执行所述待调用源代码,并将执行结果发送至所述调用对象。
可选地,在获取到待调用源代码之后,可以执行待调用源代码中的各种函数如主函数(也即main函数),以实现特定功能,并将代码调用过程中的执行结果实时发送至调用对象,以便调用对象实时获取待调用源代码的执行结果。
此处的执行结果,包括但不限于执行状态和输出结果,本实施例对此不作具体地限定。所称的执行状态包括执行成功和执行失败。
本实施例提供的代码保护系统,通过根据调用指令,实时获取待调用源代码的类名,并根据类名在数据库中获取所述待调用源代码的字节码,以及采用反射机制动态加载字节码获取待调用源代码和执行待调用源代码,一方面将源代码存储在数据库中,恶意攻击者无法直接访问和修改源代码,另一方面,由于源代码被编译为字节码,并使用反射机制加载和执行,恶意攻击者也无法进行逆向工程和反编译,实现了对源代码的有效安全保护。
在一些实施例中,该系统还包括存储模块,用于:
基于目标转换算法,对各源代码进行数据转换;
采用目标编译算法,对转换后的各源代码进行编译,得到各源代码的字节码;
建立各源代码的字节码与各源代码的类名之间的关联关系,得到第一关联关系;
将所述第一关联关系存储在所述数据库中。
在一些实施例中,该系统的存储模块,还用于:
对各源代码的字节码进行加密,得到加密字节码;
建立各源代码的所述加密字节码与各源代码的类名之间的关联关系,得到第二关联关系;
将所述第二关联关系存储在所述数据库中。
在一些实施例中,该系统的获取模块,具体用于:
根据所述类名以及所述第一关联关系,在所述数据库中获取所述待调用源代码的字节码;或者,
根据所述类名以及所述第二关联关系,在所述数据库中获取所述待调用源代码的加密字节码;
对所述待调用源代码的加密字节码进行解密,得到所述待调用源代码的字节码。
在一些实施例中,该系统的编译模块,具体用于:
根据所述目标转换算法以及所述目标编译算法,采用所述反射机制对所述待调用源代码的字节码进行反编译,得到所述待调用源代码。
在一些实施例中,该系统的存储模块,还用于:
根据所述数据库的类型,获取目标算法库;
在所述目标算法库中加载所述目标编译算法和所述目标转换算法。
在一些实施例中,该系统的获取模块,还用于:
根据所述调用指令,获取所述调用对象的调用权限信息;
在根据所述调用权限信息确定所述调用对象具备调用所述待调用源代码的权限的情况下,根据所述类名,在所述数据库中获取所述待调用源代码的字节码。
图5示例了一种电子设备的实体结构示意图,如图5所示,该电子设备可以包括:处理器(processor)501、通信接口(Communications Interface)502、存储器(memory)503和通信总线504,其中,处理器501,通信接口502,存储器503通过通信总线504完成相互间的通信。处理器501可以调用存储器503中的逻辑指令,以执行代码保护方法,该方法包括:接收调用对象发送的调用指令,根据所述调用指令,获取待调用源代码的类名;根据所述类名,在数据库中获取所述待调用源代码的字节码;采用所述待调用源代码的编程语言类型对应的反射机制加载所述字节码,得到所述待调用源代码;执行所述待调用源代码,并将执行结果发送至所述调用对象。
此外,上述的存储器503中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
另一方面,本发明还提供一种计算机程序产品,所述计算机程序产品包括计算机程序,计算机程序可存储在非暂态计算机可读存储介质上,所述计算机程序被处理器执行时,计算机能够执行上述各方法所提供的代码保护方法,该方法包括:接收调用对象发送的调用指令,根据所述调用指令,获取待调用源代码的类名;根据所述类名,在数据库中获取所述待调用源代码的字节码;采用所述待调用源代码的编程语言类型对应的反射机制加载所述字节码,得到所述待调用源代码;执行所述待调用源代码,并将执行结果发送至所述调用对象。
又一方面,本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各方法提供的代码保护方法,该方法包括:接收调用对象发送的调用指令,根据所述调用指令,获取待调用源代码的类名;根据所述类名,在数据库中获取所述待调用源代码的字节码;采用所述待调用源代码的编程语言类型对应的反射机制加载所述字节码,得到所述待调用源代码;执行所述待调用源代码,并将执行结果发送至所述调用对象。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (10)
1.一种代码保护方法,其特征在于,包括:
接收调用对象发送的调用指令,根据所述调用指令,获取待调用源代码的类名;
根据所述类名,在数据库中获取所述待调用源代码的字节码;
采用所述待调用源代码的编程语言类型对应的反射机制加载所述字节码,得到所述待调用源代码;
执行所述待调用源代码,并将执行结果发送至所述调用对象。
2.根据权利要求1所述的代码保护方法,其特征在于,在所述根据所述类名,在数据库中获取所述待调用源代码的字节码之前,所述方法还包括:
基于目标转换算法,对各源代码进行数据转换;
采用目标编译算法,对转换后的各源代码进行编译,得到各源代码的字节码;
建立各源代码的字节码与各源代码的类名之间的关联关系,得到第一关联关系;
将所述第一关联关系存储在所述数据库中。
3.根据权利要求2所述的代码保护方法,其特征在于,在所述采用目标编译算法,对转换后的各源代码进行编译,得到各源代码的字节码之后,所述方法还包括:
对各源代码的字节码进行加密,得到加密字节码;
建立各源代码的所述加密字节码与各源代码的类名之间的关联关系,得到第二关联关系;
将所述第二关联关系存储在所述数据库中。
4.根据权利要求3所述的代码保护方法,其特征在于,所述根据所述类名,在数据库中获取所述待调用源代码的字节码,包括:
根据所述类名以及所述第一关联关系,在所述数据库中获取所述待调用源代码的字节码;或者,
根据所述类名以及所述第二关联关系,在所述数据库中获取所述待调用源代码的加密字节码;
对所述待调用源代码的加密字节码进行解密,得到所述待调用源代码的字节码。
5.根据权利要求2所述的代码保护方法,其特征在于,所述采用所述待调用源代码的编程语言类型对应的反射机制加载所述字节码,得到所述待调用源代码,包括:
根据所述目标转换算法以及所述目标编译算法,采用所述反射机制对所述待调用源代码的字节码进行反编译,得到所述待调用源代码。
6.根据权利要求2所述的代码保护方法,其特征在于,在所述基于目标转换算法,对各源代码进行数据转换之前,所述方法还包括:
根据所述数据库的类型,获取目标算法库;
在所述目标算法库中加载所述目标编译算法和所述目标转换算法。
7.根据权利要求1-6任一项所述的代码保护方法,其特征在于,所述根据所述类名,在数据库中获取所述待调用源代码的字节码,包括:
根据所述调用指令,获取所述调用对象的调用权限信息;
在根据所述调用权限信息确定所述调用对象具备调用所述待调用源代码的权限的情况下,根据所述类名,在所述数据库中获取所述待调用源代码的字节码。
8.一种代码保护系统,其特征在于,包括:
接收模块,用于接收调用对象发送的调用指令,根据所述调用指令,获取待调用源代码的类名;
获取模块,用于根据所述类名,在数据库中获取所述待调用源代码的字节码;
编译模块,用于采用所述待调用源代码的编程语言类型对应的反射机制加载所述字节码,得到所述待调用源代码;
执行模块,用于执行所述待调用源代码,并将执行结果发送至所述调用对象。
9.一种电子设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至7任一项所述代码保护方法。
10.一种非暂态计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至7任一项所述代码保护方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310865954.8A CN116910712A (zh) | 2023-07-14 | 2023-07-14 | 代码保护方法、系统、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310865954.8A CN116910712A (zh) | 2023-07-14 | 2023-07-14 | 代码保护方法、系统、电子设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116910712A true CN116910712A (zh) | 2023-10-20 |
Family
ID=88350538
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310865954.8A Pending CN116910712A (zh) | 2023-07-14 | 2023-07-14 | 代码保护方法、系统、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116910712A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117828555A (zh) * | 2024-03-05 | 2024-04-05 | 山东浪潮科学研究院有限公司 | 一种低成本Java源代码保护方法及装置 |
-
2023
- 2023-07-14 CN CN202310865954.8A patent/CN116910712A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117828555A (zh) * | 2024-03-05 | 2024-04-05 | 山东浪潮科学研究院有限公司 | 一种低成本Java源代码保护方法及装置 |
CN117828555B (zh) * | 2024-03-05 | 2024-05-28 | 山东浪潮科学研究院有限公司 | 一种低成本Java源代码保护方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP6227772B2 (ja) | 動的ライブラリを保護する方法及び装置 | |
KR101471589B1 (ko) | 공통중간언어 기반 프로그램을 위한 보안 제공 방법 | |
US20170116410A1 (en) | Software protection | |
CN108595989A (zh) | 一种iOS下移动APP安全防护系统及方法 | |
CN101199159A (zh) | 安全引导 | |
CN109992987B (zh) | 基于Nginx的脚本文件保护方法、装置及终端设备 | |
US20180129794A1 (en) | Method for Protecting Dex File from Decompilation in Android System | |
CN104463002A (zh) | 一种加固apk的方法和装置以及apk加固客户端和服务器 | |
CN111191195A (zh) | 一种用于保护apk的方法和装置 | |
CN111475543A (zh) | 一种模糊搜索方法、装置、计算机设备及存储介质 | |
CN112231702A (zh) | 应用保护方法、装置、设备及介质 | |
CN116910712A (zh) | 代码保护方法、系统、电子设备及存储介质 | |
JP4664055B2 (ja) | プログラム分割装置、プログラム実行装置、プログラム分割方法及びプログラム実行方法 | |
CN112966227A (zh) | 代码加密解密方法和装置、存储介质 | |
CN110245464B (zh) | 保护文件的方法和装置 | |
US7779269B2 (en) | Technique for preventing illegal invocation of software programs | |
US11138319B2 (en) | Light-weight context tracking and repair for preventing integrity and confidentiality violations | |
Lee et al. | Classification and analysis of security techniques for the user terminal area in the internet banking service | |
CN110298146B (zh) | 一种应用程序的处理、运行方法及装置 | |
CN113420313A (zh) | 程序安全运行、加密方法及其装置、设备、介质 | |
DONG et al. | Sesoa: Security enhancement system with online authentication for android apk | |
US20190163885A1 (en) | Apparatus and method of providing security and apparatus and method of executing security for common intermediate language | |
Jeon et al. | Automated multi-layered bytecode generation for preventing sensitive information leaks from android applications | |
KR102432775B1 (ko) | 개인정보보호를 지원하는 스마트 컨트랙트 프로그래밍 시스템 및 방법 | |
CN113139197B (zh) | 一种项目验签方法、装置和电子设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |