针对混淆脚本语言的定位方法和系统与流程

文档序号:12733475阅读:338来源:国知局
针对混淆脚本语言的定位方法和系统与流程

本申请涉及互联网领域,尤其涉及一种针对混淆脚本语言的定位方法和系统。



背景技术:

在Web应用中,前端代码对用户和浏览器来说都是可见的。为了保护应用的脚本代码,在将产品发布给用户之前通常要对所有的脚本进行混淆,以防止具有恶意目的的其他人轻易的复用该前端代码。

以现有的JavaScript脚本语言为例,目前JavaScript脚本语言混淆的基本方法如下:

1、将所有的注释去掉,然后将所有的回车去掉,最后把多余的空格也去掉,从而将整个文件压缩为一行。

2、对所有局部变量和方法进行重命名,把所有的局部变量名和方法名都变成由1-3个字符组合的,达到进一步压缩和混淆的目的。

但是,脚本混淆在保护前端代码的同时,也增加了排查和诊断问题的难度,因为开发人员得到的错误信息中的变量和函数名是混淆后的变量/函数名称,报错位置也是混淆和压缩后的位置,以至于开发人员很难通过错误信息在源代码中定位问题,更难以分析和解决问题。

继续以上述的JavaScript脚本语言为例,当机器执行混淆后的代码之后,如果报错,则需要开发人员进行调试。因此需要通过代码美化工具进行适度的还原,使得混淆后的代码在结构上看起来更清楚一些,但因为变量名/方法名的替换过程是不可逆的,因此不可能对代码进行完全还原,更不可能找到出错信息对应的源代码中的位置,因此,开发人员仍无法根据机器报出的错误信息轻易地正确定位该错误在源文件中的位置,从而影响了分析并修复错误的效率。



技术实现要素:

鉴于上述问题,提出了本申请实施例以便提供一种克服上述问题或者至少部分地解决上述问题的针对混淆脚本语言的定位方法和系统。

为解决上述问题,本申请公开一种针对混淆脚本语言的定位方法,包括:

解析源代码,并记录所述源代码中的元素名在所述源代码中的位置;

替换所述解析后源代码中的元素名,并记录替换前的元素名与对应的替换后元素名的对应关系;

将替换后的源代码生成可执行代码,并记录所述替换后元素名在所述可执行代码中的位置;

获取所述可执行代码在客户端运行中发生错误的错误报告;

根据所述错误报告中包含的替换后元素名以及所述替换后元素名的位置,确定所对应的替换前的元素名以及所述替换前的元素名的位置。

本申请还公开一种针对混淆脚本语言的定位系统,包括:

代码解析单元,用于解析源代码,并记录所述源代码中的元素名在所述源代码中的位置;

代码替换和记录单元,用于替换所述解析后源代码中的元素名,并记录替换前的元素名与对应的替换后元素名的对应关系;

代码生成和记录单元,用于将替换后的源代码生成可执行代码,并记录所述替换后元素名在所述可执行代码中的位置;

错误报告获取单元,用于获取所述可执行代码在客户端运行中发生错误的错误报告;以及

错误定位单元,用于根据所述错误报告中包含的替换后元素名以及所述替换后元素名的位置,确定所对应的替换前的元素名以及所述替换前的元素名的位置。

本申请实施例至少具有以下优点:

本申请实施例提出的针对混淆脚本语言的定位方法和系统,可以对混淆后代码中的错误信息中的元素进行定位,查找其在源代码中的位置,从而便于分析并修复错误。

附图说明

图1是本申请第一实施例的针对混淆脚本语言的定位方法的流程图。

图2是本申请第二实施例的针对混淆脚本语言的定位方法的流程图。

图3是本申请第三实施例的针对混淆脚本语言的定位方法的流程图。

图4是本申请第四实施例的针对混淆脚本语言的定位系统的方框图。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员所获得的所有其他实施例,都属于本申请保护的范围。

本申请的核心思想之一在于,由于现有技术在混淆脚本语言之后难以将执行时的错误定位到源代码,本申请提供的技术方案在源代码解析的步骤中记录源代码中的元素名在源代码中的位置,并记录替换前后元素名的对应关系,并在生成可执行代码的步骤中记录替换后元素名在可执行代码中的位置。当可执行代码在运行中发生错误,可以根据错误报告中包含的替换后元素名及位置定位到源代码中的元素名和位置,方便开发人员定位和分析执行中遇到的错误。

第一实施例

本申请第一实施例提出一种针对混淆脚本语言的定位方法,如图1所示为本申请第一实施例提出一种针对混淆脚本语言的定位方法的流程图。

步骤101,解析源代码,并记录所述源代码中的元素名在所述源代码中的位置;

源代码中的元素名可以包括局部变量名、全局变量名、常量名、方法名、类名等,在本实施例步骤101中,可以对元素中局部变量名和方法名在源代码中的位置进行记录。

以现有的JavaScript脚本语言为例进行说明,解析源代码可以是通过例 如代码解析器将JavaScript源代码解析为抽象语法树,抽象语法树中的每一节点与JavaScript源代码中的每一元素对应。因此,在这一步骤中可以确定与每一个局部变量名和方法名对应的节点,并将该局部变量名或方法名在源代码中的位置(例如行号、列号)记录在该局部变量名或方法名对应的节点的数据结构中。

作为另一实施例,该元素名在源代码中的位置也可以记录在服务器的其他存储位置,例如新建的文档等,这一记录的位置只要能够关联到解析后该元素名对应的节点即可,并不特别限定其存储位置。

步骤102,替换所述解析后源代码中的元素名,并记录所述源代码中替换前的元素名与对应的替换后元素名的对应关系;

在这一步骤中,以JavaScript脚本语言为例,可以用最短的可用名替换解析后源代码中的元素名,同时将替换前的元素名记录在抽象语法树中对应于替换后元素名的节点的数据结构中。

此时,在抽象语法树的对应于JavaScript源文件的每一个元素名的节点的数据结构中,存储有该元素名在源代码中的位置以及替换后的元素名。由于替换后的元素名与节点相关联,这一步骤中能够建立存储在对应节点的替换后元素名与存储在该节点中的替换前元素名的对应关系。

另外,作为另一种实施例,替换后的元素名也可以被记录在服务器的其他位置,例如新建的文档等,然而这一记录的位置也必须能够关联到解析后该元素名对应的节点。

在这一步骤中,通常遵循如下替换规则:1.当前作用域不同变量混淆后的变量名不能重复,同时混淆后的名字不能是关键字;2.子作用域混淆的变量名不能与父作用域冲突;3.不能混淆全局变量名。

通过上述替换之后,所述抽象语法树的元素名被混淆,让恶意的使用者无法轻易复用上述源代码。

步骤103,将替换后的源代码生成可执行代码,并记录所述替换后元素名在所述可执行代码中的位置;

在这一步骤中,可以通过遍历抽象语法树的方式,将其节点的数据结构 中存储的替换前元素名及位置、以及替换后元素名按顺序写入代码文件,形成可执行代码文件。在此过程中将会获得替换后元素名在可执行代码文件中的位置,之后可以将替换前的变元素名及其位置与替换后元素名及其位置写入元素位置对照表。

在本申请的另一优选的实施例中,元素位置对照表例如包括:

文件名,新元素名称,新元素行号,新元素列号,旧元素名称,旧元素行号,旧元素列号。

步骤104,获取所述可执行代码在客户端运行中发生错误的错误报告;

在这一步骤中,如果可执行代码在被机器执行过程中发生错误,可以通过在浏览器中安装插件,拦截该错误报告。当使用者通过浏览器访问服务器时,可以通过例如弹出对话框的方式提示使用者安装插件。当插件安装完成之后,如对应的网页运行中发生错误,该插件可以拦截错误,并上报至服务器。

步骤105,根据所述错误报告中包含的替换后元素名以及所述替换后元素名的位置,确定所对应的替换前的元素名以及所述替换前的元素名的位置。

在这一步骤中,上述错误中包含了替换后元素名及其位置,可以从上述的元素位置对照表中查找确定替换后元素名和位置对应的源代码中的替换前的元素名和元素名的位置,并将查询得到的源代码中的替换前的元素名和元素名的位置显示给开发人员,便于开发员人定位并进行问题分析。

优选地,在步骤104的获取所述可执行代码在客户端运行中发生错误的错误报告之后,以及步骤105的根据所述错误报告中包含的替换后元素名以及所述替换后元素名的位置,确定所对应的替换前的元素名以及所述替换前的元素名的位置的步骤之前,所述方法还包括:

验证所述上报至服务器的行为是否有效。

在这一步骤中,这一步骤可以通过在浏览器插件中安装验证信息,例如AccessKey,进行验证。只有验证通过,才能进行步骤105,即获取所述错误报告中包含的替换后元素名以及所述替换后元素名的位置,查找确定所对应 的源代码的元素名以及所述源代码的元素的位置,从服务器中查找并显示对应的源代码的元素名以及所述源代码的元素的位置。以避免恶意的使用者窃取服务器中存储的元素位置对应表。

综上所述,本申请实施例提出的针对混淆脚本语言的定位方法,能够对错误信息中的元素进行定位,查找其在源代码中的位置,避免了现有技术中代码运行发生错误后开发人员无法轻易定位到原始解析前的代码中的位置的问题,为开发人员分析并修复错误提供了便利。

第二实施例

图2所示为本申请第二实施例提出一种针对混淆脚本语言的定位方法的流程图。如图2所示,该实施例中针对混淆脚本语言的定位方法包括如下步骤:

步骤201,解析源代码,并记录所述源代码中的元素名在所述源代码中的位置;

步骤202,替换所述解析后源代码中的元素名,并记录替换前的元素名与对应的替换后元素名的对应关系;

上述两个步骤与上一实施例中的步骤101和步骤102相同或相似,在此不再赘述。

步骤203,压缩所述解析后的源代码,并去除注释、空格和/或回车符。

在这一步骤中,为了进一步混淆解析后的源代码,可以将解析后的源代码中的注释、空格和/或回车符去掉,进一步降低代码的可读性。压缩之后的解析后源代码(例如抽象语法树)可以只有一行。

步骤203可以先于步骤202执行,也可以同时或后于步骤202执行,在此并不特别限定。

步骤204,将替换后的所述源代码生成可执行代码,并记录所述替换后元素名在所述可执行代码中的位置;

这一步骤可以与上述第一实施例的步骤103相同或相似,在此不再赘述。

值得注意的是,在一本申请的一实施例中,若压缩后的抽象语法树中回 车符已被删除,所有的新元素可能位于同一行中,因此,可以显示新元素行号为1,或者元素位置对照表中可以不包括新元素行号。

步骤205,获取所述可执行代码在客户端运行中发生错误的错误报告;

步骤206,根据所述错误中包含的替换后元素名以及所述替换后元素名的位置,确定对应的替换前的源代码的元素名以及所述替换前的元素名的位置。

上述步骤205和206也可以与上一实施例中步骤104和105相同或相似,在此不再赘述。

通过上述实施例提出的针对混淆脚本语言的定位方法,能够对错误信息中的元素进行定位,查找其在源代码中的位置,避免了现有技术中代码运行发生错误后开发人员无法轻易定位到原始解析前的代码中的位置的问题,为开发人员分析并修复错误提供了便利。

第三实施例

图3所示为本申请第三实施例提出一种针对混淆脚本语言的定位方法的流程图。如图3所示,该实施例中针对混淆脚本语言的定位方法包括如下步骤:

步骤301,解析源代码,并记录所述源代码中的元素名在所述源代码中的位置;

步骤302,替换所述解析后源代码中的元素名,并记录替换前的元素名与对应的替换后元素名的对应关系;

上述两个步骤与上一实施例中的步骤101和步骤102相同或相似,在此不再赘述。

步骤303,压缩所述解析后的源代码,去除注释、空格和/或回车符。

这一步骤与第二实施例中的步骤203相同或相似,在此不再赘述。同样地,步骤303可以先于步骤302执行,也可以同时或后于步骤302执行,在此并不特别限定。

步骤304,将替换后的所述源代码生成可执行代码,并记录所述替换后 元素名在所述可执行代码中的位置;

在这一步骤中,可与第一实施例步骤103相同或相似,在此不再赘述。

步骤305,记录可执行代码的版本信息;

在这一步骤中,可以将该可执行代码的版本信息记录在元素位置对照表中。生成版本信息的步骤例如可以使用现有的UUID软件来实现,然而本申请并不特别限制。

在这一实施例中,元素位置对照表例如包括:

文件名、版本号、新元素名称、新元素行号、新元素列号、旧元素名称、旧元素行号、旧元素列号。

值得注意的是,在本申请一实施例中,若压缩后的抽象语法树中回车符可能已被删除,因此所有新元素可能位于同一行中,因此,可以显示新元素行号为1,或者元素位置对照表中不包括新元素行号。

步骤306,获取所述可执行代码在客户端运行中发生错误的错误报告;以及

步骤307,根据所述错误报告中包含的替换后元素名以及所述替换后元素名的位置,确定所对应的源代码的元素名以及所述源代码的元素的位置。

这一步骤也可以与上一实施例中步骤104和105相同或相似,在此不再赘述。

优选地,在步骤306的获取所述可执行代码在客户端运行中发生错误的错误报告之后,以及步骤307的根据所述错误报告中包含的替换后元素名以及所述替换后元素名的位置,确定所对应的替换前的元素名以及所述替换前的元素名的位置的步骤之前,所述方法还包括:

验证所述上报至服务器的行为是否有效。

在这一步骤中,这一步骤可以通过在浏览器插件中安装验证信息,例如AccessKey,进行验证。只有验证通过,才能进行步骤307,即获取所述错误报告中包含的替换后元素名以及所述替换后元素名的位置,查找确定所对应的源代码的元素名以及所述源代码的元素的位置。如此可避免恶意的使用者窃取服务器中存储的元素位置对应表。

综上所述,本申请实施例提出的针对混淆脚本语言的定位方法,能够对错误信息中的元素进行定位,查找其在源代码中的位置,避免了现有技术中代码运行发生错误后开发人员无法轻易定位到原始解析前的代码中的位置的问题,为开发人员分析并修复错误提供了便利。

第四实施例

图4所示为本申请第四实施例的针对混淆脚本语言的定位系统的方框图。如图4所示,本申请实施例提出的对混淆脚本语言的定位系统100可以包括:

代码解析单元11,用于解析源代码,并记录所述源代码中的元素名在所述源代码中的位置;

代码替换和记录单元12,用于替换所述解析后源代码中的元素名,并记录替换前的元素名与对应的替换后元素名的对应关系;

代码生成和记录单元13,用于将替换后的源代码生成可执行代码,并记录所述替换后元素名在所述可执行代码中的位置;

错误报告获取单元14,用于获取所述可执行代码在客户端运行中发生错误的错误报告;以及

错误定位单元15,用于根据所述错误报告中包含的替换后元素名以及所述替换后元素名的位置,确定所对应的替换前的元素名以及所述替换前的元素名的位置。

在本申请的另一优选的实施例中,所述元素名可以包括:局部变量名和方法名。

在本申请的另一优选的实施例中,所述代码解析单元11具体用于将所述源代码解析为抽象语法树,并将所述源代码中的元素名在所述源代码中的位置记录在所述抽象语法树中对应于所述元素的节点的数据结构内。

在本申请的另一优选的实施例中,所述代码替换和记录单元12具体用于:

替换所述解析后源代码中的元素名;以及

将所述替换后元素名记录在所述抽象语法树中对应于所述替换前的元素名的节点的数据结构内。

在本申请的另一优选的实施例中,所述代码生成和记录单元13具体用于:

将替换后的源代码生成可执行代码;以及

在元素位置对照表中记录所述替换后元素名在所述可执行代码中的位置,同时将所述替换后元素名对应的替换前的元素名以及所述替换前的元素名的位置写入所述元素位置对照表。

在本申请的另一优选的实施例中,所述系统还包括:

代码压缩单元,用于压缩所述解析后的源代码,去除注释、空格和/或回车符。

在本申请的另一优选的实施例中,所述系统还包括:

代码版本信息记录单元,用于记录可执行代码的版本信息。

在本申请的另一优选的实施例中,所述代码生成和记录单元13具体用于:

在元素位置对照表中记录所述替换后元素名在所述可执行代码中的位置,同时将所述替换后元素名对应的替换前的元素名、所述替换前的元素名的位置、所述可执行代码的版本信息写入所述元素位置对照表。

在本申请的另一优选的实施例中,所述元素名的位置包括所述元素所在的行号和列号,所述元素位置对照表包括:

文件名、版本号、替换后元素名、替换后元素行号、替换后元素列号、源代码中元素名、源代码中元素行号以及源代码中元素列号。

在本申请的另一优选的实施例中,所述定位系统还包括:

验证单元,用于验证所述上报至服务器的行为是否有效。

通过上述实施例提出的针对混淆脚本语言的定位系统,能够对错误信息中的元素进行定位,查找其在源代码中的位置,避免了现有技术中代码运行发生错误后开发人员无法轻易定位到原始解析前的代码中的位置的问题,为开发人员分析并修复错误提供了便利。

对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。

本领域内的技术人员应明白,本申请实施例的实施例可提供为方法、装置、或计算机程序产品。因此,本申请实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。

在一个典型的配置中,所述计算机设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信号存储。信号可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信号。按照本文中的界定,计算机可读介质不包括非持续性的电脑可读媒体(transitory media),如调制的数据信号和载波。

本申请实施例是参照根据本申请实施例的方法、终端设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令 实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

尽管已描述了本申请实施例的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请实施例范围的所有变更和修改。

最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。

以上对本申请所提供的一种针对混淆脚本语言的定位方法和系统,进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。

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