CN110196718B - 脚本混淆方法 - Google Patents

脚本混淆方法 Download PDF

Info

Publication number
CN110196718B
CN110196718B CN201810445003.4A CN201810445003A CN110196718B CN 110196718 B CN110196718 B CN 110196718B CN 201810445003 A CN201810445003 A CN 201810445003A CN 110196718 B CN110196718 B CN 110196718B
Authority
CN
China
Prior art keywords
script
syntax tree
abstract syntax
converting
conversion rule
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.)
Active
Application number
CN201810445003.4A
Other languages
English (en)
Other versions
CN110196718A (zh
Inventor
张小龙
袁丽娜
胡育辉
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN201810445003.4A priority Critical patent/CN110196718B/zh
Publication of CN110196718A publication Critical patent/CN110196718A/zh
Application granted granted Critical
Publication of CN110196718B publication Critical patent/CN110196718B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/12Protecting executable software
    • G06F21/14Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/433Dependency analysis; Data or control flow analysis
    • G06F8/434Pointers; Aliasing

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Technology Law (AREA)
  • Computer Hardware Design (AREA)
  • Computer Security & Cryptography (AREA)
  • Storage Device Security (AREA)
  • Stored Programmes (AREA)

Abstract

本申请提供一种脚本混淆方法,上述脚本混淆方法包括:接收浏览器发送的脚本请求;将所述脚本请求所请求的脚本转换成抽象语法树;对所述抽象语法树按照预定的转换规则进行转换;根据转换后的抽象语法树生成新的脚本;将生成的新的脚本发送给所述浏览器。本申请可以增强破解脚本逻辑的难度,保护脚本的核心代码。

Description

脚本混淆方法
技术领域
本申请涉及计算机技术领域,尤其涉及一种脚本混淆方法。
背景技术
随着科学技术的发展,计算机技术被广泛地应用于各个领域,为人们的工作、学习和日常生活提供了极大的便利。应用范围的扩大和应用深度的扩展,促使计算机的性能不断提高,进而对计算机软件提出了更高的要求。
在这种情况下,脚本语言作为一般程序设计语言的补充,得到了极为迅速的发展。
脚本语言又被称为扩建的语言,或者动态语言,是一种用来控制向用程序的编程语言。由于脚本语言不需要编译,可以直接使用,而且具有小巧和高效的优点,因此越来越多的软件将脚本语言嵌入到软件中,来为应用程序提供灵活的扩展和运制功能。尤其在游戏软件和杀毒软件中,因为程序较为复杂,脚本语言被广泛的使用。相应地,如果脚本代码被泄露,会给用户带来不小的损失,因此需要增强脚本代码的安全性。
通过对脚本代码进行混淆,可以增强脚本的安全性,但现有相关技术所采用的混淆技术比较简单,一般通过简单缩短变量名和/或空格压缩达到混淆的效果,通常是为了减小脚本的体积、提高脚本的性能而使用,混淆后的脚本逻辑基本可见,抗破解性比较差。
发明内容
为克服相关技术中存在的问题,本申请的实施例采用如下技术方案:
第一方面,本申请实施例提供一种脚本混淆方法,包括:接收浏览器发送的脚本请求;将所述脚本请求所请求的脚本转换成抽象语法树;对所述抽象语法树按照预定的转换规则进行转换;根据转换后的抽象语法树生成新的脚本;将生成的新的脚本发送给所述浏览器。
上述脚本混淆方法中,接收浏览器发送的脚本请求之后,将上述脚本请求所请求的脚本转换成抽象语法树(Abstract Syntax Tree;以下简称:AST);对上述AST按照预定的转换规则进行转换,根据转换后的AST生成新的脚本,最后将生成的新的脚本发送给上述浏览器,从而可以增强破解脚本逻辑的难度,保护脚本的核心代码。
第二方面,本申请实施例提供一种脚本混淆装置,包括:接收模块,用于接收浏览器发送的脚本请求;转换模块,用于将所述脚本请求所请求的脚本转换成抽象语法树;以及对所述抽象语法树按照预定的转换规则进行转换;生成模块,用于根据所述转换模块转换后的抽象语法树生成新的脚本;发送模块,用于将所述生成模块生成的新的脚本发送给所述浏览器。
上述脚本混淆装置中,接收模块接收浏览器发送的脚本请求之后,转换模块将上述脚本请求所请求的脚本转换成AST;对上述AST按照预定的转换规则进行转换,生成模块根据转换后的AST生成新的脚本,最后发送模块将生成的新的脚本发送给上述浏览器,从而可以增强破解脚本逻辑的难度,保护脚本的核心代码。
第三方面,本申请实施例提供一种电子设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时,实现如上所述的方法。
第四方面,本申请实施例提供一种非临时性计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如上所述的方法。
第五方面,本申请实施例提供一种计算机程序产品,当所述计算机程序产品中的指令由处理器执行时,执行如上所述的方法。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本申请。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本申请的实施例,并与说明书一起用于解释本申请的原理。
图1为本申请脚本混淆方法一个实施例的流程图;
图2为本申请脚本混淆方法另一个实施例的流程图;
图3为本申请脚本混淆方法再一个实施例的流程图;
图4为本申请脚本混淆方法再一个实施例的流程图;
图5为本申请脚本混淆方法再一个实施例的流程图;
图6为本申请脚本混淆方法再一个实施例的流程图;
图7为本申请脚本混淆方法再一个实施例的流程图;
图8为本申请脚本混淆方法再一个实施例的流程图;
图9为本申请脚本混淆方法再一个实施例的流程图;
图10为本申请脚本混淆方法再一个实施例的流程图;
图11为本申请脚本混淆方法的应用场景一个实施例的示意图;
图12为本申请脚本混淆装置一个实施例的结构示意图;
图13为本申请电子设备一个实施例的结构示意图。
通过上述附图,已示出本申请明确的实施例,后文中将有更详细的描述。这些附图和文字描述并不是为了通过任何方式限制本申请构思的范围,而是通过参考特定实施例为本领域技术人员说明本申请的概念。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。
图1为本申请脚本混淆方法一个实施例的流程图,如图1所示,上述脚本混淆方法可以包括:
步骤101,接收浏览器发送的脚本请求。
步骤102,将上述脚本请求所请求的脚本转换成AST。
本实施例中,上述脚本可以为JavaScript(js)脚本,当然上述脚本也可以采用其他的语音进行编写,但本实施例以脚本为js脚本为例进行说明。
步骤103,对上述AST按照预定的转换规则进行转换。
步骤104,根据转换后的AST生成新的脚本。
步骤105,将生成的新的脚本发送给上述浏览器。
上述脚本混淆方法中,接收浏览器发送的脚本请求之后,将上述脚本请求所请求的脚本转换成AST;对上述AST按照预定的转换规则进行转换,根据转换后的AST生成新的脚本,最后将生成的新的脚本发送给上述浏览器,从而可以增强破解脚本逻辑的难度,保护脚本的核心代码。
图2为本申请脚本混淆方法另一个实施例的流程图,如图2所示,本申请图1所示实施例中,步骤103可以包括:
步骤201,将上述AST中的关键字提取出来放到数组中,将提取的关键字用数组下标的方式进行替换。
具体地,可以将上述AST中的常量、属性、文档对象模型(Document Object Model;以下简称:DOM)和/或BOM对象(document、window、location、Date、Math和/或setTimeout等)等关键字提取出来放到数组中,将提取的关键字用数组下标的方式进行替换。
举例来说,对于window.location=“xxx”;
提取关键字之后,可以转换成:
var xx=[window,location,“xxx”];
xx[0][xx[1]]=xx[2];
进一步地,在步骤201之后,还可以包括:
步骤202,对提取的关键字中的字符串进行编码和/或加密处理;和/或,对提取的关键字中的数字进行进制转换。
具体地,对提取的关键字中的字符串可以进行ascii编码、base64编码和/或xtea加密等处理;对提取的关键字中的数字可以进制转换,如将10进制转换成8进制或16进制等。
图3为本申请脚本混淆方法再一个实施例的流程图,如图3所示,本申请图1所示实施例中,步骤103可以包括:
步骤301,将上述AST的所有根节点包裹在一个立即执行函数中。
也就是说,可以进行函数加壳操作,将上述AST的所有根节点包裹在一个立即执行函数中。进一步地,还可以将通过上述立即执行函数传递的参数赋给至少两个变量,并在引用上述参数时,随机使用上述至少两个变量。上述函数加壳操作,可以增加破解脚本逻辑的难度,有利于保护脚本的核心代码。
图4为本申请脚本混淆方法再一个实施例的流程图,如图4所示,本申请图1所示实施例中,步骤103可以包括:
步骤401,将上述AST中的关键字提取出来放到数组中,将提取的关键字用数组下标的方式进行替换。
具体地,可以将上述AST中的常量、属性、DOM和/或BOM对象(document、window、location、Date、Math和/或setTimeout等)等关键字提取出来放到数组中,将提取的关键字用数组下标的方式进行替换。
步骤402,将上述AST的所有根节点包裹在一个立即执行函数中,并将提取的关键字通过上述立即执行函数的数组参数的形式传递进来。
举例来说,对于window.location=“xxx”;
在执行步骤401和步骤402之后,可以转换成:
(function(a,b){
a[0][a[1]]=b[0];
})([window,location],[“xxx”]);
进一步地,步骤402之后,还可以包括:
步骤403,将通过上述立即执行函数传递的参数赋给至少两个变量,并在引用上述参数时,随机使用上述至少两个变量中的一个。
举例来说,对于
function(a,b){
a[0][a[1]]=b[0];
})([window,location],[“xxx”]);
在执行步骤403之后,可以转化成:
function(a,b){
var a0=a1=a2=a3=...=a;
var b0=b1=b2=b3=...=b;
//注释:对于a[0][a[1]]=b[0]中的a和b可以随机从上面已赋值的变量中取a3[0][a1[1]]=b2[0]
})([window,location],[“xxx”]);
通过步骤403的多变量引用操作,本实施例可以有效防止反AST破解,有利于保护脚本的核心代码。
图5为本申请脚本混淆方法再一个实施例的流程图,如图5所示,本申请图1所示实施例中,步骤103可以包括:
步骤501,对上述AST作用域内私有对象的属性进行压缩。
举例来说,对于{aaa:0,bbb:1},在对作用域内私有对象的属性进行压缩之后,可以转换成:{x:0,y:1}。
图6为本申请脚本混淆方法再一个实施例的流程图,如图6所示,本申请图1所示实施例中,步骤103可以包括:
步骤601,在上述AST中,随机构建结点,并在构建的结点上插入废代码。
图7为本申请脚本混淆方法再一个实施例的流程图,如图7所示,本申请图1所示实施例中,步骤103可以包括:
步骤701,对上述AST中控制流的逻辑进行转换。
举例来说,可以将上述AST中控制流的逻辑由if else转换成switch case,使逻辑复杂化。
图8为本申请脚本混淆方法再一个实施例的流程图,如图8所示,本申请图1所示实施例中,步骤103可以包括:
步骤801,对上述AST中的控制台函数进行重写,使上述AST中的控制台失效。
具体地,可以重写上述AST中的console控制台函数,使console输出失效。
图9为本申请脚本混淆方法再一个实施例的流程图,如图9所示,本申请图1所示实施例中,步骤103可以包括:
步骤901,在上述AST的关键逻辑处插入断点,并通过时间逻辑进行控制。
具体地,可以在上述AST的关键逻辑处插入调试(debugger)断点,通过时间逻辑进行控制,一旦打开控制台只能在debugger插入的逻辑上进行死循环,无法解脱,从而可以有效地防止坏人在业务侧调试以及在本地调试脚本代码,增加了破解脚本逻辑的难度。
图10为本申请脚本混淆方法再一个实施例的流程图,如图10所示,本申请图1所示实施例中,步骤103可以包括:
步骤1001,探测上述AST中的脚本执行域名,进行域名锁定,以使除上述AST中的脚本执行域名之外的其他域名执行脚本进入死循环逻辑。
本申请实施例提供的脚本混淆方法可以应用于图11所示的场景中,图11为本申请脚本混淆方法的应用场景一个实施例的示意图,如图11所示,在前端逻辑需要保护时,在浏览器发起js脚本请求之后,服务器可以将上述浏览器请求的js脚本按照本申请实施例提供的脚本混淆方法进行混淆,然后将经过混淆的js脚本返回给浏览器使用。
另外,本申请实施例提供的脚本混淆方法基于AST变换实现,可以兼容所有的浏览器。
图12为本申请脚本混淆装置一个实施例的结构示意图,本实施例中的脚本混淆装置可以实现本申请实施例提供的脚本混淆方法。如图12所示,上述脚本混淆装置可以包括:接收模块1201、转换模块1202、生成模块1203和发送模块1204;
其中,接收模块1201,用于接收浏览器发送的脚本请求;
转换模块1202,用于将上述脚本请求所请求的脚本转换成AST;以及对上述AST按照预定的转换规则进行转换;
本实施例中,上述脚本可以为JS脚本,当然上述脚本也可以采用其他的语音进行编写,但本实施例以脚本为JS脚本为例进行说明。
本实施例的一种实现方式中,转换模块1202,具体用于将上述AST中的关键字提取出来放到数组中,将提取的关键字用数组下标的方式进行替换。
具体地,转换模块1202可以将上述AST中的常量、属性、DOM和/或BOM对象(document、window、location、Date、Math和/或setTimeout等)等关键字提取出来放到数组中,将提取的关键字用数组下标的方式进行替换。
举例来说,对于window.location=“xxx”;
提取关键字之后,可以转换成:
var xx=[window,location,“xxx”];
xx[0][xx[1]]=xx[2];
进一步地,转换模块1202,还用于对提取的关键字中的字符串进行编码和/或加密处理;和/或,对提取的关键字中的数字进行进制转换。
具体地,转换模块1202对提取的关键字中的字符串可以进行ascii编码、base64编码和/或xtea加密等处理;对提取的关键字中的数字可以进制转换,如将10进制转换成8进制或16进制等。
本实施例的另一种实现方式中,转换模块1202,具体用于将上述AST的所有根节点包裹在一个立即执行函数中。
也就是说,转换模块1202可以进行函数加壳操作,将上述AST的所有根节点包裹在一个立即执行函数中。进一步地,转换模块1202还可以将通过上述立即执行函数传递的参数赋给至少两个变量,并在引用上述参数时,随机使用上述至少两个变量。上述函数加壳操作,可以增加破解脚本逻辑的难度,有利于保护脚本的核心代码。
本实施例的再一种实现方式中,转换模块1202,具体用于将上述AST中的关键字提取出来放到数组中,将提取的关键字用数组下标的方式进行替换;将上述抽象语法树的所有根节点包裹在一个立即执行函数中,并将提取的关键字通过上述立即执行函数的数组参数的形式传递进来。
举例来说,对于window.location=“xxx”;
在转换模块1202执行上述操作之后,可以转换成:
(function(a,b){
a[0][a[1]]=b[0];
})([window,location],[“xxx”]);
进一步地,转换模块1202,还用于将通过上述立即执行函数传递的参数赋给至少两个变量,并在引用上述参数时,随机使用上述至少两个变量中的一个。
举例来说,对于
function(a,b){
a[0][a[1]]=b[0];
})([window,location],[“xxx”]);
在转换模块1202执行上述多变量引用操作之后,可以转化成:
function(a,b){
var a0=a1=a2=a3=...=a;
var b0=b1=b2=b3=...=b;
//注释:对于a[0][a[1]]=b[0]中的a和b可以随机从上面已赋值的变量中取a3[0][a1[1]]=b2[0]
})([window,location],[“xxx”]);
通过上述多变量引用操作,本实施例可以有效防止反AST破解,有利于保护脚本的核心代码。
本实施例的再一种实现方式中,转换模块1202,具体用于对上述AST作用域内私有对象的属性进行压缩。
举例来说,对于{aaa:0,bbb:1},转换模块1202在对作用域内私有对象的属性进行压缩之后,可以转换成:{x:0,y:1}。
本实施例的再一种实现方式中,转换模块1202,具体用于在上述AST中,随机构建结点,并在构建的结点上插入废代码。
本实施例的再一种实现方式中,转换模块1202,具体用于对上述AST中控制流的逻辑进行转换。举例来说,转换模块1202可以将上述AST中控制流的逻辑由if else转换成switch case,使逻辑复杂化。
本实施例的再一种实现方式中,转换模块1202,具体用于对上述AST中的控制台函数进行重写,使上述AST中的控制台失效。具体地,转换模块1202可以重写上述AST中的console控制台函数,使console输出失效。
本实施例的再一种实现方式中,转换模块1202,具体用于在上述AST的关键逻辑处插入断点,并通过时间逻辑进行控制。
具体地,转换模块1202可以在上述AST的关键逻辑处插入debugger断点,通过时间逻辑进行控制,一旦打开控制台只能在debugger插入的逻辑上进行死循环,无法解脱,从而可以有效地防止坏人在业务侧调试以及在本地调试脚本代码,增加了破解脚本逻辑的难度。
本实施例的再一种实现方式中,转换模块1202,具体用于探测上述AST中的脚本执行域名,进行域名锁定,以使除上述AST中的脚本执行域名之外的其他域名执行脚本进入死循环逻辑。
生成模块1203,用于根据转换模块1202转换后的AST生成新的脚本;
发送模块1204,用于将生成模块1203生成的新的脚本发送给上述浏览器。
上述脚本混淆装置中,接收模块1201接收浏览器发送的脚本请求之后,转换模块1202将上述脚本请求所请求的脚本转换成AST,以及对上述AST按照预定的转换规则进行转换,生成模块1203根据转换后的AST生成新的脚本,最后发送模块1204将生成的新的脚本发送给上述浏览器,从而可以增强破解脚本逻辑的难度,保护脚本的核心代码。
图13为本申请电子设备一个实施例的结构示意图,本实施例中的电子设备可以包括存储器、处理器及存储在上述存储器上并可在上述处理器上运行的计算机程序,上述处理器执行上述计算机程序时,可以实现本申请实施例提供的脚本混淆方法。
其中,上述电子设备可以为服务器,例如:云端服务器,本实施例对上述电子设备的形态不作限定。
图13示出了适于用来实现本申请实施方式的示例性电子设备12的框图。图13显示的电子设备12仅仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。
如图13所示,电子设备12以通用计算设备的形式表现。电子设备12的组件可以包括但不限于:一个或者多个处理器或者处理单元16,系统存储器28,连接不同系统组件(包括系统存储器28和处理单元16)的总线18。
总线18表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器,外围总线,图形加速端口,处理器或者使用多种总线结构中的任意总线结构的局域总线。举例来说,这些体系结构包括但不限于工业标准体系结构(Industry StandardArchitecture;以下简称:ISA)总线,微通道体系结构(Micro Channel Architecture;以下简称:MAC)总线,增强型ISA总线、视频电子标准协会(Video Electronics StandardsAssociation;以下简称:VESA)局域总线以及外围组件互连(Peripheral ComponentInterconnection;以下简称:PCI)总线。
电子设备12典型地包括多种计算机系统可读介质。这些介质可以是任何能够被电子设备12访问的可用介质,包括易失性和非易失性介质,可移动的和不可移动的介质。
系统存储器28可以包括易失性存储器形式的计算机系统可读介质,例如随机存取存储器(Random Access Memory;以下简称:RAM)30和/或高速缓存存储器32。电子设备12可以进一步包括其它可移动/不可移动的、易失性/非易失性计算机系统存储介质。仅作为举例,存储系统34可以用于读写不可移动的、非易失性磁介质(图13未显示,通常称为“硬盘驱动器”)。尽管图13中未示出,可以提供用于对可移动非易失性磁盘(例如“软盘”)读写的磁盘驱动器,以及对可移动非易失性光盘(例如:光盘只读存储器(Compact Disc ReadOnlyMemory;以下简称:CD-ROM)、数字多功能只读光盘(Digital Video Disc ReadOnlyMemory;以下简称:DVD-ROM)或者其它光介质)读写的光盘驱动器。在这些情况下,每个驱动器可以通过一个或者多个数据介质接口与总线18相连。存储器28可以包括至少一个程序产品,该程序产品具有一组(例如至少一个)程序模块,这些程序模块被配置以执行本申请各实施例的功能。
具有一组(至少一个)程序模块42的程序/实用工具40,可以存储在例如存储器28中,这样的程序模块42包括——但不限于——操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。程序模块42通常执行本申请所描述的实施例中的功能和/或方法。
电子设备12也可以与一个或多个外部设备14(例如键盘、指向设备、显示器24等)通信,还可与一个或者多个使得用户能与该电子设备12交互的设备通信,和/或与使得该电子设备12能与一个或多个其它计算设备进行通信的任何设备(例如网卡,调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口22进行。并且,电子设备12还可以通过网络适配器20与一个或者多个网络(例如局域网(Local Area Network;以下简称:LAN),广域网(Wide Area Network;以下简称:WAN)和/或公共网络,例如因特网)通信。如图13所示,网络适配器20通过总线18与电子设备12的其它模块通信。应当明白,尽管图13中未示出,可以结合电子设备12使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
处理单元16通过运行存储在系统存储器28中的程序,从而执行各种功能应用以及数据处理,例如实现本申请实施例提供的脚本混淆方法。
本申请实施例还提供一种非临时性计算机可读存储介质,当上述存储介质中的计算机可执行指令在由计算机处理器执行时,用于执行本申请实施例提供的脚本混淆方法。
上述非临时性计算机可读存储介质可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(Read Only Memory;以下简称:ROM)、可擦式可编程只读存储器(ErasableProgrammableRead Only Memory;以下简称:EPROM)或闪存、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括——但不限于——电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括——但不限于——无线、电线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言或其组合来编写用于执行本申请操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LocalAreaNetwork;以下简称:LAN)或广域网(Wide Area Network;以下简称:WAN)连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
本申请实施例还提供一种计算机程序产品,当上述计算机程序产品中的指令由处理器执行时,执行本申请实施例提供的脚本混淆方法。
需要说明的是,在本申请的描述中,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性。此外,在本申请的描述中,除非另有说明,“多个”的含义是两个或两个以上。
流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现特定逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分,并且本申请的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,这应被本申请的实施例所属技术领域的技术人员所理解。
应当理解,本申请的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(Programmable Gate Array;以下简称:PGA),现场可编程门阵列(FieldProgrammableGate Array;以下简称:FPGA)等。
本技术领域的普通技术人员可以理解实现上述实施例方法携带的全部或部分步骤是可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,该程序在执行时,包括方法实施例的步骤之一或其组合。
此外,本申请各个实施例中的各功能模块可以集成在一个处理模块中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。
上述提到的存储介质可以是只读存储器,磁盘或光盘等。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本申请的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
尽管上面已经示出和描述了本申请的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本申请的限制,本领域的普通技术人员在本申请的范围内可以对上述实施例进行变化、修改、替换和变型。

Claims (8)

1.一种脚本混淆方法,其特征在于,包括:
接收浏览器发送的脚本请求;
将所述脚本请求所请求的脚本转换成抽象语法树;
对所述抽象语法树按照预定的转换规则进行转换;
根据转换后的抽象语法树生成新的脚本;
将生成的新的脚本发送给所述浏览器;
所述对所述抽象语法树按照预定的转换规则进行转换包括:
将所述抽象语法树中的关键字提取出来放到数组中,将提取的关键字用数组下标的方式进行替换;
将所述抽象语法树的所有根节点包裹在一个立即执行函数中,并将提取的关键字通过所述立即执行函数的数组参数的形式传递进来;
所述脚本混淆方法还包括:
将通过所述立即执行函数传递的参数赋给至少两个变量,并在引用所述参数时,随机使用所述至少两个变量中的一个。
2.根据权利要求1所述的方法,其特征在于,还包括:
对提取的关键字中的字符串进行编码和/或加密处理;和/或,
对提取的关键字中的数字进行进制转换。
3.根据权利要求1所述的方法,其特征在于,所述对所述抽象语法树按照预定的转换规则进行转换包括:
对所述抽象语法树作用域内私有对象的属性进行压缩。
4.根据权利要求1所述的方法,其特征在于,所述对所述抽象语法树按照预定的转换规则进行转换包括:
在所述抽象语法树中,随机构建结点,并在构建的结点上插入废代码。
5.根据权利要求1所述的方法,其特征在于,所述对所述抽象语法树按照预定的转换规则进行转换包括:
对所述抽象语法树中控制流的逻辑进行转换。
6.根据权利要求1所述的方法,其特征在于,所述对所述抽象语法树按照预定的转换规则进行转换包括:
对所述抽象语法树中的控制台函数进行重写,使所述抽象语法树中的控制台失效。
7.根据权利要求1所述的方法,其特征在于,所述对所述抽象语法树按照预定的转换规则进行转换包括:
在所述抽象语法树的关键逻辑处插入断点,并通过时间逻辑进行控制。
8.根据权利要求1所述的方法,其特征在于,所述对所述抽象语法树按照预定的转换规则进行转换包括:
探测所述抽象语法树中的脚本执行域名,进行域名锁定,以使除所述抽象语法树中的脚本执行域名之外的其他域名执行脚本进入死循环逻辑。
CN201810445003.4A 2018-05-10 2018-05-10 脚本混淆方法 Active CN110196718B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201810445003.4A CN110196718B (zh) 2018-05-10 2018-05-10 脚本混淆方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810445003.4A CN110196718B (zh) 2018-05-10 2018-05-10 脚本混淆方法

Publications (2)

Publication Number Publication Date
CN110196718A CN110196718A (zh) 2019-09-03
CN110196718B true CN110196718B (zh) 2023-07-25

Family

ID=67751303

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810445003.4A Active CN110196718B (zh) 2018-05-10 2018-05-10 脚本混淆方法

Country Status (1)

Country Link
CN (1) CN110196718B (zh)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111131282B (zh) * 2019-12-27 2022-06-17 武汉极意网络科技有限公司 请求加密方法、装置、电子设备及存储介质
CN111488558B (zh) * 2020-04-08 2022-07-22 腾讯科技(深圳)有限公司 脚本保护方法、装置、计算机可读存储介质和计算机设备
CN111651781A (zh) * 2020-06-05 2020-09-11 腾讯科技(深圳)有限公司 日志内容保护方法、装置、计算机设备和存储介质
CN113010857A (zh) * 2021-03-02 2021-06-22 北京顶象技术有限公司 一种可自定义规则的JavaScript代码混淆方法和系统
CN113065132B (zh) * 2021-03-25 2023-11-03 深信服科技股份有限公司 一种宏程序的混淆检测方法、装置、电子设备和存储介质
CN113590624A (zh) * 2021-07-29 2021-11-02 北京天融信网络安全技术有限公司 一种数据处理方法及电子装置

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105005718A (zh) * 2015-06-23 2015-10-28 电子科技大学 一种利用马尔可夫链实现代码混淆的方法
CN106933610A (zh) * 2015-12-30 2017-07-07 北京金山安全软件有限公司 一种应用程序安装包生成方法、装置及电子设备

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104166822B (zh) * 2013-05-20 2017-10-13 阿里巴巴集团控股有限公司 一种数据保护的方法和装置
CN105447342B (zh) * 2014-08-28 2018-08-31 阿里巴巴集团控股有限公司 脚本加密方法、解密方法及引擎
US10324702B2 (en) * 2014-09-12 2019-06-18 Microsoft Israel Research And Development (2002) Ltd. Cloud suffix proxy and a method thereof
US10277701B2 (en) * 2016-07-08 2019-04-30 Facebook, Inc. Methods and Systems for Rewriting Scripts to Direct Requests
CN107273769A (zh) * 2017-07-11 2017-10-20 北京洋浦伟业科技发展有限公司 一种电子设备的保护方法和装置

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105005718A (zh) * 2015-06-23 2015-10-28 电子科技大学 一种利用马尔可夫链实现代码混淆的方法
CN106933610A (zh) * 2015-12-30 2017-07-07 北京金山安全软件有限公司 一种应用程序安装包生成方法、装置及电子设备

Also Published As

Publication number Publication date
CN110196718A (zh) 2019-09-03

Similar Documents

Publication Publication Date Title
CN110196718B (zh) 脚本混淆方法
CN110119643B (zh) 二维码生成方法及装置、二维码识别方法及装置
US11334692B2 (en) Extracting a knowledge graph from program source code
CN107180200B (zh) 数据文件可定制化脱敏方法和系统
US11120018B2 (en) Spark query method and system supporting trusted computing
Garfinkel Digital media triage with bulk data analysis and bulk_extractor
US9607160B2 (en) Method and apparatus for providing string encryption and decryption in program files
CN110084599B (zh) 密钥处理方法、装置、设备和存储介质
CN112597454A (zh) 代码混淆方法、代码运行方法、装置、介质与设备
WO2009085227A1 (en) Embedding metadata with displayable content and applications thereof
CN107292135A (zh) 一种程序代码保护方法和装置
CN103198240A (zh) 一种用于保护代码安全的方法和装置
CN115048623A (zh) 用于加密代码的方法、计算设备和存储介质
CN111552792B (zh) 一种信息查询方法、装置、电子设备及存储介质
CN114626061A (zh) 网页木马检测的方法、装置、电子设备及介质
CN116756758A (zh) 一种数据加密解密方法、装置、计算机设备、存储介质
CN113449330B (zh) 对Javascript加密文件进行传输的方法
US11797277B2 (en) Neural network model conversion method server, and storage medium
CN114238831A (zh) Html代码片段的处理方法、系统、电子设备和存储介质
US20170372077A1 (en) Selective data encryption
CN111967001A (zh) 一种基于双容器的解码与编码安全隔离方法
CN113283215B (zh) 一种基于utf-32编码的数据混淆方法及装置
CN116108460A (zh) 一种适用于Electron的源码文件安全加密方法、装置及设备
CN114969679A (zh) Web前端安全加固的方法、电子设备和介质
CN114386093A (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
GR01 Patent grant
GR01 Patent grant