CN105630526A - 脚本的加载控制方法及装置 - Google Patents
脚本的加载控制方法及装置 Download PDFInfo
- Publication number
- CN105630526A CN105630526A CN201410610794.3A CN201410610794A CN105630526A CN 105630526 A CN105630526 A CN 105630526A CN 201410610794 A CN201410610794 A CN 201410610794A CN 105630526 A CN105630526 A CN 105630526A
- Authority
- CN
- China
- Prior art keywords
- script
- file
- script engine
- instruction
- engine
- 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.)
- Granted
Links
Abstract
本申请实施例公开了脚本的加载控制方法及装置,其中,所述方法包括:启动脚本引擎,并将文件系统下的预置文件路径作为参数传递给所述脚本引擎;在脚本引擎的进程空间内新申请预置大小的内存空间;获取脚本内容,并将获取的脚本内容写入所述内存空间中;监控所述脚本引擎对文件操作类函数的调用行为;当监控到所述脚本引擎调用文件操作类函数时,截获脚本引擎的操作指令,并对所述操作指令进行分析;根据分析结果执行对应操作;其中,如果经分析所述操作指令为打开或读写操作指令,且指向所述预置文件路径,则对所述内存空间内的所述脚本内容执行对应操作,并将操作结果返回给所述脚本引擎。本方法能够大大降低了脚本在使用过程中被泄漏的可能。
Description
技术领域
本申请实施例涉及脚本应用技术领域,特别是涉及脚本的加载控制方法及装置。
背景技术
脚本语言,具有语法和结构简单,可以进行快速开发和部署,学习周期短等特点。与传统的系统编程语言相比较,脚本语言在使用的过程中无需编译等步骤,还可以在一些应用中与高级编程语言集成使用。脚本语言发展到现在,几乎计算机系统的各个层次都有至少一种脚本语言可以使用。脚本语言的种种优点,使得其在许多具有计算机自动化数据处理需求的应用中被广泛使用。
脚本语言是一种解释型语言,根据使用方式的不同,脚本语言可分为独立型和嵌入型两种,独立型脚本语言在其执行时依赖于解释器,而嵌入型脚本语言通常在编程语言中被嵌入使用。脚本代码作为脚本语言表达形式,可以被保存在脚本文件中,在使用的过程中,作为脚本语言载体的脚本文件可以被解释器加载,并由解释器对脚本文件中的代码逐行进行解释和执行。
在多数情况下,开发者往往希望应用程序所使用的脚本文件的内容对用户是不可见的,这是因为,一方面,脚本文件本身存储的各行代码为应用程序指示了数据的处理流程,一旦脚本文件被修改,则可能造成应用程序执行流程的错乱,程序崩溃甚至用户数据丢失等严重后果;另一方面,在一部分脚本文件中,存储有需要保密的信息,例如,用户登录数据等,如果脚本文件泄漏,则保密信息也可能会随之泄漏。
在现有技术中,脚本文件的来源通常是从服务器下载或通过应用程序生成,然后将脚本文件保存在文件系统中供脚本引擎加载使用。为防止脚本文件泄露,目前通常是通过使用隐秘的文件路径存储脚本文件,以及在脚本运行后立即删除脚本文件等手段。但文件系统中仍旧存在保存脚本文件的步骤,导致脚本文件始终有很高的泄露风险。总之,目前采用的技术手段无法从根本上避免脚本文件内容的泄露。
综上所述,亟需本领域技术人员解决的技术问题是,提供一种脚本的加载控制方法,更好解决脚本在使用过程中容易泄漏的问题。
发明内容
本申请提供了脚本的加载控制方法,可以大大降低了脚本在使用过程中被泄漏的可能。
本申请提供了如下方案:
一种脚本的加载控制方法,包括:
启动脚本引擎,并将文件系统下的预置文件路径作为参数传递给所述脚本引擎,以便所述脚本引擎根据所述预置文件路径进行启动;其中,所述文件路径下不保存待执行的脚本文件;
在所述脚本引擎的进程空间内新申请预置大小的内存空间;
获取脚本内容,并将获取的脚本内容写入所述内存空间中;
监控所述脚本引擎对文件操作类函数的调用行为;
当监控到所述脚本引擎调用所述文件操作类函数时,截获所述脚本引擎的操作指令,并对所述操作指令进行分析;
根据分析结果执行对应操作;其中,如果经分析所述操作指令为打开或读写操作指令,且指向所述预置文件路径,则对所述内存空间内的所述脚本内容执行对应操作,并将操作结果返回给所述脚本引擎,以便模拟脚本引擎对文件系统中的脚本文件的操作。
一种脚本的加载控制装置,包括:
引擎启动单元,用于启动脚本引擎,并将文件系统下的预置文件路径作为参数传递给所述脚本引擎,以便所述脚本引擎根据所述预置文件路径进行启动;其中,所述文件路径下不保存待执行的脚本文件;
内存空间申请单元,用于在所述脚本引擎的进程空间内新申请预置大小的内存空间;
脚本内容加载单元,用于获取脚本内容,并将获取的脚本内容写入所述内存空间中;
函数调用监控单元,用于监控所述脚本引擎对文件操作类函数的调用行为;
指令截获分析单元,用于当监控到所述脚本引擎调用所述文件操作类函数时,截获所述脚本引擎的操作指令,并对所述操作指令进行分析;
指令处理单元,用于根据分析结果执行对应操作;其中,如果经分析所述操作指令为打开或读写操作指令,且指向所述预置文件路径,则对所述内存空间内的所述脚本内容执行对应操作,并将操作结果返回给所述脚本引擎,以便模拟脚本引擎对文件系统中的脚本文件的操作。
根据本申请提供的具体实施例,本申请公开了以下技术效果:
通过本申请实施例,可以在启动脚本引擎,并将文件系统下的预置文件路径作为参数传递给脚本引擎,在该文件路径下并不保存待执行的脚本文件。脚本引擎所要执行的脚本内容,可以写入到在脚本引擎的进程空间内新申请的内存空间中,进而,在脚本引擎执行的过程中,监控脚本引擎对文件操作类函数的调用行为,截获脚本引擎的操作指令。在脚本引擎发出特定类型的操作指令调用文件操作类函数,对预置文件路径的文件对象进行操作时,将操作转化为对内存空间中脚本内容的操作,进而将操作结果返回给脚本引擎。特别是打开和读写操作,实际上都会在内存空间的脚本内容上进行。本申请实现了一种脚本的加载控制方法,在脚本引擎加载和执行脚本内容的过程中,始终以内存作为脚本内容的存储载体,脚本内容并不会存储在文件系统中,从而大大降低了脚本在使用过程中被泄漏的可能。
当然,实施本申请的任一产品并不一定需要同时达到以上所述的所有优点。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例提供的方法的流程图;
图2是本申请实施例提供的装置的示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员所获得的所有其他实施例,都属于本申请保护的范围。
请参看图1,其为本申请实施例提供的脚本的加载控制方法的流程图,如图1所示,该方法可以包括以下步骤:
S101:启动脚本引擎,并将文件系统下的预置文件路径作为参数传递给所述脚本引擎,以便所述脚本引擎根据所述预置文件路径进行启动;其中,所述文件路径下不保存待执行的脚本文件;
脚本引擎作为脚本语言的解析器,可以被其它应用程序调用,来实现对脚本文件的加载,以及对脚本文件内的脚本内容的解释和执行等。脚本引擎在启动的过程中,通常以文件系统中的某一文件路径作为启动参数之一,以便在该路径下读取预置的脚本文件。在本申请实施例提供的方法中,在启动脚本引擎的过程中,首先可以以预置的文件路径作为参数,将该参数传递给脚本引擎,以便于脚本引擎根据该预置的文件路径进行启动。与现有技术不同的是,在该文件路径下并不保存待执行的脚本文件。
S102:在所述脚本引擎的进程空间内,新申请预置大小的内存空间;
在脚本引擎被调用后,操作系统通常会分配一定数量的内存作为脚本引擎的进程空间。在脚本引擎根据预置的文件路径启动后,可以在脚本引擎的进程空间内申请预置大小的内存空间。这部分内存空间主要用于写入脚本内容,以及备份一些数据。具体申请的这部分内存空间的大小,可以根据脚本引擎要执行的脚本内容的量,以及要备份的数据量来确定。
S103:获取脚本内容,并将获取的脚本内容写入所述内存空间中;
在成功申请到预置大小的内存空间后,可以获取所要执行的脚本内容,具体在获取脚本内容时,一种实现方式可以是获取客户端工具自动生成的脚本内容,另外,也可以向服务器发送下发脚本内容的请求,并接收服务器响应该下发请求而下发的脚本内容。与现有技术中,将脚本文件作为脚本内容的载体,而将脚本文件存储在本地文件系统中的方法不同,在本申请实施例提供的方法中,文件系统中(例如,步骤S101中所述的预置文件路径中)并不会存放以待执行脚本内容为数据的脚本文件,而是将待执行的脚本内容直接加载到内存空间中,供脚本引擎解释和执行。具体的,可以在获取到脚本内容后,将获取的脚本内容写入到步骤S102中所申请的预置大小的内存空间中。
S104:监控所述脚本引擎对文件操作类函数的调用行为;
如前所述,脚本引擎的启动是根据文件系统中的预置文件路径进行的,当脚本引擎对该预置文件路径对应的脚本文件进行操作时,文件操作的对象仍然是该预置文件路径对应的脚本文件。但在文件系统中,该预置文件路径对应的脚本文件是不存在的,或者该预置文件路径下的文件并没有保存脚本引擎所需的脚本内容。为了使脚本引擎能够正常加载和执行脚本内容,可以将脚本引擎对预置文件路径对应的脚本文件进行的操作(例如,读取脚本文件以加载脚本内容的操作),转换为对前述内存空间内的脚本内容的操作,即将本引擎特定操作的操作对象转换为前述的内存空间内的脚本内容。为了实现这一目的,可以对脚本引擎调用文件操作类函数的行为进行截获,并将操作对象修改为内存空间内的脚本内容。这是因为,在脚本引擎运行的过程中,对预置文件路径对应的脚本文件进行的操作,诸如打开脚本文件、对脚本文件内容的读取等等,都会通过调用对应的文件操作类函数来实现,因而可以通过截获脚本引擎对特定文件操作类函数的调用,并修改其执行对象,来实现上述转换。
首先,可以监控脚本引擎对文件操作类函数的调用行为。在实际应用中,所要监控的脚本引擎调用的文件操作类函数主要包括文件打开函数,文件创建函数,文件读/写函数,文件句柄关闭函数等。具体实现时,可以通过向脚本引擎或调用脚本引擎的应用程序中注入监控模块,通过监控模块来实现对脚本引擎调用文件操作类函数的行为的监控。例如,在Windows操作系统中,可以通过加载预置的动态链接库DLL,以监控脚本引擎调用文件操作类函数的行为。
需要说明的是,加载动态链接库的动作可以是在脚本引擎启动成功后,且在脚本引擎加载脚本内容之前,这样可以保证脚本引擎启动后,调用文件操作指令的行为被立即截获,进而使脚本引擎可以成功加载内存空间中的脚本内容。因此,具体在实现加载监控模块时,例如,加载动态链接库DLL时,可以在脚本引擎根据预置文件路径进行启动成功后,立即暂停脚本引擎的运行,待监控模块加载成功后在恢复脚本引擎的正常运行。下面以在Windows操作系统平台中,加载动态链接库DLL方式实现的监控模块为例进行介绍。
在脚本引擎以预置的文件路径启动成功后,可以立即暂停脚本引擎的运行,然后加载预置的DLL。具体实现时,可以在应用程序调用脚本引擎并在脚本引擎暂停运行后,定位脚本引擎入口处的内存地址,在脚本引擎入口处保存了脚本引擎启动后要执行的入口指令,此时,可以对脚本引擎入口处内存地址的入口指令进行修改,将脚本引擎入口的内存地址处保存的原始指令修改为预置指令,然后恢复脚本引擎的运行。此时,脚本引擎仍会从该入口处的指令开始执行,但该入口出的指令已被修改为预置的指令。预置指令可以是用于命令脚本引擎通过调用预置函数加载预置的动态链接库DLL的指令,该预置指令被执行后,便可以将预置的DLL注入到脚本引擎中。该加载预置DLL指令的原型如下;
callloadlibary(DLL文件名或文件路径,…);
预置的DLL被注入后,可以通过其中的主函数模块完成对脚本引擎调用行为的监控。此外,脚本引擎文件操作指令的截获,分析脚本引擎操作脚本文件的操作指令,根据分析结果执行对应操作等等,也可以通过该预置的DLL中的函数模块来实现。另外,还可以在预置指令后的内存地址处保存新申请的内存空间的地址,以供该DLL中的某些函数作为参数进行调用。例如,当通过对前述内存空间中的脚本内容的操作模拟文件操作时,可以将新申请的内存空间的地址传递给相应的函数模块。
此外,在将脚本引擎入口的内存地址处保存的原始指令修改为预置指令之前,可以将入口内存地址处的原始指令进行备份,如将原始指令备份在上述新申请的内存空间中。在动态链接库DLL的主函数返回后,可以将内存空间中备份的原始指令写回到脚本引擎入口的内存地址处,以便于脚本引擎继续从入口的内存地址处执行该原始指令,恢复脚本引擎的执行流程。具体实现脚本引擎的恢复时,可以在DLL中实现一个引擎执行恢复函数DoJump,并在DLL的主函数返回后调用该函数DoJump,通过DoJump函数来实现将备份的原始指令写回到脚本引擎入口的内存地址处。具体实现时,可以在修改脚本引擎入口处内存地址的入口指令时,将跳转至DoJump的地址的跳转指令写在“Callloadlibary”指令后的内存地址处。该跳转指令的原型如下:
jumpDoJump函数地址;
需要说明的是,由于在写入该指令时,预置DLL文件并未加载,而DoJump函数是在预置DLL文件中实现的,因而在写入指令时DoJump函数地址并未分配,因而,可以在预置DLL加载后(此时DLL中DoJump函数也会被加载并且具有了对应的函数地址),在执行DLL主函数的过程中,对跳转指令中DoJump函数地址进行更新,这样在DLL主函数返回后,跳转指令就可以根据其中保存的正确的DoJump函数地址,顺利地跳转执行DoJump函数,将原始指令恢复到脚本引擎入口的内存地址处。
S105:当监控到所述脚本引擎调用所述文件操作类函数时,截获所述脚本引擎的操作指令,并对所述操作指令进行分析;
在监控模块加载完成后,恢复脚本引擎自身的执行流程,脚本引擎会执行一系列的脚本文件操作。脚本引擎实现的脚本文件操作是通过调用文件操作类函数来实现的。当监控到脚本引擎调用文件操作类函数时,可以对脚本引擎调用文件操作函数的操作指令进行截获,并对操作指令进行分析。在分析脚本引擎调用文件操作函数的操作指令时,主要的分析两方面的内容:一方面是操作函数本身的类型,即脚本引擎所调用的函数是什么类型的函数,例如,是文件读写函数,还是文件创建函数等等;另一方面是操作函数的操作对象,即脚本引擎调用文件操作函数是要对什么对象进行操作。
S106:根据分析结果执行对应操作;其中,如果经分析所述操作指令为打开或读写操作指令,且指向所述预置文件路径,则对所述内存空间内的所述脚本内容执行对应操作,并将操作结果返回给所述脚本引擎,以便模拟脚本引擎对文件系统中的脚本文件的操作。
在对脚本引擎调用文件操作函数的操作指令进行分析后,可以根据分析结果执行对应的操作。如前所述,对操作指令的分析主要包括两方面的内容:操作函数本身的类型,以及所调用函数的操作对象。在根据分析结果执行对应操作时,可以根据操作函数本身的类型以及操作对象,来确定执行什么样的操作。脚本引擎执行脚本内容的解析和执行,通常会加载脚本文件,在本申请实施例提供的方法中,脚本引擎是以预置文件路径为参数进行启动的,脚本文件在运行的过程中,会调用文件操作函数,并以预置文件路径对应的文件对象进行操作。通过对脚本引擎调用文件操作指令的分析,可以得到指令的类型以及指令的操作对象,进而可以根据指令的类型以及指令的操作对象,将脚本引擎以预置文件路径对应文件为操作对象的特定操作指令识别出来,进而将对应操作转换为对内存空间内脚本内容的操作,并在需要时将操作结果返回给脚本引擎。
例如,脚本引擎要加载脚本文件而调用的打开文件的操作指令,以及读/写文件的操作指令,当截获的操作指令经过分析为打开或读写操作指令,且指向预置文件路径时,可以对内存空间内的脚本内容执行对应的打开,或者读写操作,并将操作结果返回给脚本引擎。通过对内存空间内的脚本内容执行对应操作并将操作结果返回给脚本引擎,可以模拟脚本引擎对文件系统中的脚本文件的操作,而使脚本引擎得到正确的返回结果,整个过程对于脚本引擎来说是透明的,最重要的是,脚本引擎对脚本文件的操作被转换为对内存空间内脚本内容的操作,脚本内容不会以脚本文件的形式存储到文件系统中。例如,当操作指令为读操作指令时,可以对操作指令进行截获,并对内存空间内的脚本内容的读取,并将读取到的脚本内容返回给脚本引擎,从而实现了从内存空间中读取脚本内容给脚本引擎,而不经过文件系统的存储。
脚本引擎在执行过程中,还可能会调用诸如文件创建指令,如果经过分析,脚本引擎所发出的文件创建指令指向预置的文件路径时,可以在截获该指令后,在预置文件路径下创建一空文件,并将创建空文件的文件句柄返回给脚本引擎,脚本引擎在接收到文件句柄后,会认为文件创建成功,进而继续执行接下来的步骤。在这种情况下,脚本引擎以预置文件路径的文件作为操作对象的操作,会以该文件句柄来进行。此时,如果脚本引擎以该文件句柄为操作对象执行文件的打开指令或者写指令时,则可以在截获打开指令或者写指令后,对内存空间内的脚本内容的执行打开或者写操作,进而将已打开或者已写入的通知信息作为操作结果返回给脚本引擎。同理,如果操作指令为文件读指令,且指向该文件句柄,则可以读取内存空间内的脚本内容,并将读取到的脚本内容作为操作结果返回给脚本引擎。以及,如果经分析操作指令为文件关闭指令,且指向文件句柄,则在截获文件关闭指令后,删除所保存的空文件的文件句柄,并关闭空文件,并将文件关闭成功的结果返回给脚本引擎。
此外,在脚本引擎执行完毕内存空间中的脚本内容后,例如,当截获到脚本引擎发出关闭文件的操作指令,并其操作对象为前述文件句柄时,可以清空内存空间中的所述脚本内容,以清空内存中脚本内容的数据,进一步保证脚本数据不被泄漏;同时还可以释放该内存空间,被释放的内存空间可以供其它应用进行使用。
以上对本申请实施例提供的脚本的加载控制方法进行了详细的介绍,通过该方法,可以在启动脚本引擎,并将文件系统下的预置文件路径作为参数传递给脚本引擎,在该文件路径下并不保存待执行的脚本文件。脚本引擎所要执行的脚本内容,可以写入到在脚本引擎的进程空间内新申请的内存空间中,进而,在脚本引擎执行的过程中,监控脚本引擎对文件操作类函数的调用行为,截获脚本引擎的操作指令。在脚本引擎发出特定类型的操作指令调用文件操作类函数,对预置文件路径的文件对象进行操作时,将操作转化为对内存空间中脚本内容的操作,进而将操作结果返回给脚本引擎。特别是打开和读写操作,实际上都会在内存空间的脚本内容上进行。本申请实现了一种脚本的加载控制方法,在脚本引擎加载和执行脚本内容的过程中,始终以内存作为脚本内容的存储载体,脚本内容并不会存储在文件系统中,从而大大降低了脚本在使用过程中被泄漏的可能。
与本申请实施例提供的脚本的加载控制方法相对应,本申请实施例还提供了脚本的加载控制装置。请参看图2,为本申请实施例提供的脚本的加载控制装置的示意图,如图2所示,该装置可以包括:
引擎启动单元201,用于启动脚本引擎,并将文件系统下的预置文件路径作为参数传递给脚本引擎,以便脚本引擎根据预置文件路径进行启动;其中,文件路径下不保存待执行的脚本文件;
内存空间申请单元202,用于在脚本引擎的进程空间内新申请预置大小的内存空间;
脚本内容加载单元203,用于获取脚本内容,并将获取的脚本内容写入内存空间中;
函数调用监控单元204,用于监控脚本引擎对文件操作类函数的调用行为;
指令截获分析单元205,用于当监控到脚本引擎调用文件操作类函数时,截获脚本引擎的操作指令,并对操作指令进行分析;
指令处理单元206,用于根据分析结果执行对应操作;其中,如果经分析操作指令为打开或读写操作指令,且指向预置文件路径,则对内存空间内的脚本内容执行对应操作,并将操作结果返回给脚本引擎,以便模拟脚本引擎对文件系统中的脚本文件的操作。
在另一种实现方式下,该脚本的加载控制装置还可以包括:
引擎暂停单元,用于在脚本引擎根据预置文件路径进行启动成功后,暂停脚本引擎的运行;
入口地址定位单元,用于定位脚本引擎入口的内存地址;
入口指令修改单元,用于将脚本引擎入口的内存地址处保存的原始指令修改为预置指令;
内存地址保存单元,用于在预置指令后的内存地址处保存新申请的内存空间的地址;
引擎恢复单元,用于恢复脚本引擎的运行,以便脚本引擎执行入口的内存地址处的预置指令;其中,预置指令用于命令脚本引擎通过调用预置函数加载预置的动态链接库DLL,以便将DLL注入到脚本引擎中,并通过DLL的主函数完成对脚本引擎调用行为的监控,操作指令的截获,以及分析脚本引擎操作脚本文件的操作指令,根据分析结果执行对应操作的步骤。
在将脚本引擎入口的内存地址处保存的原始指令修改为预置指令之前,可以将入口内存地址处的原始指令进行备份,便于后续将备份的原始指令写回到脚本引擎入口的内存地址处,恢复脚本引擎的执行流程。在这种实现方式下,该脚本的加载控制装置还可以包括:
原始指令备份单元,用于在将脚本引擎入口的内存地址处保存的原始指令修改为预置指令之前,在新申请的内存空间中将原始指令进行备份;
原始指令写回单元,用于在动态链接库的主函数返回后,将内存空间中备份的原始指令写回脚本引擎入口的内存地址处,以便于脚本引擎继续从入口的内存地址处执行原始指令。
在另一种实现方式下,如果经指令截获分析单元205分析操作指令为文件创建指令,且指向预置文件路径,指令处理单元206可以包括:
空文件创建子单元,用于在预置文件路径下创建一空文件;
文件句柄返回子单元,用于将创建空文件的文件句柄返回给脚本引擎。
在这种实现方式下,在脚本引擎后续执行的过程中,如果经指令截获分析单元205分析操作指令为文件打开指令或者写指令,且指向文件句柄,指令处理单元206可以包括:
内存内容执行子单元,用于对内存空间内的脚本内容的执行打开或者写操作;
通知返回子单元,用于将已打开或者已写入的通知信息作为操作结果返回给脚本引擎。
另外,如果经指令截获分析单元205分析操作指令为文件读指令,且指向文件句柄,指令处理单元206可以包括:
内存内容读取子单元,用于读取内存空间内的脚本内容;
操作结果返回子单元,用于将读取到的脚本内容作为操作结果返回给脚本引擎。
再者,如果经指令截获分析单元205分析操作指令为文件关闭指令,且指向文件句柄,指令处理单元206可以包括:
文件关闭子单元,用于删除所保存的空文件的文件句柄,并关闭空文件。
在又一种实现方式下,脚本内容加载单元203具体可以用于:
向服务器发送下发脚本内容的请求,并接收服务器响应请求而下发的脚本内容。
再一种实现方式下,该脚本的加载控制装置还可以包括:
内存空间清理单元,用于在脚本引擎执行完毕内存空间中的脚本内容后,清空内存空间中的脚本内容并释放内存空间,进一步保证脚本数据不被泄漏。
以上对本申请实施例提供的脚本的加载控制装置进行了详细的介绍,通过该装置,可以在启动脚本引擎,并将文件系统下的预置文件路径作为参数传递给脚本引擎,在该文件路径下并不保存待执行的脚本文件。脚本引擎所要执行的脚本内容,可以写入到在脚本引擎的进程空间内新申请的内存空间中,进而,在脚本引擎执行的过程中,监控脚本引擎对文件操作类函数的调用行为,截获脚本引擎的操作指令。在脚本引擎发出特定类型的操作指令调用文件操作类函数,对预置文件路径的文件对象进行操作时,将操作转化为对内存空间中脚本内容的操作,进而将操作结果返回给脚本引擎。特别是打开和读写操作,实际上都会在内存空间的脚本内容上进行。该装置可以使脚本引擎在加载和执行脚本内容的过程中,始终以内存作为脚本内容的存储载体,脚本内容并不会存储在文件系统中,从而大大降低了脚本在使用过程中被泄漏的可能性。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本申请可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例或者实施例的某些部分所述的方法。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统或系统实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的系统及系统实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
以上对本申请所提供的脚本的加载控制方法及装置,进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处。综上所述,本说明书内容不应理解为对本申请的限制。
Claims (18)
1.一种脚本的加载控制方法,其特征在于,包括:
启动脚本引擎,并将文件系统下的预置文件路径作为参数传递给所述脚本引擎,以便所述脚本引擎根据所述预置文件路径进行启动;其中,所述文件路径下不保存待执行的脚本文件;
在所述脚本引擎的进程空间内新申请预置大小的内存空间;
获取脚本内容,并将获取的脚本内容写入所述内存空间中;
监控所述脚本引擎对文件操作类函数的调用行为;
当监控到所述脚本引擎调用所述文件操作类函数时,截获所述脚本引擎的操作指令,并对所述操作指令进行分析;
根据分析结果执行对应操作;其中,如果经分析所述操作指令为打开或读写操作指令,且指向所述预置文件路径,则对所述内存空间内的所述脚本内容执行对应操作,并将操作结果返回给所述脚本引擎,以便模拟脚本引擎对文件系统中的脚本文件的操作。
2.根据权利要求1所述的方法,其特征在于,还包括:
在所述脚本引擎根据所述预置文件路径进行启动成功后,暂停所述脚本引擎的运行;
定位所述脚本引擎入口的内存地址;
将所述脚本引擎入口的内存地址处保存的原始指令修改为预置指令;
在所述预置指令后的内存地址处保存所述新申请的内存空间的地址;
恢复所述脚本引擎的运行,以便所述脚本引擎执行所述入口的内存地址处的所述预置指令;
其中,所述预置指令用于命令所述脚本引擎通过调用预置函数加载预置的动态链接库DLL,以便将所述DLL注入到所述脚本引擎中,并通过所述DLL的主函数完成所述对所述脚本引擎调用行为的监控,操作指令的截获,以及分析所述脚本引擎操作脚本文件的操作指令,根据分析结果执行对应操作的步骤。
3.根据权利要求2所述的方法,其特征在于,还包括:
在将所述脚本引擎入口的内存地址处保存的原始指令修改为预置指令之前,在所述新申请的内存空间中将所述原始指令进行备份;
在所述动态链接库的主函数返回后,将所述内存空间中备份的原始指令写回所述脚本引擎入口的内存地址处,以便于所述脚本引擎继续从所述入口的内存地址处执行所述原始指令。
4.根据权利要求1所述的方法,其特征在于,如果经分析所述操作指令为文件创建指令,且指向所述预置文件路径,所述根据分析结果执行对应操作,包括:
在所述预置文件路径下创建一空文件;
将创建所述空文件的文件句柄返回给所述脚本引擎。
5.根据权利要求4所述的方法,其特征在于,如果所述操作指令为文件打开指令或者写指令,且指向所述文件句柄,所述根据分析结果执行对应操作,包括:
对所述内存空间内的所述脚本内容的执行打开或者写操作;
将已打开或者已写入的通知信息作为操作结果返回给所述脚本引擎。
6.根据权利要求4所述的方法,其特征在于,如果所述操作指令为文件读指令,且指向所述文件句柄,所述根据分析结果执行对应操作,包括:
读取所述内存空间内的所述脚本内容;
将读取到的脚本内容作为操作结果返回给所述脚本引擎。
7.根据权利要求4所述的方法,其特征在于,如果经分析所述操作指令为文件关闭指令,且指向所述文件句柄,所述根据分析结果执行对应操作,包括:
删除所保存的所述空文件的文件句柄,并关闭所述空文件。
8.根据权利要求1至7任一项所述的方法,所述获取脚本内容,包括:
向服务器发送下发脚本内容的请求,并接收服务器响应所述请求而下发的脚本内容。
9.根据权利要求1至7任一项所述的方法,还包括:
在脚本引擎执行完毕所述内存空间中的脚本内容后,清空所述内存空间中的所述脚本内容并释放所述内存空间。
10.一种脚本的加载控制装置,其特征在于,包括:
引擎启动单元,用于启动脚本引擎,并将文件系统下的预置文件路径作为参数传递给所述脚本引擎,以便所述脚本引擎根据所述预置文件路径进行启动;其中,所述文件路径下不保存待执行的脚本文件;
内存空间申请单元,用于在所述脚本引擎的进程空间内新申请预置大小的内存空间;
脚本内容加载单元,用于获取脚本内容,并将获取的脚本内容写入所述内存空间中;
函数调用监控单元,用于监控所述脚本引擎对文件操作类函数的调用行为;
指令截获分析单元,用于当监控到所述脚本引擎调用所述文件操作类函数时,截获所述脚本引擎的操作指令,并对所述操作指令进行分析;
指令处理单元,用于根据分析结果执行对应操作;其中,如果经分析所述操作指令为打开或读写操作指令,且指向所述预置文件路径,则对所述内存空间内的所述脚本内容执行对应操作,并将操作结果返回给所述脚本引擎,以便模拟脚本引擎对文件系统中的脚本文件的操作。
11.根据权利要求10所述的装置,其特征在于,还包括:
引擎暂停单元,用于在所述脚本引擎根据所述预置文件路径进行启动成功后,暂停所述脚本引擎的运行;
入口地址定位单元,用于定位所述脚本引擎入口的内存地址;
入口指令修改单元,用于将所述脚本引擎入口的内存地址处保存的原始指令修改为预置指令;
内存地址保存单元,用于在所述预置指令后的内存地址处保存所述新申请的内存空间的地址;
引擎恢复单元,用于恢复所述脚本引擎的运行,以便所述脚本引擎执行所述入口的内存地址处的所述预置指令;其中,所述预置指令用于命令所述脚本引擎通过调用预置函数加载预置的动态链接库DLL,以便将所述DLL注入到所述脚本引擎中,并通过所述DLL的主函数完成所述对所述脚本引擎调用行为的监控,操作指令的截获,以及分析所述脚本引擎操作脚本文件的操作指令,根据分析结果执行对应操作的步骤。
12.根据权利要求11所述的装置,其特征在于,还包括:
原始指令备份单元,用于在将所述脚本引擎入口的内存地址处保存的原始指令修改为预置指令之前,在所述新申请的内存空间中将所述原始指令进行备份;
原始指令写回单元,用于在所述动态链接库的主函数返回后,将所述内存空间中备份的原始指令写回所述脚本引擎入口的内存地址处,以便于所述脚本引擎继续从所述入口的内存地址处执行所述原始指令。
13.根据权利要求10所述的装置,其特征在于,如果经分析所述操作指令为文件创建指令,且指向所述预置文件路径,所述指令处理单元,包括:
空文件创建子单元,用于在所述预置文件路径下创建一空文件;
文件句柄返回子单元,用于将创建所述空文件的文件句柄返回给所述脚本引擎。
14.根据权利要求13所述的装置,其特征在于,如果所述操作指令为文件打开指令或者写指令,且指向所述文件句柄,所述指令处理单元,包括:
内存内容执行子单元,用于对所述内存空间内的所述脚本内容的执行打开或者写操作;
通知返回子单元,用于将已打开或者已写入的通知信息作为操作结果返回给所述脚本引擎。
15.根据权利要求13所述的装置,其特征在于,如果所述操作指令为文件读指令,且指向所述文件句柄,所述指令处理单元,包括:
内存内容读取子单元,用于读取所述内存空间内的所述脚本内容;
操作结果返回子单元,用于将读取到的脚本内容作为操作结果返回给所述脚本引擎。
16.根据权利要求13所述的装置,其特征在于,如果经分析所述操作指令为文件关闭指令,且指向所述文件句柄,所述指令处理单元,包括:
文件关闭子单元,用于删除所保存的所述空文件的文件句柄,并关闭所述空文件。
17.根据权利要求10至16任一项所述的装置,所述脚本内容加载单元,具体用于:
向服务器发送下发脚本内容的请求,并接收服务器响应所述请求而下发的脚本内容。
18.根据权利要求10至16任一项所述的装置,还包括:
内存空间清理单元,用于在脚本引擎执行完毕所述内存空间中的脚本内容后,清空所述内存空间中的所述脚本内容,并释放所述内存空间。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410610794.3A CN105630526B (zh) | 2014-11-03 | 2014-11-03 | 脚本的加载控制方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410610794.3A CN105630526B (zh) | 2014-11-03 | 2014-11-03 | 脚本的加载控制方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105630526A true CN105630526A (zh) | 2016-06-01 |
CN105630526B CN105630526B (zh) | 2019-04-19 |
Family
ID=56045513
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410610794.3A Active CN105630526B (zh) | 2014-11-03 | 2014-11-03 | 脚本的加载控制方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105630526B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110825595A (zh) * | 2018-08-13 | 2020-02-21 | 腾讯科技(深圳)有限公司 | 录制回放方法及系统、存储介质 |
CN111414212A (zh) * | 2020-03-27 | 2020-07-14 | 中国平安财产保险股份有限公司 | 全局进程控制方法、装置、计算机设备和存储介质 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030182424A1 (en) * | 2002-03-22 | 2003-09-25 | Steve Odendahl | Scriptable proxy server |
US6986108B2 (en) * | 2002-03-21 | 2006-01-10 | Toshiba Tec Kabushiki Kaisha | System for accessing digital imaging devices |
CN101667230A (zh) * | 2008-09-02 | 2010-03-10 | 北京瑞星国际软件有限公司 | 一种监控脚本执行的方法和装置 |
CN101924982A (zh) * | 2009-06-10 | 2010-12-22 | 中兴通讯股份有限公司 | 一种实现数据类业务的方法及系统 |
CN102402455A (zh) * | 2010-09-14 | 2012-04-04 | 北大方正集团有限公司 | 调用动态链接库的方法和装置 |
CN103514403A (zh) * | 2012-06-18 | 2014-01-15 | 北京一铭昌和科技发展有限公司 | 在js中主动进行安全保护的方法及装置 |
CN103927164A (zh) * | 2014-03-10 | 2014-07-16 | 珠海市君天电子科技有限公司 | 一种脚本混淆方法及系统 |
CN104008316A (zh) * | 2014-06-17 | 2014-08-27 | 合一网络技术(北京)有限公司 | 基于改变脚本环境进行信息隐藏的方法和系统 |
-
2014
- 2014-11-03 CN CN201410610794.3A patent/CN105630526B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6986108B2 (en) * | 2002-03-21 | 2006-01-10 | Toshiba Tec Kabushiki Kaisha | System for accessing digital imaging devices |
US20030182424A1 (en) * | 2002-03-22 | 2003-09-25 | Steve Odendahl | Scriptable proxy server |
CN101667230A (zh) * | 2008-09-02 | 2010-03-10 | 北京瑞星国际软件有限公司 | 一种监控脚本执行的方法和装置 |
CN101924982A (zh) * | 2009-06-10 | 2010-12-22 | 中兴通讯股份有限公司 | 一种实现数据类业务的方法及系统 |
CN102402455A (zh) * | 2010-09-14 | 2012-04-04 | 北大方正集团有限公司 | 调用动态链接库的方法和装置 |
CN103514403A (zh) * | 2012-06-18 | 2014-01-15 | 北京一铭昌和科技发展有限公司 | 在js中主动进行安全保护的方法及装置 |
CN103927164A (zh) * | 2014-03-10 | 2014-07-16 | 珠海市君天电子科技有限公司 | 一种脚本混淆方法及系统 |
CN104008316A (zh) * | 2014-06-17 | 2014-08-27 | 合一网络技术(北京)有限公司 | 基于改变脚本环境进行信息隐藏的方法和系统 |
Non-Patent Citations (1)
Title |
---|
江泽林,刘维: "《 实战MATLAB之文件与数据接口技术》", 31 March 2014 * |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110825595A (zh) * | 2018-08-13 | 2020-02-21 | 腾讯科技(深圳)有限公司 | 录制回放方法及系统、存储介质 |
CN110825595B (zh) * | 2018-08-13 | 2022-12-23 | 腾讯科技(深圳)有限公司 | 录制回放方法及系统、存储介质 |
CN111414212A (zh) * | 2020-03-27 | 2020-07-14 | 中国平安财产保险股份有限公司 | 全局进程控制方法、装置、计算机设备和存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN105630526B (zh) | 2019-04-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US5524190A (en) | Command object logging system for restoring documents | |
EP1582985B1 (en) | Test case inheritance controlled via attributes | |
US6698016B1 (en) | Method for injecting code into another process | |
CN103970563B (zh) | 动态加载安卓类的方法 | |
CN107045438B (zh) | 一种应用顶层视图处理方法、装置及组件 | |
US9824000B1 (en) | Testing calling code dynamically with random error injection based on user-specified configuration | |
CN107463369A (zh) | 一种虚拟桌面的接入设备控制方法与装置 | |
US7567257B2 (en) | Partition-based undo of partitioned object graph | |
CN103309800A (zh) | 一种网页自动化测试方法和系统 | |
US20170004316A1 (en) | Alternate clipboard for secure applications | |
KR102545765B1 (ko) | 메모리 오류를 검출하는 방법 및 시스템 | |
CN104657258A (zh) | 一种向目标进程内注入Java字节码的方法及装置 | |
CN104731622A (zh) | 一种应用程序的加载方法、装置和移动终端 | |
CN110908837A (zh) | 应用程序异常处理方法、装置、电子设备及存储介质 | |
CN105045642A (zh) | 一种自定义类的加载方法及装置 | |
CN103309696B (zh) | 一种Java卡扩展库更新方法、装置和Java卡 | |
CN110362341A (zh) | 基于微服务架构的业务管理方法、装置、设备和存储介质 | |
CN105630526A (zh) | 脚本的加载控制方法及装置 | |
CN112241373A (zh) | 自动化测试方法、测试装置、处理器和测试系统 | |
CN107402761A (zh) | 应用修复方法及装置 | |
US8898625B2 (en) | Optimized storage of function variables | |
US9720807B2 (en) | Using core files to develop diagnostic programs | |
US20230325476A1 (en) | Obfuscation device, obfuscation method, and obfuscation program | |
CN113031964A (zh) | 一种大数据应用的管理方法、装置、设备及存储介质 | |
KR101306656B1 (ko) | 악성코드 동적 분석정보 제공 장치 및 방법 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |