CN111367505A - 一种JavaScript源代码保密方法、装置、设备及存储介质 - Google Patents
一种JavaScript源代码保密方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN111367505A CN111367505A CN202010137289.7A CN202010137289A CN111367505A CN 111367505 A CN111367505 A CN 111367505A CN 202010137289 A CN202010137289 A CN 202010137289A CN 111367505 A CN111367505 A CN 111367505A
- Authority
- CN
- China
- Prior art keywords
- javascript
- javascript file
- source code
- file
- encrypted
- 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 81
- 230000006870 function Effects 0.000 claims description 58
- 239000002609 medium Substances 0.000 description 13
- 238000010586 diagram Methods 0.000 description 4
- 238000005336 cracking Methods 0.000 description 2
- 238000012544 monitoring process Methods 0.000 description 2
- 230000006399 behavior Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000014509 gene expression Effects 0.000 description 1
- 238000002955 isolation Methods 0.000 description 1
- 238000010295 mobile communication Methods 0.000 description 1
- 239000012120 mounting media Substances 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 230000008707 rearrangement Effects 0.000 description 1
- 239000007787 solid Substances 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
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
-
- 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/60—Protecting data
- G06F21/602—Providing cryptographic facilities or services
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Health & Medical Sciences (AREA)
- Computer Hardware Design (AREA)
- Computer Security & Cryptography (AREA)
- Health & Medical Sciences (AREA)
- Bioethics (AREA)
- Computing Systems (AREA)
- Storage Device Security (AREA)
Abstract
本申请实施例公开了一种JavaScript源代码保密方法、装置、设备及存储介质。本申请实施例提供的技术方案通过在读取JavaScript文件时,对经过加密处理的JavaScript文件返回加密标志,对未加密的JavaScript文件则直接返回JavaScript文件中的JavaScript源代码,并且在后续执行源代码时,根据JavaScript文件是否存在加密标志判断JavaScript文件是否被加密,并对加密的JavaScript文件进行解密后再执行其中的JavaScript源代码,提高了JavaScript源代码的保密性,且减少对JavaScript的执行效率。
Description
技术领域
本申请实施例涉及计算机技术领域,尤其涉及一种JavaScript源代码保密方法、装置、设备及存储介质。
背景技术
JavaScript是目前较为流行的编程语言,广泛用于web、app和服务器开发,nodejs是一个基于ChromeV8引擎的JavaScript运行环境。在运行JavaScript之前,V8将代码编译成原生机器码(IA-32,x86-64,ARM,or MIPS CPUs),并且使用了如内联缓存等方法来提高性能。
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模块(var fs=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文件为加密文件后,生成并返回一个加密标志,例如,通过return encrypted_mark函数向nodejs返回一个内容为encrypted_mark的加密标志。可以理解的是,nodejs在后续接收到encrypted_mark的文件内容时,确定该JavaScript为加密文件,需要解码后再执行。在返回加密标志后,跳转至步骤S205。
S204:基于未加密的JavaScript文件,获取JavaScript文件中的JavaScript源代码。
具体的,在确定读取的JavaScript文件为未经加密的文件后,则获取该JavaScript文件中的JavaScript源代码。例如,调用return fs.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、DDR RAM、SRAM、EDO RAM,兰巴斯(Rambus)RAM等;非易失性存储器,诸如闪存、磁介质(例如硬盘或光存储);寄存器或其它相似类型的存储器元件等。存储介质可以还包括其它类型的存储器或其组合。另外,存储介质可以位于程序在其中被执行的第一计算机系统中,或者可以位于不同的第二计算机系统中,第二计算机系统通过网络(诸如因特网)连接到第一计算机系统。第二计算机系统可以提供程序指令给第一计算机用于执行。术语“存储介质”可以包括可以驻留在不同位置中(例如在通过网络连接的不同计算机系统中)的两个或更多存储介质。存储介质可以存储可由一个或多个处理器执行的程序指令(例如具体实现为计算机程序)。
当然,本申请实施例所提供的一种包含计算机可执行指令的存储介质,其计算机可执行指令不限于如上所述的JavaScript源代码保密方法,还可以执行本申请任意实施例所提供的JavaScript源代码保密方法中的相关操作。
上述实施例中提供的JavaScript源代码保密装置、设备及存储介质可执行本申请任意实施例所提供的JavaScript源代码保密方法,未在上述实施例中详尽描述的技术细节,可参见本申请任意实施例所提供的JavaScript源代码保密方法。
上述仅为本申请的较佳实施例及所运用的技术原理。本申请不限于这里所述的特定实施例,对本领域技术人员来说能够进行的各种明显变化、重新调整及替代均不会脱离本申请的保护范围。因此,虽然通过以上实施例对本申请进行了较为详细的说明,但是本申请不仅仅限于以上实施例,在不脱离本申请构思的情况下,还可以包括更多其他等效实施例,而本申请的范围由权利要求的范围决定。
Claims (10)
1.一种JavaScript源代码保密方法,其特征在于,所述方法基于nodejs运行,包括:
根据JavaScript文件的加密情况生成加密标志;
基于所述加密标志确定JavaScript文件是否被加密;
基于加密的JavaScript文件,解密并执行所述JavaScript文件中的JavaScript源代码;
基于未加密的JavaScript文件,执行所述JavaScript文件中的JavaScript源代码。
2.根据权利要求1所述的JavaScript源代码保密方法,其特征在于,所述根据JavaScript文件的加密情况生成加密标志,包括:
调用readFileSync函数读取JavaScript文件;
基于isEncrypted函数判断JavaScript文件是否被加密;
基于加密的JavaScript文件,生成加密标志;
基于未加密的JavaScript文件,获取JavaScript文件中的JavaScript源代码。
3.根据权利要求1所述的JavaScript源代码保密方法,其特征在于,所述基于所述加密标志确定JavaScript文件是否被加密,包括:
调用indexOf函数确定JavaScript文件是否存在加密标志;
基于存在加密标志的所述JavaScript文件确定JavaScript文件被加密;
基于不存在加密标志的所述JavaScript文件确定JavaScript文件未加密。
4.根据权利要求1所述的JavaScript源代码保密方法,其特征在于,所述基于加密的JavaScript文件,解密并执行所述JavaScript文件中的JavaScript源代码,包括:
基于加密的JavaScript文件,调用runEncryptedCode函数解密并执行所述JavaScript文件中的JavaScript源代码;
所述基于未加密的JavaScript文件,执行所述JavaScript文件中的JavaScript源代码,包括:
基于未加密的JavaScript文件,调用runInThisContextOrg函数执行所述JavaScript文件中的JavaScript源代码。
5.根据权利要求1-4任一项所述的JavaScript源代码保密方法,其特征在于,所基于加密的JavaScript文件,解密并执行所述JavaScript文件中的JavaScript源代码之前,还包括:
调用ptrace函数断开nodejs与调试器的连接。
6.根据权利要求1-4任一项所述的JavaScript源代码保密方法,其特征在于,所述根据JavaScript文件的加密情况生成加密标志之前,还包括:
将加密的JavaScript文件对应的密码以二进制的方式进行分散保存。
7.根据权利要求1-4任一项所述的JavaScript源代码保密方法,其特征在于,所述根据JavaScript文件的加密情况生成加密标志之前,还包括:
根据nodejs的MD5值判断nodejs是否被修改。
8.一种JavaScript源代码保密装置,其特征在于,所述装置基于nodejs运行,包括标志确定模块、加密判断模块、第一执行模块和第二执行模块,其中:
标志确定模块,用于根据JavaScript文件的加密情况生成加密标志;
加密判断模块,用于基于所述加密标志确定JavaScript文件是否被加密;
第一执行模块,用于基于加密的JavaScript文件,解密并执行所述JavaScript文件中的JavaScript源代码;
第二执行模块,用于基于未加密的JavaScript文件,执行所述JavaScript文件中的JavaScript源代码。
9.一种计算机设备,其特征在于,包括:存储器以及一个或多个处理器;
所述存储器,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-7任一所述的JavaScript源代码保密方法。
10.一种包含计算机可执行指令的存储介质,其特征在于,所述计算机可执行指令在由计算机处理器执行时用于执行如权利要求1-7任一所述的JavaScript源代码保密方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010137289.7A CN111367505A (zh) | 2020-03-02 | 2020-03-02 | 一种JavaScript源代码保密方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010137289.7A CN111367505A (zh) | 2020-03-02 | 2020-03-02 | 一种JavaScript源代码保密方法、装置、设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111367505A true CN111367505A (zh) | 2020-07-03 |
Family
ID=71210266
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010137289.7A Pending CN111367505A (zh) | 2020-03-02 | 2020-03-02 | 一种JavaScript源代码保密方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111367505A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113987471A (zh) * | 2021-10-29 | 2022-01-28 | 山西大鲲智联科技有限公司 | 可执行文件执行方法、装置、电子设备和计算机可读介质 |
CN114389847A (zh) * | 2021-12-15 | 2022-04-22 | 北京达佳互联信息技术有限公司 | 访问请求加密方法、装置、电子设备及存储介质 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101833618A (zh) * | 2010-04-16 | 2010-09-15 | 中山大学 | 一种基于内容的加密、解密方法及安全保护系统 |
CN101983379A (zh) * | 2008-04-02 | 2011-03-02 | 惠普开发有限公司 | 盘驱动器数据加密 |
CN102624931A (zh) * | 2012-04-21 | 2012-08-01 | 华为技术有限公司 | Web客户端与服务器交互的方法、装置及系统 |
CN103136456A (zh) * | 2011-11-28 | 2013-06-05 | 鸿富锦精密工业(深圳)有限公司 | 数据加密存储系统及方法 |
CN105450662A (zh) * | 2015-12-25 | 2016-03-30 | 小米科技有限责任公司 | 加密方法及装置 |
CN108076050A (zh) * | 2017-11-15 | 2018-05-25 | 广州鑫燕网络科技有限公司 | 一种密文封箱式保护JavaScript源码的方法及系统 |
CN108399319A (zh) * | 2017-09-30 | 2018-08-14 | 平安科技(深圳)有限公司 | 源代码保护方法、应用服务器及计算机可读存储介质 |
CN109918917A (zh) * | 2019-03-19 | 2019-06-21 | 北京智游网安科技有限公司 | 防止h5源码泄漏的方法、计算机设备和存储介质 |
CN110069905A (zh) * | 2019-04-26 | 2019-07-30 | 深圳智慧园区信息技术有限公司 | 一种Springboot程序加密和解密的装置及方法 |
-
2020
- 2020-03-02 CN CN202010137289.7A patent/CN111367505A/zh active Pending
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101983379A (zh) * | 2008-04-02 | 2011-03-02 | 惠普开发有限公司 | 盘驱动器数据加密 |
CN101833618A (zh) * | 2010-04-16 | 2010-09-15 | 中山大学 | 一种基于内容的加密、解密方法及安全保护系统 |
CN103136456A (zh) * | 2011-11-28 | 2013-06-05 | 鸿富锦精密工业(深圳)有限公司 | 数据加密存储系统及方法 |
CN102624931A (zh) * | 2012-04-21 | 2012-08-01 | 华为技术有限公司 | Web客户端与服务器交互的方法、装置及系统 |
CN105450662A (zh) * | 2015-12-25 | 2016-03-30 | 小米科技有限责任公司 | 加密方法及装置 |
CN108399319A (zh) * | 2017-09-30 | 2018-08-14 | 平安科技(深圳)有限公司 | 源代码保护方法、应用服务器及计算机可读存储介质 |
CN108076050A (zh) * | 2017-11-15 | 2018-05-25 | 广州鑫燕网络科技有限公司 | 一种密文封箱式保护JavaScript源码的方法及系统 |
CN109918917A (zh) * | 2019-03-19 | 2019-06-21 | 北京智游网安科技有限公司 | 防止h5源码泄漏的方法、计算机设备和存储介质 |
CN110069905A (zh) * | 2019-04-26 | 2019-07-30 | 深圳智慧园区信息技术有限公司 | 一种Springboot程序加密和解密的装置及方法 |
Non-Patent Citations (1)
Title |
---|
黑马程序员: "《LotusScript与Formula应用手册》", 华南理工大学出版社, pages: 467 - 476 * |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113987471A (zh) * | 2021-10-29 | 2022-01-28 | 山西大鲲智联科技有限公司 | 可执行文件执行方法、装置、电子设备和计算机可读介质 |
CN114389847A (zh) * | 2021-12-15 | 2022-04-22 | 北京达佳互联信息技术有限公司 | 访问请求加密方法、装置、电子设备及存储介质 |
CN114389847B (zh) * | 2021-12-15 | 2024-02-06 | 北京达佳互联信息技术有限公司 | 访问请求加密方法、装置、电子设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Xue et al. | Malton: Towards {On-Device}{Non-Invasive} Mobile Malware Analysis for {ART} | |
US10891369B2 (en) | Dynamic switching between pointer authentication regimes | |
US9230099B1 (en) | Systems and methods for combining static and dynamic code analysis | |
JP3657179B2 (ja) | 実行可能モジュールおよび関連する保護サービス・プロバイダ・モジュールの完全性を監視するための方法およびシステム | |
US20180211046A1 (en) | Analysis and control of code flow and data flow | |
US10984096B2 (en) | Systems, methods, and apparatus for detecting control flow attacks | |
CN113569244B (zh) | 一种基于处理器跟踪的内存恶意代码检测方法 | |
Bai et al. | Towards model checking android applications | |
US8667298B2 (en) | Module signing for unprivileged users to create and load trustworthy kernel modules | |
Song et al. | Model-checking for android malware detection | |
CN109117201B (zh) | 一种程序退出的方法及相关设备 | |
US20240143739A1 (en) | Intelligent obfuscation of mobile applications | |
KR20070118074A (ko) | 외래 코드 검출을 위한 시스템 및 방법 | |
CN109271789B (zh) | 恶意进程检测方法、装置、电子设备及存储介质 | |
US11055416B2 (en) | Detecting vulnerabilities in applications during execution | |
WO2015178895A1 (en) | Point-wise protection of application using runtime agent | |
Cho et al. | Anti-debugging scheme for protecting mobile apps on android platform | |
CN113051034A (zh) | 一种基于kprobes的容器访问控制方法与系统 | |
CN111367505A (zh) | 一种JavaScript源代码保密方法、装置、设备及存储介质 | |
Gao et al. | Borrowing your enemy’s arrows: the case of code reuse in android via direct inter-app code invocation | |
Filho et al. | Evasion and countermeasures techniques to detect dynamic binary instrumentation frameworks | |
Ohm et al. | You Can Run But You Can't Hide: Runtime Protection Against Malicious Package Updates For Node. js | |
CN116204891B (zh) | 漏洞利用分析方法、设备及存储介质 | |
CN112287357A (zh) | 一种针对嵌入式裸机系统的控制流验证方法与系统 | |
US10095605B2 (en) | Debugger write interceptor |
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 |
Application publication date: 20200703 |
|
RJ01 | Rejection of invention patent application after publication |