CN110717150A - 代码保护方法、装置、保护设备及可读存储介质 - Google Patents
代码保护方法、装置、保护设备及可读存储介质 Download PDFInfo
- Publication number
- CN110717150A CN110717150A CN201910953227.0A CN201910953227A CN110717150A CN 110717150 A CN110717150 A CN 110717150A CN 201910953227 A CN201910953227 A CN 201910953227A CN 110717150 A CN110717150 A CN 110717150A
- Authority
- CN
- China
- Prior art keywords
- instruction
- function
- functional
- indirect
- call instruction
- 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 46
- 238000004590 computer program Methods 0.000 claims description 5
- 230000001681 protective effect Effects 0.000 claims 1
- 230000006870 function Effects 0.000 description 176
- 230000008569 process Effects 0.000 description 8
- 238000010586 diagram Methods 0.000 description 5
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 238000004891 communication Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 235000019800 disodium phosphate Nutrition 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Images
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
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
技术领域
本发明涉及计算机技术领域,具体而言,涉及一种代码保护方法、装置、保护设备及可读存储介质。
背景技术
随着计算机技术的不断发展,可以通过不同的代码实现不同的功能。
相关技术中,终端可以将Java语言的代码进行编译,得到用于JVM(Java VirtualMachine,Java虚拟机)运行的字节码,再通过终端运行JVM,从而可以通过JVM实现字节码对应的功能。
但是,相关技术中,JVM的标准是公开的,则可以根据公开的标准对字节码进行反编译,从而得到Java语言的代码,造成代码泄露的问题。
发明内容
本发明的目的在于,针对上述现有技术中的不足,提供一种代码保护方法、装置、保护设备及可读存储介质,以解决代码容易泄露的问题。
为实现上述目的,本发明实施例采用的技术方案如下:
第一方面,本发明实施例提供了一种代码保护方法,所述方法包括:
获取待保护字节码中的多个功能指令;
将每个所述功能指令替换为间接调用指令,所述间接调用指令的引导函数用于调用所述功能指令。
可选的,所述将每个所述功能指令替换为间接调用指令,包括:
若所述功能指令为函数调用指令,将所述功能指令替换为第一间接调用指令,所述第一间接调用指令用于调用所述功能指令;
建立所述第一间接调用指令和所述功能指令之间的对应关系。
可选的,所述将每个所述功能指令替换为间接调用指令,包括:
若所述功能指令为非函数调用指令,生成与所述功能指令相对应的等价函数,所述等价函数的功能与所述功能指令的功能相同;
将所述功能指令替换为第二间接调用指令,所述第二间接调用指令用于调用所述等价函数。
可选的,所述将所述功能指令替换为第二间接调用指令,包括:
生成调用所述等价函数的等价调用指令;
将所述等价调用指令替换为所述第二间接调用指令;
建立所述第二间接调用指令和所述等价调用指令之间的对应关系。
可选的,在所述将每个所述功能指令替换为间接调用指令之前,所述方法还包括:
根据每个所述功能指令,生成与各个所述功能指令对应的所述间接调用指令;
生成所述间接调用指令的引导函数,所述引导函数用于查找所述功能指令的函数句柄,继而根据所述函数句柄调用所述功能指令。
第二方面,本发明实施例还提供了一种代码保护装置,所述装置包括:
获取模块,用于获取待保护字节码中的多个功能指令;
替换模块,用于将每个所述功能指令替换为间接调用指令,所述间接调用指令的引导函数用于调用所述功能指令。
可选的,所述替换模块,还用于若所述功能指令为函数调用指令,将所述功能指令替换为第一间接调用指令,所述第一间接调用指令用于调用所述功能指令;建立所述第一间接调用指令和所述功能指令之间的对应关系。
可选的,所述替换模块,还用于若所述功能指令为非函数调用指令,生成与所述功能指令相对应的等价函数,所述等价函数的功能与所述功能指令的功能相同;将所述功能指令替换为第二间接调用指令,所述第二间接调用指令用于调用所述等价函数。
可选的,所述替换模块,还用于生成调用所述等价函数的等价调用指令;将所述等价调用指令替换为所述第二间接调用指令;建立所述第二间接调用指令和所述等价调用指令之间的对应关系。
可选的,所述装置还包括:
第一生成模块,用于根据每个所述功能指令,生成与各个所述功能指令对应的所述间接调用指令;
第二生成模块,用于生成所述间接调用指令的引导函数,所述引导函数用于查找所述功能指令的函数句柄,继而根据所述函数句柄调用所述功能指令。
第三方面,本发明实施例还提供了一种保护设备,包括:处理器、存储介质和总线,所述存储介质存储有所述处理器可执行的机器可读指令,当所述保护设备运行时,所述处理器与所述存储介质之间通过所述总线通信,所述处理器执行所述机器可读指令,以执行时执行如第一方面中任一所述的代码保护方法的步骤。
第四方面,本发明实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器运行时执行如第一方面中任一所述的代码保护方法的步骤。
本发明的有益效果是:
本申请实施例通过获取待保护字节码中的多个功能指令,并将每个功能指令替换为间接调用指令,以便通过间接调用指令的引导函数用于调用相对应的功能指令。通过将功能指令替换为间接调用指令,在对字节码进行反编译后仅能得到替换后的间接调用指令,避免了反编译后得到功能指令对应的字节码,从而提高了代码的安全性。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1为本发明一实施例提供的代码保护方法的流程示意图;
图2为本发明另一实施例提供的代码保护方法的流程示意图;
图3为本发明一实施例提供的代码保护装置的示意图;
图4为本发明另一实施例提供的代码保护装置的示意图;
图5为本发明一实施例提供的保护设备的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。
在本申请提出申请之前,相关技术方案为:随着计算机技术的不断发展,计算机语音也在不断发展,以Java语言为例,在运行Java语言的过程中,可以先将Java代码编译成字节码,再由JVM对字节码进行识别运行,从而实现Java语言的功能。但是,由于JVM的标准是公开的,可以根据该标准对字节码进行反编译,从而得到Java语言的代码,造成代码泄露的问题。
为了解决上述技术问题,本申请实施例提供一种代码保护方法。其核心改进点在于:基于字节码中的各个指令,通过替换的方式,将各个指令替换为与各个指令相对应的间接调用指令,从而避免了反编译得到各个指令,提高了代码保密的安全性。
图1为本发明一实施例提供的代码保护方法的流程示意图,应用于保护设备,该保护设备可以为终端设备,例如终端设备可以为计算机或平板设备等,如图1所示,该方法包括:
步骤101、获取待保护字节码中的多个功能指令。
为了对代码进行保护,可以先获取由代码转换得到的字节码,并对字节码中的各个功能指令进行识别提取,以便在后续步骤中,可以针对各个功能指令进行替换,从而实现对代码的保护。
在一种可选实施例中,保护设备可以获取由代码编译转换得到的字节码,或者可以获取由字节码所组成的字节码文件,并对获取的字节码进行解析,确定字节码所包括的各个功能指令。
其中,针对JVM,字节码文件可以是以“.class”的文件扩展名进行存储的文件,也可以是由多个“.class”的文件压缩后形成的“.jar”文件,但是针对安卓平台,字节码文件可以是以“.dex”的文件扩展名进行存储的文件,本申请实施例对字节码文件不做限定。
需要说明的是,在JVM根据字节码运行的过程中,可以根据字节码中不同的功能指令,实现不同的功能。例如,各个功能指令可以包括:具有判断功能的判断指令,具有循环功能的循环指令,还有其他不同功能的功能指令,本申请实施例对此不做限定。
步骤102、将每个功能指令替换为间接调用指令。
其中,该间接调用指令的引导函数用于调用功能指令。
在识别得到字节码中的各个功能指令后,可以根据各个功能指令生成相对应的间接调用指令,并将各个功能指令替换为相对应的间接调用指令,从而实现对字节码的加密。
在一种可选实施例中,对于每个功能指令,保护设备可以先根据该功能指令或该功能指令所实现的功能,生成与该功能指令相对应的间接调用指令,并将该功能指令替换为生成的相对应的间接调用指令。
例如,在Java语言中,该间接调用指令可以为invokedynamic指令。相对应的,在JVM运行的过程中,可以根据该invokedynamic指令,通过invokedynamic指令的引导函数获取被替换的功能指令的函数句柄,从而可以通过该函数句柄调用被替换的功能指令,进而实现原有的功能。
需要说明的是,每个间接调用指令可以对应一个引导函数,则在生成并替换多个间接调用指令后,可以得到多个引导函数。而且,引导函数可以通过不同的计算机语言实现,例如,在JVM平台中,引导函数可以包括C语言和Java语言中的至少一种。
而且,本申请不但可以应用在JVM平台,也可以应用在其他具有间接调用功能的平台,例如安卓平台和JS平台,本申请对上述方法应用的平台不做限定。
另外,如表1所示,分别示出了JVM平台和安卓平台中相同指令的不同格式:
表1
JVM平台指令 | 安卓平台指令 |
invokedynamic | invoke-custom、invoke-custom/range |
inovkevirtual | invoke-virtual、invoke-virtual/range |
invokestatic | invoke-static、invoke-static/range |
getfield | iget |
getstatic | sget |
综上所述,本申请实施例提供的代码保护方法,通过获取待保护字节码中的多个功能指令,并将每个功能指令替换为间接调用指令,以便通过间接调用指令的引导函数用于调用相对应的功能指令。通过将功能指令替换为间接调用指令,在对字节码进行反编译后仅能得到替换后的间接调用指令,避免了反编译后得到功能指令对应的字节码,从而提高了代码的安全性。
图2为本发明另一实施例提供的代码保护方法的流程示意图,如图2所示,该方法包括:
步骤201、获取待保护字节码中的多个功能指令。
步骤202、根据每个功能指令,生成与各个功能指令对应的间接调用指令。
在确定待保护字节码中的各个功能指令后,可以根据各个功能指令生成相对应的间接调用指令,以便在后续步骤中,可以将各个功能指令替换为各个相对应的间接调用指令。
可选的,可以根据每个功能指令,生成与各个功能指令对应的间接调用指令,并生成间接调用指令的引导函数。
其中,该引导函数用于查找功能指令的函数句柄,继而根据该函数句柄调用该功能指令。
在一种可选实施例中,对于每个功能指令,可以先根据该功能指令的信息,生成与该功能指令相对应的间接调用指令,从而可以通过该间接调用指令调用功能指令对应的函数,进而实现该功能指令的功能。
其中,用于生成间接调用指令的功能指令的信息可以为:功能指令的标识、功能指令的类型,或者功能指令的函数句柄等,本申请实施例对此不做限定。
需要说明的是,在实际应用中,可以根据各个功能指令所实现的功能,针对部分功能的功能指令进行替换,也可以针对所有的功能指令进行替换,本申请实施例对替换的功能指令的数目和类型不做限定。
步骤203、将每个功能指令替换为间接调用指令。
其中,该间接调用指令的引导函数用于调用功能指令。
在得到各个间接调用指令后,可以将各个功能指令替换为生成的各个间接调用指令,从而实现对字节码的加密,完成对代码的保护。
由于功能指令可以为函数调用指令,也可以为非函数调用指令,则针对非函数调用指令,可以通过生成等价函数的方式,通过对等价函数进行调用从而实现对功能指令的替换。
因此,步骤203可以为步骤203a或者步骤203b:
步骤203a、若功能指令为函数调用指令,将功能指令替换为第一间接调用指令,并建立第一间接调用指令和功能指令之间的对应关系。
其中,该第一间接调用指令用于调用功能指令。
若确定功能指令是函数调用指令,则可以将该函数调用指令替换为与该功能指令相对应的第一间接调用指令,相对应的,在运行第一间接调用指令的过程中,可以调用功能指令所对应的函数调用指令。
其中,若在JVM平台中,确定功能指令为invokestatic函数或invokevirtual函数时,可以确定功能指令为函数调用指令。
需要说明的是,为了实现通过第一间接调用指令调用功能指令对应的函数调用指令,可以建立第一间接调用指令和功能指令之间的对应关系。而在建立该对应关系的过程中,可以根据函数调用指令的函数句柄、函数名称或函数类型,建立函数调用指令与第一间接调用指令之间的对应关系。也即是,将函数调用指令记录为第一间接调用指令的被调用函数。
另外,本申请实施例仅是以先替换功能指令,再建立对应关系的方式为例进行说明,但是在实际一应用中,可以先建立对应关系,再对功能指令进行替换,还可以同时执行建立对应关系和提供功能指令,本申请实施例对此不做限定。
步骤203b、若功能指令为非函数调用指令,生成与功能指令相对应的等价函数,将功能指令替换为第二间接调用指令。
其中,该等价函数的功能与功能指令的功能相同,该第二间接调用指令用于调用等价函数。
若功能指令为非函数调用指令,则可以先根据该功能指令生成具有相同功能的等价函数,再生成调用该等价函数的第二间接调用指令,最后通过第二间接调用指令替换该功能指令,实现对字节码的保护。
进一步地,在将功能指令替换为第二间接调用指令的过程中,可以先生成调用等价函数的等价调用指令,并将该等价调用指令替换为第二间接调用指令,再建立第二间接调用指令和等价调用指令之间的对应关系。
在一种可选实施例中,可以先确定功能指令所实现的功能,再根据该实现的功能,生成同样能够实现该功能的等价函数,再生成调用该等价函数的等价调用指令,再结合与步骤203a类似的过程,建立第二间接调用指令和等价调用指令之间的对应关系,最后将功能指令替换为第二间接调用指令。
与步骤203a类似的,本步骤203b对将功能指令替换为第二间接调用指令、以及建立第二间接调用指令和等价调用指令之间的对应关系的顺序不做限定。
需要说明的是,在对功能指令替换完毕,根据替换后的字节码运行的过程中,若检测到间接调用指令,则可以根据该间接调用指令的引导函数获取被调用函数的函数句柄,再根据该函数句柄,调用该被调用函数,也即是调用被间接调用指令替换的功能指令。
例如,以Java代码为例,参见如下所示的Java代码,在JVM运行下述Java代码编译的字节码时,若检测到InvokeDynamic指令,可以根据该InvokeDynamic指令的引导函数信息,查找得到相对应的引导函数(bootstrapDynamic),并根据该引导函数获取被调用函数的函数调用方、函数名称和函数类型等信息,再通过引导函数获取的各项信息查找得到被调用函数(下述代码中的被调用函数为printArg函数)的函数句柄(MethodHandler),则JVM可以根据该函数句柄调用被调用函数。
综上所述,本申请实施例提供的代码保护方法,通过获取待保护字节码中的多个功能指令,并将每个功能指令替换为间接调用指令,以便通过间接调用指令的引导函数用于调用相对应的功能指令。通过将功能指令替换为间接调用指令,在对字节码进行反编译后仅能得到替换后的间接调用指令,避免了反编译后得到功能指令对应的字节码,从而提高了代码的安全性;
进一步地,由于间接调用指令在源代码中没有对应的操作,所以无法将保护后的字节码直接反编译为源代码,提高了反编译的成本,提高了代码的安全性;
进一步地,在静态分析中,由于间接调用指令存在引导函数,则无法获取被替换的功能指令对应的函数调用指令,提高了反编译的成本,提高了代码的安全性。
图3为本发明一实施例提供的代码保护装置的示意图,如图3所示,该装置具体包括:
获取模块301,用于获取待保护字节码中的多个功能指令;
替换模块302,用于将每个该功能指令替换为间接调用指令,该间接调用指令的引导函数用于调用该功能指令。
可选的,该替换模块302,还用于若该功能指令为函数调用指令,将该功能指令替换为第一间接调用指令,该第一间接调用指令用于调用该功能指令;建立该第一间接调用指令和该功能指令之间的对应关系。
可选的,该替换模块302,还用于若该功能指令为非函数调用指令,生成与该功能指令相对应的等价函数,该等价函数的功能与该功能指令的功能相同;将该功能指令替换为第二间接调用指令,该第二间接调用指令用于调用该等价函数。
可选的,该替换模块302,还用于生成调用该等价函数的等价调用指令;将该等价调用指令替换为该第二间接调用指令;建立该第二间接调用指令和该等价调用指令之间的对应关系。
可选的,参见图4,该装置还包括:
第一生成模块303,用于根据每个该功能指令,生成与各个该功能指令对应的该间接调用指令;
第二生成模块304,用于生成该间接调用指令的引导函数,该引导函数用于查找该功能指令的函数句柄,继而根据该函数句柄调用该功能指令。
综上所述,本申请实施例提供的代码保护装置,通过获取待保护字节码中的多个功能指令,并将每个功能指令替换为间接调用指令,以便通过间接调用指令的引导函数用于调用相对应的功能指令。通过将功能指令替换为间接调用指令,在对字节码进行反编译后仅能得到替换后的间接调用指令,避免了反编译后得到功能指令对应的字节码,从而提高了代码的安全性。
上述装置用于执行前述实施例提供的方法,其实现原理和技术效果类似,在此不再赘述。
以上这些模块可以是被配置成实施以上方法的一个或多个集成电路,例如:一个或多个特定集成电路(Application Specific Integrated Circuit,简称ASIC),或,一个或多个微处理器(digital singnal processor,简称DSP),或,一个或者多个现场可编程门阵列(Field Programmable Gate Array,简称FPGA)等。再如,当以上某个模块通过处理元件调度程序代码的形式实现时,该处理元件可以是通用处理器,例如中央处理器(CentralProcessing Unit,简称CPU)或其它可以调用程序代码的处理器。再如,这些模块可以集成在一起,以片上系统(system-on-a-chip,简称SOC)的形式实现。
图5为本发明一实施例提供的保护设备的结构示意图,该保护设备可以为移动电话,计算机,平板设备,个人数字助理等,该保护设备可以是具备代码保护功能的计算设备。
该保护设备包括:处理器501、存储介质502和总线503。
所述存储介质502存储有所述处理器501可执行的机器可读指令,当所述保护设备运行时,所述处理器501与所述存储介质502之间通过所述总线503通信,所述处理器501执行所述机器可读指令,以执行时执行上述方法实施例。具体实现方式和技术效果类似,这里不再赘述。
可选地,本发明还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器运行时执行上述方法实施例。
在本发明所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(英文:processor)执行本发明各个实施例所述方法的部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(英文:Read-Only Memory,简称:ROM)、随机存取存储器(英文:Random Access Memory,简称:RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
上仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以权利要求的保护范围为准。
Claims (12)
1.一种代码保护方法,其特征在于,所述方法包括:
获取待保护字节码中的多个功能指令;
将每个所述功能指令替换为间接调用指令,所述间接调用指令的引导函数用于调用所述功能指令。
2.如权利要求1所述的方法,其特征在于,所述将每个所述功能指令替换为间接调用指令,包括:
若所述功能指令为函数调用指令,将所述功能指令替换为第一间接调用指令,所述第一间接调用指令用于调用所述功能指令;
建立所述第一间接调用指令和所述功能指令之间的对应关系。
3.如权利要求1所述的方法,其特征在于,所述将每个所述功能指令替换为间接调用指令,包括:
若所述功能指令为非函数调用指令,生成与所述功能指令相对应的等价函数,所述等价函数的功能与所述功能指令的功能相同;
将所述功能指令替换为第二间接调用指令,所述第二间接调用指令用于调用所述等价函数。
4.如权利要求3所述的方法,其特征在于,所述将所述功能指令替换为第二间接调用指令,包括:
生成调用所述等价函数的等价调用指令;
将所述等价调用指令替换为所述第二间接调用指令;
建立所述第二间接调用指令和所述等价调用指令之间的对应关系。
5.如权利要求1至4任一所述的方法,其特征在于,在所述将每个所述功能指令替换为间接调用指令之前,所述方法还包括:
根据每个所述功能指令,生成与各个所述功能指令对应的所述间接调用指令;
生成所述间接调用指令的引导函数,所述引导函数用于查找所述功能指令的函数句柄,继而根据所述函数句柄调用所述功能指令。
6.一种代码保护装置,其特征在于,所述装置包括:
获取模块,用于获取待保护字节码中的多个功能指令;
替换模块,用于将每个所述功能指令替换为间接调用指令,所述间接调用指令的引导函数用于调用所述功能指令。
7.如权利要求6所述的装置,其特征在于,所述替换模块,还用于若所述功能指令为函数调用指令,将所述功能指令替换为第一间接调用指令,所述第一间接调用指令用于调用所述功能指令;建立所述第一间接调用指令和所述功能指令之间的对应关系。
8.如权利要求6所述的装置,其特征在于,所述替换模块,还用于若所述功能指令为非函数调用指令,生成与所述功能指令相对应的等价函数,所述等价函数的功能与所述功能指令的功能相同;将所述功能指令替换为第二间接调用指令,所述第二间接调用指令用于调用所述等价函数。
9.如权利要求8所述的装置,其特征在于,所述替换模块,还用于生成调用所述等价函数的等价调用指令;将所述等价调用指令替换为所述第二间接调用指令;建立所述第二间接调用指令和所述等价调用指令之间的对应关系。
10.如权利要求6至9任一所述的装置,其特征在于,所述装置还包括:
第一生成模块,用于根据每个所述功能指令,生成与各个所述功能指令对应的所述间接调用指令;
第二生成模块,用于生成所述间接调用指令的引导函数,所述引导函数用于查找所述功能指令的函数句柄,继而根据所述函数句柄调用所述功能指令。
11.一种保护设备,其特征在于,包括:处理器、存储介质和总线,所述存储介质存储有所述处理器可执行的机器可读指令,当所述保护设备运行时,所述处理器与所述存储介质之间通过所述总线通信,所述处理器执行所述机器可读指令,以执行时执行如权利要求1至5任一所述的代码保护方法的步骤。
12.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器运行时执行如权利要求1至5任一所述的代码保护方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910953227.0A CN110717150A (zh) | 2019-10-08 | 2019-10-08 | 代码保护方法、装置、保护设备及可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910953227.0A CN110717150A (zh) | 2019-10-08 | 2019-10-08 | 代码保护方法、装置、保护设备及可读存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN110717150A true CN110717150A (zh) | 2020-01-21 |
Family
ID=69212336
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910953227.0A Pending CN110717150A (zh) | 2019-10-08 | 2019-10-08 | 代码保护方法、装置、保护设备及可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110717150A (zh) |
Citations (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103324481A (zh) * | 2013-06-26 | 2013-09-25 | 网宿科技股份有限公司 | 通过汇编实现代码混淆的编译方法和系统 |
CN103413075A (zh) * | 2013-07-10 | 2013-11-27 | 北京深思数盾科技有限公司 | 一种通过虚拟机保护java可执行程序的方法及设备 |
CN103699820A (zh) * | 2013-12-25 | 2014-04-02 | 北京深思数盾科技有限公司 | 用于相对跳转指令的混淆方法 |
CN104091100A (zh) * | 2014-07-15 | 2014-10-08 | 电子科技大学 | 一种基于编译中间结果的软件保护方法 |
CN106503496A (zh) * | 2016-12-08 | 2017-03-15 | 合肥康捷信息科技有限公司 | 基于操作码替换与合并的Python脚本程序防逆转方法 |
CN106663024A (zh) * | 2014-07-14 | 2017-05-10 | 甲骨文国际公司 | 变量句柄 |
US9830448B2 (en) * | 2014-06-23 | 2017-11-28 | Waratek Limited | Enhanced security for java virtual machines |
CN107729725A (zh) * | 2017-10-09 | 2018-02-23 | 南京南瑞集团公司 | 一种基于虚拟机指令修改的Android应用加固系统及方法 |
CN108932407A (zh) * | 2018-05-22 | 2018-12-04 | 北京奇虎科技有限公司 | 一种程序安全保护方法及装置 |
CN109101237A (zh) * | 2018-08-01 | 2018-12-28 | 北京顶象技术有限公司 | 代码的加密编译方法及装置 |
CN109740315A (zh) * | 2018-12-28 | 2019-05-10 | 深圳前海微众银行股份有限公司 | 基于安卓平台的常量保护方法、装置、设备及存储介质 |
CN109960510A (zh) * | 2019-03-20 | 2019-07-02 | 北京智游网安科技有限公司 | Android应用动态链接库的加固方法及相关设备 |
CN110059456A (zh) * | 2019-04-19 | 2019-07-26 | 同盾控股有限公司 | 代码保护方法、代码保护装置、存储介质与电子设备 |
CN110069905A (zh) * | 2019-04-26 | 2019-07-30 | 深圳智慧园区信息技术有限公司 | 一种Springboot程序加密和解密的装置及方法 |
-
2019
- 2019-10-08 CN CN201910953227.0A patent/CN110717150A/zh active Pending
Patent Citations (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103324481A (zh) * | 2013-06-26 | 2013-09-25 | 网宿科技股份有限公司 | 通过汇编实现代码混淆的编译方法和系统 |
CN103413075A (zh) * | 2013-07-10 | 2013-11-27 | 北京深思数盾科技有限公司 | 一种通过虚拟机保护java可执行程序的方法及设备 |
CN103699820A (zh) * | 2013-12-25 | 2014-04-02 | 北京深思数盾科技有限公司 | 用于相对跳转指令的混淆方法 |
US9830448B2 (en) * | 2014-06-23 | 2017-11-28 | Waratek Limited | Enhanced security for java virtual machines |
CN106663024A (zh) * | 2014-07-14 | 2017-05-10 | 甲骨文国际公司 | 变量句柄 |
CN104091100A (zh) * | 2014-07-15 | 2014-10-08 | 电子科技大学 | 一种基于编译中间结果的软件保护方法 |
CN106503496A (zh) * | 2016-12-08 | 2017-03-15 | 合肥康捷信息科技有限公司 | 基于操作码替换与合并的Python脚本程序防逆转方法 |
CN107729725A (zh) * | 2017-10-09 | 2018-02-23 | 南京南瑞集团公司 | 一种基于虚拟机指令修改的Android应用加固系统及方法 |
CN108932407A (zh) * | 2018-05-22 | 2018-12-04 | 北京奇虎科技有限公司 | 一种程序安全保护方法及装置 |
CN109101237A (zh) * | 2018-08-01 | 2018-12-28 | 北京顶象技术有限公司 | 代码的加密编译方法及装置 |
CN109740315A (zh) * | 2018-12-28 | 2019-05-10 | 深圳前海微众银行股份有限公司 | 基于安卓平台的常量保护方法、装置、设备及存储介质 |
CN109960510A (zh) * | 2019-03-20 | 2019-07-02 | 北京智游网安科技有限公司 | Android应用动态链接库的加固方法及相关设备 |
CN110059456A (zh) * | 2019-04-19 | 2019-07-26 | 同盾控股有限公司 | 代码保护方法、代码保护装置、存储介质与电子设备 |
CN110069905A (zh) * | 2019-04-26 | 2019-07-30 | 深圳智慧园区信息技术有限公司 | 一种Springboot程序加密和解密的装置及方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109558748B (zh) | 数据处理方法、装置、电子设备及存储介质 | |
CN105068932B (zh) | 一种Android应用程序加壳的检测方法 | |
CN110414261B (zh) | 一种数据脱敏方法、装置、设备及可读存储介质 | |
US20170351847A1 (en) | Simple obfuscation of text data in binary files | |
KR20170068814A (ko) | 악성 모바일 앱 감지 장치 및 방법 | |
KR101234591B1 (ko) | Jni를 이용한 안드로이드 난독화 방법 | |
CN111443901B (zh) | 一种基于Java反射的业务扩展方法及装置 | |
CN112269970A (zh) | 一种脚本加密方法、装置、服务器及存储介质 | |
CN103198240B (zh) | 一种用于保护代码安全的方法和装置 | |
CN112286896B (zh) | 一种日志文件处理方法、装置、计算机设备和存储介质 | |
WO2021175053A1 (zh) | 一种在虚拟机中执行功能模块的方法和装置 | |
CN112114933A (zh) | 应用程序保护方法、电子设备和存储介质 | |
CN114238948A (zh) | 一种应用程序检测方法、装置、电子设备及存储介质 | |
CN113642025A (zh) | 接口数据处理方法、装置、设备及存储介质 | |
CN106557350B (zh) | 应用程序安装包中java字节码转换方法、装置及设备 | |
CN107239298B (zh) | 应用程序调试方法及装置 | |
CN112966227A (zh) | 代码加密解密方法和装置、存储介质 | |
CN110717150A (zh) | 代码保护方法、装置、保护设备及可读存储介质 | |
CN107066886A (zh) | 一种Android加固脱壳的检测方法 | |
CN112395603A (zh) | 基于指令执行序列特征的漏洞攻击识别方法、装置及计算机设备 | |
CN113297622A (zh) | 一种日志脱敏方法、系统、电子设备及存储介质 | |
CN107066254B (zh) | 一种调用动画数据的方法及装置 | |
CN113051231A (zh) | 文件解析方法、装置、计算机设备和存储介质 | |
CN110084005A (zh) | 一种代码的处理方法及装置 | |
CN115640050A (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 | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20200121 |