一种JavaScript源代码保密方法、装置、设备及存储介质与流程

文档序号:21360995发布日期:2020-07-04 04:34阅读:239来源:国知局
一种JavaScript源代码保密方法、装置、设备及存储介质与流程

本申请实施例涉及计算机技术领域,尤其涉及一种javascript源代码保密方法、装置、设备及存储介质。



背景技术:

javascript是目前较为流行的编程语言,广泛用于web、app和服务器开发,nodejs是一个基于chromev8引擎的javascript运行环境。在运行javascript之前,v8将代码编译成原生机器码(ia-32,x86-64,arm,ormipscpus),并且使用了如内联缓存等方法来提高性能。

javascript是动态语言,不能像c/c++那样,预先编译成二进制的可执行文件,所以在发布服务器软件时要提供javascript源代码,但是提供javascript源代码后导致javascript源代码的保密性难以得到保障。



技术实现要素:

本申请实施例提供一种javascript源代码保密方法、装置、设备及存储介质,以提高javascript源代码的保密性。

在第一方面,本申请实施例提供了一种javascript源代码保密方法,所述方法基于nodejs运行,包括:

根据javascript文件的加密情况生成加密标志;

基于所述加密标志确定javascript文件是否被加密;

基于加密的javascript文件,解密并执行所述javascript文件中的javascript源代码;

基于未加密的javascript文件,执行所述javascript文件中的javascript源代码。

进一步的,所述根据javascript文件的加密情况生成加密标志,包括:

调用readfilesync函数读取javascript文件;

基于isencrypted函数判断javascript文件是否被加密;

基于加密的javascript文件,生成加密标志;

基于未加密的javascript文件,获取javascript文件中的javascript源代码。

进一步的,所述基于所述加密标志确定javascript文件是否被加密,包括:

调用indexof函数确定javascript文件是否存在加密标志;

基于存在加密标志的所述javascript文件确定javascript文件被加密;

基于不存在加密标志的所述javascript文件确定javascript文件未加密。

进一步的,所述基于加密的javascript文件,解密并执行所述javascript文件中的javascript源代码,包括:

基于加密的javascript文件,调用runencryptedcode函数解密并执行所述javascript文件中的javascript源代码;

所述基于未加密的javascript文件,执行所述javascript文件中的javascript源代码,包括:

基于未加密的javascript文件,调用runinthiscontextorg函数执行所述javascript文件中的javascript源代码。

进一步的,所基于加密的javascript文件,解密并执行所述javascript文件中的javascript源代码之前,还包括:

调用ptrace函数断开nodejs与调试器的连接。

进一步的,所述根据javascript文件的加密情况生成加密标志之前,还包括:

将加密的javascript文件对应的密码以二进制的方式进行分散保存。

进一步的,所述根据javascript文件的加密情况生成加密标志之前,还包括:

根据nodejs的md5值判断nodejs是否被修改。

在第二方面,本申请实施例提供了一种javascript源代码保密装置,所述装置基于nodejs运行,包括标志确定模块、加密判断模块、第一执行模块和第二执行模块,其中:

标志确定模块,用于根据javascript文件的加密情况生成加密标志;

加密判断模块,用于基于所述加密标志确定javascript文件是否被加密;

第一执行模块,用于基于加密的javascript文件,解密并执行所述javascript文件中的javascript源代码;

第二执行模块,用于基于未加密的javascript文件,执行所述javascript文件中的javascript源代码。

在第三方面,本申请实施例提供了一种计算机设备,包括:存储器以及一个或多个处理器;

所述存储器,用于存储一个或多个程序;

当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如第一方面所述的javascript源代码保密方法。

在第四方面,本申请实施例提供了一种包含计算机可执行指令的存储介质,所述计算机可执行指令在由计算机处理器执行时用于执行如第一方面所述的javascript源代码保密方法。

本申请实施例通过在读取javascript文件时,对经过加密处理的javascript文件返回加密标志,对未加密的javascript文件则直接返回javascript文件中的javascript源代码,并且在后续执行源代码时,根据javascript文件是否存在加密标志判断javascript文件是否被加密,并对加密的javascript文件进行解密后再执行其中的javascript源代码,对于未加密的javascript文件,则正常执行其中的javascript源代码,使得在javascript层面,外界难以获取javascript源代码,提高了javascript源代码的保密性,且减少对javascript的执行效率。

附图说明

图1是本申请实施例提供的一种javascript源代码保密方法的流程图;

图2是本申请实施例提供的另一种javascript源代码保密方法的流程图;

图3是本申请实施例提供的一种javascript源代码保密装置的示意图;

图4是本申请实施例提供的一种计算机设备的结构示意图。

具体实施方式

为了使本申请的目的、技术方案和优点更加清楚,下面结合附图对本申请具体实施例作进一步的详细描述。可以理解的是,此处所描述的具体实施例仅仅用于解释本申请,而非对本申请的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本申请相关的部分而非全部内容。在更加详细地讨论示例性实施例之前应当提到的是,一些示例性实施例被描述成作为流程图描绘的处理或方法。虽然流程图将各项操作(或步骤)描述成顺序的处理,但是其中的许多操作可以被并行地、并发地或者同时实施。此外,各项操作的顺序可以被重新安排。当其操作完成时所述处理可以被终止,但是还可以具有未包括在附图中的附加步骤。所述处理可以对应于方法、函数、规程、子例程、子程序等等。

图1给出了本申请实施例提供的一种javascript源代码保密方法的流程图,本申请实施例提供的javascript源代码保密方法基于nodejs运行,且该方法可以由基于nodejs运行的javascript源代码保密装置来执行,该javascript源代码保密装置可以通过硬件和/或软件的方式实现,并集成在计算机设备中。

下述以javascript源代码保密装置执行javascript源代码保密方法为例进行描述。参考图1,该javascript源代码保密方法包括:

s101:根据javascript文件的加密情况生成加密标志。

其中,javascript文件内保存有javascript源代码,并可通过base64加密、md5加密、sha1加密、aes加密、jjencode以及aaencode加密等加密方法进行加密,对javascript文件的加密方式可根据实际需要确定,本实施例不做限定。

示例性的,在需要加载javascript文件时,先判断对应的javascript文件是否被加密,如果该javascript文件被加密,则不读取和解密该javascript文件的内容,并返回一个指示该javascript文件已被加密的加密标志,若该javascript未被加密,则返回该javascript文件的内容,即javascript源代码。

s102:基于所述加密标志确定javascript文件是否被加密。

示例性的,在加载javascript文件并获得返回的内容后,判断是否返回加密标志确定javascript文件是否被加密,若存在加密标志,则确定javascript文件被加密,若不存在加密标志,则确定javascript文件未被加密。

s103:基于加密的javascript文件,解密并执行所述javascript文件中的javascript源代码。

其中,若加载javascript文件时返回的内容为加密标志,按常规逻辑运行会出现错误的情况,无法实现预期的功能。

具体的,在确定javascript文件被加密后,断开nodejs与调试器的连接,并控制nodejs调用原生代码解密并执行javascript文件,即基于javascript文件的加密类型调用对应的密钥对javascript文件进行解密,获取javascript文件中的javascript源代码,并执行获取的javascript源代码,返回执行解码后的javascript源代码的结果,实现javascript源代码相应的功能。

s104:基于未加密的javascript文件,执行所述javascript文件中的javascript源代码。

示例性的,在确定javascript文件未被加密后,可根据常规的逻辑执行返回的javascript源代码,并返回执行javascript源代码的结果,实现相应的功能。

上述,通过在读取javascript文件时,对经过加密处理的javascript文件返回加密标志,对未加密的javascript文件则直接返回javascript文件中的javascript源代码,并且在后续执行源代码时,根据javascript文件是否存在加密标志判断javascript文件是否被加密,并对加密的javascript文件进行解密后再执行其中的javascript源代码,对于未加密的javascript文件,则正常执行其中的javascript源代码,使得在javascript层面,外界难以获取javascript源代码,提高了javascript源代码的保密性,且减少对javascript的执行效率。

图2为本申请实施例提供的另一种javascript源代码保密方法的流程图,该javascript源代码保密方法是对上述javascript源代码保密方法的具体化。参考图2,该javascript源代码保密方法包括:

s201:调用readfilesync函数读取javascript文件。

示例性的,先重载fs.readfilesync函数,即把nodejs的fs.readfilesync函数保存到fs.readfilesyncorg中,再重新实现函数fs.readfilesync函数,在重新实现的函数中会根据情况在fs.readfilesyncorg调用相应的fs.readfilesync函数。其中,fs.readfilesync是nodejs内置的函数,nodejs在加载javascript源代码进入内存执行时,会调用这个函数去读取javascript源代码。

本实施例中,若在读取后就对经过加密的javascript文件进行解密,是可以正常执行解密获取的javascript源代码的,但是任何用户(包括恶意用户)都可以调用readfilesync函数,即任何用户都可以通过readfilesync函数来获解密后的源代码,无法对javascript进行保护。本实施例中,在调取javascript后,不解密javascript文件的内容,而是根据javascript文件的加密情况分别进行处理。其中,javascript文件加密的密码采用高强度的加密算法和复杂的密码(可利用现有加密技术实现,在此不做赘述),提高破解的难度,优选的,不同版本的javascript文件可采用不同的密码加密,增大破解难度。

具体的,在需要调用并执行javascript源代码时,控制nodejs调用fs.readfilesync函数同步读取相应的javascript文件。可以理解的是,该函数属于fs模块,使用前先引入fs模块(varfs=require(“fs”))。

在一个实施例中,可在调用readfilesync函数读取javascript文件前根据nodejs的md5值判断nodejs是否被修改。其中,nodejs的md5值可通过javascript自带的messagedigest类进行获取。在获取nodejs的md5值后,与预先确定的nodejs的md5值进行比较,以判断前后的md5值是否一致,从而确定nodejs是否被修改,若nodejs被修改,则退出进程的执行。

在一个实施例中,可在调用readfilesync函数读取javascript文件前将加密的javascript文件对应的密码以二进制的方式进行分散保存,将密码进行拆分并放到多个变量里,解密时根据变量之间的对应关系(如通过标签或链表进行对应)把拆分后的密码进行合并,防止通过字符串搜索的方式从可执行文件中查找密码。

s202:基于isencrypted函数判断javascript文件是否被加密。若是,跳转至步骤s203,否则,跳转至步骤s204。

具体的,在读取相应的javascript文件后,调用server.isencrypted(filename)函数,其中filename为javascript文件,通过server.isencrypted函数判断javascript文件是否为加密文件,并返回相应的判断值(例如加密文件则返回“1”,否则返回“0”)。进一步的,若javascript文件为加密文件,则跳转至步骤s203,否则,跳转至步骤s204。

s203:基于加密的javascript文件,生成加密标志。

具体的,在确定读取的javascript文件为加密文件后,生成并返回一个加密标志,例如,通过returnencrypted_mark函数向nodejs返回一个内容为encrypted_mark的加密标志。可以理解的是,nodejs在后续接收到encrypted_mark的文件内容时,确定该javascript为加密文件,需要解码后再执行。在返回加密标志后,跳转至步骤s205。

s204:基于未加密的javascript文件,获取javascript文件中的javascript源代码。

具体的,在确定读取的javascript文件为未经加密的文件后,则获取该javascript文件中的javascript源代码。例如,调用returnfs.readfilesyncorg函数返回该javascript文件中的javascript源代码。

示例性的,对于判断javascript文件是否加密及返回加密标记部分代码如下所示:

s205:基于所述加密标志确定javascript文件是否被加密。若是,则跳转至步骤s206,否则,跳转至步骤s207。

示例性的,调用indexof函数确定javascript文件是否存在加密标志,基于存在加密标志的所述javascript文件确定javascript文件被加密,并基于不存在加密标志的所述javascript文件确定javascript文件未加密。

具体的,调用indexof函数,基于code.indexof(encrypted_mark)>0,并根据函数返回的值确定javascript文件是否存在加密标志。例如,在code.indexof(encrypted_mark)的值大于0或者是code.indexof(encrypted_mark)>0为真时,确定在读取javascript文件时返回的内容为加密标志(encrypted_mark),确定javascript文件存在加密标志;而在code.indexof(encrypted_mark)的值小于或等于0或者是code.indexof(encrypted_mark)>0为假时,确定在读取javascript文件时返回的内容未存在加密标志(encrypted_mark),确定javascript文件不存在加密标志。

进一步的,在确定javascript文件存在加密标志时,确定javascript文件被加密,并在确定javascript文件不存在加密标志时,确定javascript文件未被加密。

s206:基于加密的javascript文件,调用runencryptedcode函数解密并执行所述javascript文件中的javascript源代码。

示例性的,在确定javascript文件被加密后,通过returnserver.runencryptedcode(filename)返回解码并执行javascript文件中的javascript源代码的结果。其中runencryptedcode函数先调用ptrace函数断开nodejs与调试器的连接,再调用runencryptedcode函数解密并执行javascript文件中的javascript源代码。可以理解的是,在解密并执行javascript文件的过程中,通过ptrace函数保持nodejs与调试器的断开,直至完成加密的javascript文件的解密与执行。

其中,调试器可以启动进程,然后对进程进行调试,或者将自己本身关联到一个已存在的进程之上。调试器可以单步运行代码,设置断点然后运行程序,检查变量的值以及跟踪调用栈。许多调试器已经拥有了一些高级特性,比如执行表达式并在被调试进程的地址空间中调用函数,甚至可以直接修改进程的代码并观察修改后的程序行为。若在解码并运行javascript文件中的javascript源代码时,javascript源代码存在被调试器监视的风险。

而ptrace可用于进程跟踪,常常被用来拦截和记录进程所执行的系统调用,以及进程所收到的信号,提供了父进程可以观察和控制其子进程执行的能力,并允许父进程检查和替换子进程的内核镜像(包括寄存器)的值。当使用了ptrace跟踪后,所有发送给被跟踪的子进程的信号都会被转发给父进程,而子进程则会被阻塞,父进程收到信号后,就可以对停止下来的子进程进行检查和修改,然后让子进程继续运行。调用ptrace函数可实现nodejs与调试器之间的隔离,阻断调试器对nodejs的监视。

具体的,先重载vm.runinthiscontext函数,即把nodejs的vm.runinthiscontext函数保存到vm.runinthiscontextorg中,再重新实现函数vm.runinthiscontext函数,在重新实现的函数中会根据情况在vm.runinthiscontextorg调用相应的vm.runinthiscontext函数。

需要进行解释的是,在读取加密的javascript文件时,并没有对javascript文件进行解密,而是返回一个加密标志encrypted_mark,这个加密标志nodejs并非nodejs常用的指令,按正常逻辑执行就会出错,所以要重新实现runinthiscontext函数,遇到加密的javascript文件时,就调用runencryptedcode去断开nodejs与调试器的连接,然后解密并执行javascript文件中的javascript源代码。

在一个实施例中,在基于加密的javascript文件,调用runencryptedcode函数解密并执行所述javascript文件中的javascript源代码时,还统计javascript源代码的执行时间,并基于所述执行时间判断nodejs是否被调试器中断执行。例如,执行时间大于预计时间,则判断nodejs被调试器中断执行,并退出程序的执行。

s207:基于未加密的javascript文件,调用runinthiscontextorg函数执行所述javascript文件中的javascript源代码。

具体的,在确定javascript文件未被加密后,调用runinthiscontextorg函数执行javascript文件中的javascript源代码,并返回执行javascript源代码的结果,实现相应的功能。

示例性的,本实施例中对于解密执行javascript文件部分代码如下所示:

上述,通过在读取javascript文件时,对经过加密处理的javascript文件返回加密标志,对未加密的javascript文件则直接返回javascript文件中的javascript源代码,并且在后续执行源代码时,根据javascript文件是否存在加密标志判断javascript文件是否被加密,并对加密的javascript文件进行解密后再执行其中的javascript源代码,对于未加密的javascript文件,则正常执行其中的javascript源代码,使得在javascript层面,外界难以获取javascript源代码,提高了javascript源代码的保密性,且减少对javascript的执行效率。同时,通过ptrace断开调试器对nodejs的监视,有效保证javascript文件在解密和运行过程中的保密性,并且将javascript文件的密码分散保存,防止通过字符串搜索的方式从可执行文件中查找密码,保证javascript文件的安全,并对nodejs本身进行检查,减少因nodejs被修改而导致javascript文件被破解的情况,有效提高了javascript源代码的保密性。

图3是本申请实施例提供的一种javascript源代码保密装置的示意图。参考图3,该javascript源代码保密装置基于nodejs运行,包括标志确定模块31、加密判断模块32、第一执行模块33和第二执行模块34。

其中,标志确定模块31,用于根据javascript文件的加密情况生成加密标志;加密判断模块32,用于基于所述加密标志确定javascript文件是否加密;第一执行模块33,用于基于加密的javascript文件,解密并执行所述javascript文件中的javascript源代码;第二执行模块34,用于基于未加密的javascript文件,执行所述javascript文件中的javascript源代码。

上述,通过在读取javascript文件时,对经过加密处理的javascript文件返回加密标志,对未加密的javascript文件则直接返回javascript文件中的javascript源代码,并且在后续执行源代码时,根据javascript文件是否存在加密标志判断javascript文件是否被加密,并对加密的javascript文件进行解密后再执行其中的javascript源代码,对于未加密的javascript文件,则正常执行其中的javascript源代码,使得在javascript层面,外界难以获取javascript源代码,提高了javascript源代码的保密性,且减少对javascript的执行效率。

本申请实施例还提供了一种计算机设备,该计算机设备可集成本申请实施例提供的javascript源代码保密装置。图4是本申请实施例提供的一种计算机设备的结构示意图。参考图4,该计算机设备包括:输入装置43、输出装置44、存储器42以及一个或多个处理器41;所述存储器42,用于存储一个或多个程序;当所述一个或多个程序被所述一个或多个处理器41执行,使得所述一个或多个处理器41实现如上述实施例提供的javascript源代码保密方法。其中输入装置43、输出装置44、存储器42和处理器41可以通过总线或者其他方式连接,图4中以通过总线连接为例。

存储器42作为一种计算设备可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,如本申请任意实施例所述的javascript源代码保密方法对应的程序指令/模块(例如,javascript源代码保密装置中的标志确定模块31、加密判断模块32、第一执行模块33和第二执行模块34)。存储器42可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据设备的使用所创建的数据等。此外,存储器42可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储器42可进一步包括相对于处理器41远程设置的存储器,这些远程存储器可以通过网络连接至设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。

输入装置43可用于接收输入的数字或字符信息,以及产生与设备的用户设置以及功能控制有关的键信号输入。输出装置44可包括显示屏等显示设备。

处理器41通过运行存储在存储器42中的软件程序、指令以及模块,从而执行设备的各种功能应用以及数据处理,即实现上述的javascript源代码保密方法。

上述提供的javascript源代码保密装置和计算机设备可用于执行上述实施例提供的javascript源代码保密方法,具备相应的功能和有益效果。

本申请实施例还提供一种包含计算机可执行指令的存储介质,所述计算机可执行指令在由计算机处理器执行时用于执行如上述实施例提供的javascript源代码保密方法,所述方法基于nodejs运行,该javascript源代码保密方法包括:根据javascript文件的加密情况生成加密标志;基于所述加密标志确定javascript文件是否加密;基于加密的javascript文件,解密并执行所述javascript文件中的javascript源代码;基于未加密的javascript文件,执行所述javascript文件中的javascript源代码。

存储介质——任何的各种类型的存储器设备或存储设备。术语“存储介质”旨在包括:安装介质,例如cd-rom、软盘或磁带装置;计算机系统存储器或随机存取存储器,诸如dram、ddrram、sram、edoram,兰巴斯(rambus)ram等;非易失性存储器,诸如闪存、磁介质(例如硬盘或光存储);寄存器或其它相似类型的存储器元件等。存储介质可以还包括其它类型的存储器或其组合。另外,存储介质可以位于程序在其中被执行的第一计算机系统中,或者可以位于不同的第二计算机系统中,第二计算机系统通过网络(诸如因特网)连接到第一计算机系统。第二计算机系统可以提供程序指令给第一计算机用于执行。术语“存储介质”可以包括可以驻留在不同位置中(例如在通过网络连接的不同计算机系统中)的两个或更多存储介质。存储介质可以存储可由一个或多个处理器执行的程序指令(例如具体实现为计算机程序)。

当然,本申请实施例所提供的一种包含计算机可执行指令的存储介质,其计算机可执行指令不限于如上所述的javascript源代码保密方法,还可以执行本申请任意实施例所提供的javascript源代码保密方法中的相关操作。

上述实施例中提供的javascript源代码保密装置、设备及存储介质可执行本申请任意实施例所提供的javascript源代码保密方法,未在上述实施例中详尽描述的技术细节,可参见本申请任意实施例所提供的javascript源代码保密方法。

上述仅为本申请的较佳实施例及所运用的技术原理。本申请不限于这里所述的特定实施例,对本领域技术人员来说能够进行的各种明显变化、重新调整及替代均不会脱离本申请的保护范围。因此,虽然通过以上实施例对本申请进行了较为详细的说明,但是本申请不仅仅限于以上实施例,在不脱离本申请构思的情况下,还可以包括更多其他等效实施例,而本申请的范围由权利要求的范围决定。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1