CN114036056B - 防调试方法、装置、设备、存储介质和程序产品 - Google Patents

防调试方法、装置、设备、存储介质和程序产品 Download PDF

Info

Publication number
CN114036056B
CN114036056B CN202111355570.9A CN202111355570A CN114036056B CN 114036056 B CN114036056 B CN 114036056B CN 202111355570 A CN202111355570 A CN 202111355570A CN 114036056 B CN114036056 B CN 114036056B
Authority
CN
China
Prior art keywords
debugging
node
syntax tree
abstract syntax
target site
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
CN202111355570.9A
Other languages
English (en)
Other versions
CN114036056A (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.)
Qichacha Technology Co ltd
Original Assignee
Qichacha Technology 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 Qichacha Technology Co ltd filed Critical Qichacha Technology Co ltd
Priority to CN202111355570.9A priority Critical patent/CN114036056B/zh
Publication of CN114036056A publication Critical patent/CN114036056A/zh
Application granted granted Critical
Publication of CN114036056B publication Critical patent/CN114036056B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/74Reverse engineering; Extracting design information from source code

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本申请涉及一种防调试方法、装置、设备、存储介质和程序产品。该方法包括:监测目标站点的前端调试功能;若监测到所述目标站点的前端调试功能被触发,启动预先配置在所述目标站点的前端源代码中的防调试机制;所述防调试机制用于禁止对所述目标站点的前端调试行为。采用本方法能够有效防止用户对目标站点代码的调试行为。

Description

防调试方法、装置、设备、存储介质和程序产品
技术领域
本申请涉及计算机技术领域,特别是涉及一种防调试方法、装置、设备、存储介质和程序产品。
背景技术
经常会存在一些用户或者其他开发者,利用浏览器的代码调试功能来对目标站点进行逻辑调试,以破解或发现网站代码的具体运行逻辑,了解站点数据的加载逻辑与方式,进而获取站点数据。
随着越来越多的企业开始注重前端安全,相关技术中,很多企业都是使用代码混淆的方式来进行业务逻辑及源代码的保护和防调试,例如,可基于webpack(静态模块打包工具)或glup(自动化开发的工具)等构建工具中的代码混淆插件来实现对代码进行加密混淆。
然而,相关技术的防调试方式无法有效防止用户对目标站点代码的调试行为。
发明内容
基于此,有必要针对上述技术问题,提供一种能够有效防止用户对目标站点代码的调试行为的防调试方法、装置、设备、存储介质和程序产品。
第一方面,本申请提供了一种防调试方法,该方法包括:
监测目标站点的前端调试功能;
若监测到目标站点的前端调试功能被触发,启动预先配置在目标站点的前端源代码中的防调试机制;防调试机制用于禁止对目标站点的前端调试行为。
在其中一个实施例中,上述防调试机制的配置过程包括:
获取防调试函数代码;
将防调试函数代码配置在目标站点的前端源代码的插件中,完成防调试机制的配置。
在其中一个实施例中,上述将防调试函数代码配置在目标站点的前端源代码的插件中,完成防调试机制的配置,包括:
解析目标站点的前端源代码的抽象语法树;
将防调试函数代码注入至抽象语法树的节点中;
对注入后的目标站点的前端源代码进行模块化,完成防调试机制的配置。
在其中一个实施例中,上述将防调试函数代码注入至抽象语法树的节点中,包括:
监听抽象语法树的节点;
获取抽象语法树的节点中至少一个满足预设条件的节点;
将防调试对象注入至抽象语法树中所有满足预设条件的节点中;防调试对象为根据防调试函数代码生成的。
在其中一个实施例中,上述获取抽象语法树的节点中至少一个满足预设条件的节点,包括:
对于抽象语法树的节点中的任一个节点,若节点不为空、节点需要注入防调试对象且防调试对象注入状态为未注入防调试对象,则确定节点满足预设条件。
在其中一个实施例中,上述获取抽象语法树的节点中至少一个满足预设条件的节点,还包括:
若当前的抽象语法树的节点不满足预设条件,则对当前的抽象语法树的节点的下一个节点进行判断,直至遍历完所有的节点,得到至少一个满足预设条件的节点。
在其中一个实施例中,上述将防调试对象注入至抽象语法树中所有满足预设条件的节点中,包括:
将防调试对象注入至抽象语法树中所有满足预设条件的节点路径的头部和尾部。
第二方面,本申请还提供了一种防调试装置,该装置包括:
监控模块,用于监测目标站点的前端调试功能;
调试模块,用于若监测到目标站点的前端调试功能被触发,启动预先配置在目标站点的前端源代码中的防调试机制;防调试机制用于禁止对目标站点的前端调试行为。
第三方面,本申请还提供了一种计算机设备,该计算机设备包括存储器和处理器,存储器存储有计算机程序,处理器执行计算机程序时实现上述第一方面实施例中的提供的防调试方法的步骤。
第四方面,本申请还提供了一种计算机可读存储介质,该计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现上述第一方面实施例中的提供的防调试方法的步骤。
第五方面,本申请还提供了一种计算机程序产品,该计算机程序产品包括计算机程序,该计算机程序被处理器执行时实现上述第一方面实施例中的提供的防调试方法的步骤。
上述防调试方法、装置、设备、存储介质和程序产品,通过监测目标站点的前端调试功能,若监测到目标站点的前端调试功能被触发,则启动预先配置在目标站点的前端源代码中的防调试机制,该防调试机制用于禁止对目标站点的前端调试行为。该方法中,目标站点相当于是任意一个站点,在此基础上,预先在目标站点的前端源代码中配置了可以禁止对目标站点的前端调试行为的防调试机制,这样,对目标站点的前端调试功能进行监测,一旦监测到前端调试功能被触发,则启动预先配置的防调试机制,就能够有效防止用户对目标站点代码的调试行为,从而保证目标站点的稳定性和安全性。
附图说明
图1为一个实施例中计算机设备的内部结构图;
图2为一个实施例中防调试方法的流程示意图;
图3为一个实施例中用户对前端源代码调试的示意图;
图4为另一个实施例中防调试方法的流程示意图;
图5为一个实施例中防调试装置的结构框图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
本申请实施例提供的防调试方法,可以应用于计算机设备中,该计算机设备可以但不限于是各种个人计算机、笔记本电脑、智能终端、手机、平板电脑、物联网设备等,本申请实施例对计算机设备的类型不作限定。如图1所示,提供一种计算机设备的内部结构示意图,图1中的处理器用于提供计算和控制能力。存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。数据库用于存储防调试过程的相关数据。该网络接口用于与外部的其他设备通过网络连接通信。该计算机程序被处理器执行时以实现一种防调试方法。
计算机设备对目标站点的前端调试功能进行监测,当监测到目标站点的前端调试功能被触发时,就启动预先配置在目标站点前端代码中的防调试机制,该防调试机制能够禁止对目标站点的前端调试行为,从而有效防止用户对目标站点代码的调试行为。
在一个实施例中,如图2所示,提供了一种防调试方法,以该方法应用于图1中的计算机设备为例进行说明,包括以下步骤:
步骤202,监测目标站点的前端调试功能。
其中,目标站点是指任意一个浏览器站点,该浏览器站点运行在计算机设备中,可由后台计算机设备监测该浏览器站点的网页,其可以是某一公司的主页,调试功能是指能够对目标站点进行逻辑测试的功能,例如可通过F12开启网页的调试功能。
具体地,计算机设备对一个或者多个目标站点进行监测是否存在用户或者其他开发者利用浏览器的代码调试功能来对目标站点进行逻辑调试,其中可选地,当计算机设备监测到前端的调试功能被触发时,预先配置在目标站点的前端源代码的防调试机制就会启动。
步骤204,若监测到目标站点的前端调试功能被触发,启动预先配置在目标站点的前端源代码中的防调试机制;防调试机制用于禁止对目标站点的前端调试行为。
其中,防调试机制是指能够禁止用户通过前端调试功能对目标站点进行逻辑测试的防御机制,通过该机制能够有效防止用户及其他开发者对目标站点进行逻辑测试。
具体地,当计算机设备监测到有用户或者其他开发者通过目标站点的前端调试功能来对目标站点进行逻辑测试时,预先配置在目标站点的全段源代码中的防调试机制就会被启动,使用户或其他开发者对目标站点的前端调试行为全部被禁止,其中可选地,结合图3所述,图3为一个实施例中用户对前端源代码调试的示意图,当用户或其他开发者通过F12开启目标站点的调试功能,防调试机制开启,该机制能够使用户调试断点永远停留在注入的内部函数中,进而永远无法命中用户所添加的断点。
上述防调试方法中,通过监测目标站点的前端调试功能,若监测到目标站点的前端调试功能被触发,则启动预先配置在目标站点的前端源代码中的防调试机制,该防调试机制用于禁止对目标站点的前端调试行为。该方法中,目标站点相当于是任意一个站点,在此基础上,预先在目标站点的前端源代码中配置了可以禁止对目标站点的前端调试行为的防调试机制,这样,对目标站点的前端调试功能进行监测,一旦监测到前端调试功能被触发,则启动预先配置的防调试机制,就能够有效防止用户对目标站点代码的调试行为,从而保证目标站点的稳定性和安全性。
在一个实施例中,上述防调试机制的配置过程包括:获取防调试函数代码;将防调试函数代码配置在目标站点的前端源代码的插件中,完成防调试机制的配置。
其中,防调试函数代码是指预先编辑的能够使用户或者其他开发者无法使用调试功能的函数代码。
具体地,计算机设备首先获取防调试函数代码,并将防调试函数代码配置在目标站点的前端源代码的插件中,在其他实施例中,防调试函数代码的生成过程如下:步骤1:调用f1函数获得一个随机函数名称,并将其命名为var1,其中f1函数是从26个小写字母中,随机抽取5~10个不等字符的生成随机函数名称的随机名称函数;步骤2:调用f2函数随机生成一个数字,并将其命名为var2,其中f2函数是从100~1000中,随机生成一个数字的随机生成数字函数;步骤3:从0~5的数字中随机生成一个数字,并将其命名为var3;步骤4:定义一个变量var4,类型为数组,用于存放随机生成的参数数据;步骤5:使用循环语句,循环var3次,每次调用f1函数生成一个参数名称,调用f2函数生成一个参数值,并将其组装为{n:f1(),v:f2()}形式,将其放入var4中;步骤6:使用Babel提供的types.functionDeclaration函数创建一个函数声明,该函数调用需传入三个参数,其参数值传入如下:参数1:使用Babel提供的types.identifier(var1),参数2:传递步骤5中生成的var4,并使用map函数取出其中的n属性,作为创建函数测参数,参数3:使用Babel提供的types.blockStatement([types.debuggerStatement()])创建函数的内容,其中仅包括浏览器中用于断点功能的debugger标签;步骤7:将步骤6中声明的函数定义命名为def1;步骤8:使用步骤5中生成的var4,并使用map函数,并将参数命名为p,返回Babel的types.variableDeclarator函数创建变量定义,该函数调用需要传递两个参数,其参数值如下:参数1:"let"参数2:[types.variableDeclarator(types.identifier(p.n),types.numericLiteral(p.v))];步骤9:将步骤8中声明的函数定义为def2;步骤10:使用Babel中的types.expressionStatement调用表达式函数创建用于调用def1的调用声明,该函数需要传递一个参数,其参数值如下:参数1:types.callExpression(types.identifier(var1),var4.map(p=>types.identifier(p.n)));步骤11:将步骤10中声明的函数定义为def3步骤12:使用Babel中的types.functionExpression函数,生成定时函数声明,该函数需要传递三个参数,其参数值如下:参数1:null,参数2:[],参数3:types.blockStatement([...def2,def3]);步骤13:将步骤12中声明的函数定义为def4步骤14:使用Babel中的types.expressionStatement函数,生成表达式,该函数需要传递一个参数,其参数值如下:参数1:types.callExpression(types.identifier("setTi-meout"),[def4,types.valueToNode(var2)]));步骤15:将步骤14中的声明的函数定义为def5函数返回[def1,def5],其中def5为防调试函数代码。
本实施例中,通过将防调试函数代码注入至符合预设条件的可执行代码中,能够使目标站点的前端源代码带有防调试功能。
在一个实施例中,将防调试函数代码配置在目标站点的前端源代码的插件中,完成防调试机制的配置,包括:解析目标站点的前端源代码的抽象语法树;将防调试函数代码注入至抽象语法树的节点中;对配置后的目标站点的前端源代码进行模块化,完成防调试机制的配置。
具体地,计算机设备首先将目标站点的前端源代码解析为AST语法树,然后将防调试函数代码注入至抽象语法树节点,其中,将防调试代码注入至满足预设条件的抽象语法树节点路径的头部和尾部,然后将抽象语法树转换为源代码并进行模块化,此时完成防调试机制的配置。在其中一个实施例,计算机设备可以通过Babel插件将目标站点的前段源代码转化为抽象语法树,并将防调试代码注入至符合条件的抽象语法树节点中,然后由Babel输出更改后的前端源代码,最后使用webpack对前端源代码进行模块化。
在本实施例中,通过将防调试函数代码注入至抽象语法树节点中,并将更改后的前端源代码进行模块化,以完成防调试机制的配置,使源代码带有防调试功能。
在一个实施例中,将防调试函数代码注入至抽象语法树的节点中,包括:监听抽象语法树的节点;获取抽象语法树的节点中至少一个满足预设条件的节点;将防调试对象注入至抽象语法树中所有满足预设条件的节点中;防调试对象为根据防调试函数代码生成的。
具体地,计算机设备监听抽象语法树的节点。可选地,可通过Babel的插件监听箭头函数(ArrowFunctionExpression)、函数直接声明(FunctionDeclaration)和函数表达式(FunctionExpression),因为在Javascript只有三种声明函数的方式,然后获取至少一个满足预设条件的抽象语法树节点,并将防调试对象注入至所有满足预设条件的节点中,其中预设条件可根据实际的使用场景进行设置,其中防调试对象是根据防调试函数代码生成的,例如对防调试函数代码进行封装等操作。
在上述实施例中,通过将防调试对象注入至满足预设条件的抽象语法树节点中,使所有满足预设条件的抽象语法树节点带有防调试功能。
在一个实施例中,获取抽象语法树的节点中至少一个满足预设条件的节点,包括:对于抽象语法树的节点中的任一个节点,若节点不为空、节点需要注入防调试对象且节点的防调试对象注入状态为未注入防调试对象,则确定节点满足预设条件。
具体地,当抽象语法树节点不为空、节点需要注入对象且节点的防调试对象的注入状态为未注入防调试对象时,判定该节点满足预设条件,将防调试对象注入至满足条件的抽象语法树节点中。
在其他施例中,对抽象语法树节点的判断并注入防调试对象的过程如下:步骤1:将path下的node属性的body赋值给变量body变量;步骤2:使用Babel中的types.isBlockStatement函数判断body是否成立,不成立函数返回,成立继续执行;步骤2:若步骤1成立,判断body的属性body内容是否大于0,不成立函数返回,成立继续执行;步骤3:若步骤2成立,调用函数f4传递path,若函数返回false继续执行,否则函数返回;步骤4:若步骤3成立,调用函数f5传递path,若函数返回false继续执行,否则函数返回;步骤5:若步骤4成立,则操作当前的path节点,修改其AST结构,将f3函数生成的AST插入到当前path的头部和尾部,具体操作如下:path.get("body").unshiftContainer("body",f3(path))path.get("body").pushContainer("body",f3(path))。
在上述实施例中,通过对抽象语法树节点进行判断后注入,防止防调试对象的无效注入。
在一个实施例中,获取抽象语法树的节点中至少一个满足预设条件的节点,还包括:若当前的抽象语法树的节点不满足预设条件,则对当前的抽象语法树的节点的下一个节点进行判断,直至遍历完所有的节点,得到至少一个满足预设条件的节点。
具体地,若当前抽象语法树的节点不满足预设条件,即当前抽象语法树节点满足节点不为空或不需要注入防调试对象或已在该节点下注入过防调试对象中的任意一个时,将下一个抽象语法树节点作为新的当前抽象语法树节点进行判断,若新的当前抽象语法树节点满足预设条件则将防调试对象注入,否则就对新的当前抽象语法树节点的下一个节点进行判断直至对所有的抽象语法树节点遍历完成,得到至少一个满足预设条件的节点。
在上述实施例中,通过对所有的抽象语法树节点进行判断,能够保证所有符合预设条件的抽象语法树节点都能注入防调试对象。
在一个实施例中,将防调试对象注入至抽象语法树中所有满足预设条件的节点中,包括:将防调试对象注入至抽象语法树中所有满足预设条件的节点路径的头部和尾部。
具体地,当判定抽象语法树节点满足预设条件时,将防调试对象注入至所有满足预设条件的节点路径的头部与尾部,在其他实施例中,将防调试对象注入至满足预设条件的节点路径的头部与尾部的操作如下:path.get("body").unshiftContainer("body",f3(path)),path.get("body").pushContainer("body",f3(path)),其中f3为防调试对象。
在上述实施例中,通过将防调试对象注入至所有符合条件的节点路径的头部和尾部,能够使使用户调试断点永远停留在注入的内部函数中,进而永远无法命中用户所添加的断点。
在一个实施例中,如图4所示,图4为另一个实施例中防调试方法的流程示意图。
首先通过webpack工具将前端源代码进行模块化,然后使用Babel将模块化后的前端源代码转化为抽象语法树,并对ArrowFunctionExpression、FunctionDeclaration和FunctionExpression三种声明函数进行监听,因为在Javascript只有三种声明函数的方式。当监听到这三种声明函数中的任意一个函数时,加载防调试代码插件,其中防调试代码插件预先配置在Babel插件中,通过该防调试代码插件可将防调试对象插入至body属性不为空、需要注入防调试对象且节点的防调试对象的注入状态为未注入防调试对象的节点路径的头部和尾部。当对抽象语法树节点遍历完成时,即将防调试对象注入所有满足上述条件的抽象语法树节点时,使用Babel输出代码,启动运行webpack构建命令,将源代码转换为打包后代码输出,最后使用Node.js运行代码以启动http服务。当用户或其他开发者试图使用F12打开调试窗口时,防调试代码生效,用户的调试窗口将被锁死在注入的函数中。
在本实施例中,能够对ArrowFunctionExpression、FunctionDeclaration和FunctionExpression三种声明函数注入防调试对象,使前端源代码具有防调试功能。
应该理解的是,虽然如上的各实施例所涉及的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,如上的各实施例所涉及的流程图中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
在一个实施例中,如图5所示,提供了一种防调试装置,包括:监控模块100、和调试模块200,其中:
监控模块100,用于监测目标站点的前端调试功能。
调试模块200,用于若监测到目标站点的前端调试功能被触发,启动预先配置在目标站点的前端源代码中的防调试机制;防调试机制用于禁止对目标站点的前端调试行为。
在一个实施例中,上述调试模块200还包括:
获取子模块,用于获取防调试函数代码。
配置子模块,用于将防调试函数代码配置在目标站点的前端源代码的插件中,完成防调试机制的配置。
在一个实施例中,上述配置子模块包括:
解析单元,用于解析目标站点的前端源代码的抽象语法树。
注入单元,用于将防调试函数代码注入至抽象语法树的节点中。
模块化单元,用于对配置后的目标站点的前端源代码进行模块化,完成防调试机制的配置。
在一个实施例中,上述注入单元包括:
监听子单元,用于监听抽象语法树的节点。
节点获取子单元,用于获取抽象语法树的节点中至少一个满足预设条件的节点。
防调试注入子单元,用于将防调试对象注入至抽象语法树中所有满足预设条件的节点中;防调试对象为根据防调试函数代码生成的。
在一个实施例中,上述节点获取子单元,还用于对于抽象语法树的节点中的任一个节点,若节点不为空且节点的防调试对象注入状态为未注入防调试对象,则确定节点满足预设条件。
在一个实施例中,上述节点获取子单元,还用于若当前的抽象语法树的节点不满足预设条件,则对当前的抽象语法树的节点的下一个节点进行判断,直至遍历完所有的节点,得到至少一个满足预设条件的节点。
在一个实施例中,上述防调试注入子单元,还用于将防调试对象注入至抽象语法树中所有满足预设条件的节点路径的头部和尾部。
上述防调试装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现以下步骤:
监测目标站点的前端调试功能;
若监测到目标站点的前端调试功能被触发,启动预先配置在目标站点的前端源代码中的防调试机制;防调试机制用于禁止对目标站点的前端调试行为。
在一个实施例中,该处理器执行计算机程序时实现以下步骤:
获取防调试函数代码;
将防调试函数代码配置在目标站点的前端源代码的插件中,完成防调试机制的配置。
在一个实施例中,该处理器执行计算机程序时实现以下步骤:
解析目标站点的前端源代码的抽象语法树;将防调试函数代码注入至抽象语法树的节点中;
将防调试函数代码配置在目标站点的前端源代码的插件中;对配置后的目标站点的前端源代码进行模块化,完成防调试机制的配置。
在一个实施例中,该处理器执行计算机程序时实现以下步骤:
监听抽象语法树的节点;获取抽象语法树的节点中至少一个满足预设条件的节点;
将防调试对象注入至抽象语法树中所有满足预设条件的节点中;防调试对象为根据防调试函数代码生成的。
在一个实施例中,该处理器执行计算机程序时实现以下步骤:
对于抽象语法树的节点中的任一个节点,若节点不为空且节点的防调试对象注入状态为未注入防调试对象,则确定节点满足预设条件。
在一个实施例中,该处理器执行计算机程序时实现以下步骤:
若当前的抽象语法树的节点不满足预设条件,则对当前的抽象语法树的节点的下一个节点进行判断,直至遍历完所有的节点,得到至少一个满足预设条件的节点。
在一个实施例中,该处理器执行计算机程序时实现以下步骤:
将防调试对象注入至抽象语法树中所有满足预设条件的节点路径的头部和尾部。
上述实施例提供的一种计算机设备,其实现原理和技术效果与上述方法实施例类似,在此不再赘述。
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:
监测目标站点的前端调试功能;
若监测到目标站点的前端调试功能被触发,启动预先配置在目标站点的前端源代码中的防调试机制;防调试机制用于禁止对目标站点的前端调试行为。
在一个实施例中,该计算机程序被处理器执行时实现以下步骤:
获取防调试函数代码;
将防调试函数代码配置在目标站点的前端源代码的插件中,完成防调试机制的配置。
在一个实施例中,该计算机程序被处理器执行时实现以下步骤:
解析目标站点的前端源代码的抽象语法树;将防调试函数代码注入至抽象语法树的节点中;
将防调试函数代码配置在目标站点的前端源代码的插件中;对配置后的目标站点的前端源代码进行模块化,完成防调试机制的配置。
在一个实施例中,该计算机程序被处理器执行时实现以下步骤:
监听抽象语法树的节点;
获取抽象语法树的节点中至少一个满足预设条件的节点;将防调试对象注入至抽象语法树中所有满足预设条件的节点中;防调试对象为根据防调试函数代码生成的。
在一个实施例中,该计算机程序被处理器执行时实现以下步骤:
对于抽象语法树的节点中的任一个节点,若节点不为空且节点的防调试对象注入状态为未注入防调试对象,则确定节点满足预设条件。
在一个实施例中,该计算机程序被处理器执行时实现以下步骤:
若当前的抽象语法树的节点不满足预设条件,则对当前的抽象语法树的节点的下一个节点进行判断,直至遍历完所有的节点,得到至少一个满足预设条件的节点。
在一个实施例中,该计算机程序被处理器执行时实现以下步骤:将防调试对象注入至抽象语法树中所有满足预设条件的节点路径的头部和尾部。
上述实施例提供的一种计算机可读存储介质,其实现原理和技术效果与上述方法实施例类似,在此不再赘述。
在一个实施例中,提供了一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现以下步骤:
监测目标站点的前端调试功能;
若监测到目标站点的前端调试功能被触发,启动预先配置在目标站点的前端源代码中的防调试机制;防调试机制用于禁止对目标站点的前端调试行为。
在一个实施例中,该计算机程序被处理器执行时实现以下步骤:
获取防调试函数代码;
将防调试函数代码配置在目标站点的前端源代码的插件中,完成防调试机制的配置。
在一个实施例中,该计算机程序被处理器执行时实现以下步骤:
解析目标站点的前端源代码的抽象语法树;
将防调试函数代码注入至抽象语法树的节点中;将防调试函数代码配置在目标站点的前端源代码的插件中;对配置后的目标站点的前端源代码进行模块化,完成防调试机制的配置。
在一个实施例中,该计算机程序被处理器执行时实现以下步骤:
监听抽象语法树的节点;
获取抽象语法树的节点中至少一个满足预设条件的节点;将防调试对象注入至抽象语法树中所有满足预设条件的节点中;防调试对象为根据防调试函数代码生成的。
在一个实施例中,该计算机程序被处理器执行时实现以下步骤:
对于抽象语法树的节点中的任一个节点,
若节点不为空且节点的防调试对象注入状态为未注入防调试对象,则确定节点满足预设条件。
在一个实施例中,该计算机程序被处理器执行时实现以下步骤:
若当前的抽象语法树的节点不满足预设条件,则对当前的抽象语法树的节点的下一个节点进行判断,直至遍历完所有的节点,得到至少一个满足预设条件的节点。
在一个实施例中,该计算机程序被处理器执行时实现以下步骤:将防调试对象注入至抽象语法树中所有满足预设条件的节点路径的头部和尾部。
上述实施例提供的一种计算机程序产品,其实现原理和技术效果与上述方法实施例类似,在此不再赘述。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(Read-OnlyMemory,ROM)、磁带、软盘、闪存、光存储器、高密度嵌入式非易失性存储器、阻变存储器(ReRAM)、磁变存储器(Magnetoresistive Random Access Memory,MRAM)、铁电存储器(Ferroelectric Random Access Memory,FRAM)、相变存储器(Phase Change Memory,PCM)、石墨烯存储器等。易失性存储器可包括随机存取存储器(Random Access Memory,RAM)或外部高速缓冲存储器等。作为说明而非局限,RAM可以是多种形式,比如静态随机存取存储器(Static Random Access Memory,SRAM)或动态随机存取存储器(Dynamic RandomAccess Memory,DRAM)等。本申请所提供的各实施例中所涉及的数据库可包括关系型数据库和非关系型数据库中至少一种。非关系型数据库可包括基于区块链的分布式数据库等,不限于此。本申请所提供的各实施例中所涉及的处理器可为通用处理器、中央处理器、图形处理器、数字信号处理器、可编程逻辑器、基于量子计算的数据处理逻辑器等,不限于此。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本申请专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请的保护范围应以所附权利要求为准。

Claims (8)

1.一种防调试方法,其特征在于,所述方法包括:
监测目标站点的前端调试功能;
若监测到所述目标站点的前端调试功能被触发,启动预先配置在所述目标站点的前端源代码中的防调试机制;所述防调试机制用于禁止对所述目标站点的前端调试行为;
所述防调试机制的配置过程包括:
获取防调试函数代码;
解析所述目标站点的前端源代码的抽象语法树;
监听所述抽象语法树的节点;
获取所述抽象语法树的节点中至少一个满足预设条件的节点;
将防调试对象注入至所述抽象语法树中所有满足所述预设条件的节点路径的头部和尾部;所述防调试对象为根据所述防调试函数代码生成的;
对所述注入后的所述目标站点的前端源代码进行模块化,完成所述防调试机制的配置。
2.根据权利要求1所述的方法,所述获取所述抽象语法树的节点中至少一个满足预设条件的节点,包括:
对于所述抽象语法树的节点中的任一个节点,若所述节点不为空、所述节点需要注入防调试对象且防调试对象注入状态为未注入所述防调试对象,则确定所述节点满足所述预设条件。
3.根据权利要求1或2所述的方法,所述获取所述抽象语法树的节点中至少一个满足预设条件的节点,还包括:
若当前的抽象语法树的节点不满足所述预设条件,则对所述当前的抽象语法树的节点的下一个节点进行判断,直至遍历完所有的节点,得到所述至少一个满足所述预设条件的节点。
4.一种防调试装置,其特征在于,所述装置包括:
监控模块,用于监测目标站点的前端调试功能;
调试模块,用于若监测到所述目标站点的前端调试功能被触发,启动预先配置在所述目标站点的前端源代码中的防调试机制;所述防调试机制用于禁止对所述目标站点的前端调试行为;
所述调试模块,包括:
获取子模块,用于获取防调试函数代码;
配置子模块,用于将所述防调试函数代码配置在所述目标站点的前端源代码的插件中,完成防调试机制的配置;
所述配置子模块,包括:
解析单元,用于解析所述目标站点的前端源代码的抽象语法树;
注入单元,用于将所述防调试函数代码注入至所述抽象语法树的节点中;
模块化单元,用于对所述注入后的目标站点的前端源代码进行模块化,完成防调试机制的配置;
所述注入单元,包括:
监听子单元,用于监听所述抽象语法树的节点;
节点获取子单元,用于获取所述抽象语法树的节点中至少一个满足预设条件的节点;
防调试注入子单元,用于将防调试对象注入至所述抽象语法树中所有满足所述预设条件的节点中;所述防调试对象为根据所述防调试函数代码生成的;
所述防调试注入子单元,还用于将所述防调试对象注入至所述抽象语法树中所有满足所述预设条件的节点路径的头部和尾部。
5.根据权利要求4所述的装置,其特征在于,所述节点获取子单元,还用于对于所述抽象语法树的节点中的任一个节点,若所述节点不为空、所述节点需要注入防调试对象且防调试对象注入状态为未注入所述防调试对象,则确定所述节点满足所述预设条件。
6.根据权利要求4或5所述的装置,其特征在于,所述节点获取子单元,还用于若当前的抽象语法树的节点不满足所述预设条件,则对所述当前的抽象语法树的节点的下一个节点进行判断,直至遍历完所有的节点,得到所述至少一个满足所述预设条件的节点。
7.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至3中任一项所述的方法的步骤。
8.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至3中任一项所述的方法的步骤。
CN202111355570.9A 2021-11-16 2021-11-16 防调试方法、装置、设备、存储介质和程序产品 Active CN114036056B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111355570.9A CN114036056B (zh) 2021-11-16 2021-11-16 防调试方法、装置、设备、存储介质和程序产品

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111355570.9A CN114036056B (zh) 2021-11-16 2021-11-16 防调试方法、装置、设备、存储介质和程序产品

Publications (2)

Publication Number Publication Date
CN114036056A CN114036056A (zh) 2022-02-11
CN114036056B true CN114036056B (zh) 2024-03-26

Family

ID=80144647

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111355570.9A Active CN114036056B (zh) 2021-11-16 2021-11-16 防调试方法、装置、设备、存储介质和程序产品

Country Status (1)

Country Link
CN (1) CN114036056B (zh)

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20060059792A (ko) * 2004-11-29 2006-06-02 주식회사 안철수연구소 실시간 컴퓨터 프로그램의 디버깅 방지 방법 및 그 기록매체
KR101861952B1 (ko) * 2017-01-25 2018-05-28 한양대학교 에리카산학협력단 소프트웨어 브레이크 포인트를 무력화시키기 위한 안티 디버깅 방법 및 장치
CN110321674A (zh) * 2019-07-12 2019-10-11 北京智游网安科技有限公司 一种基于脚本程序的反调试方法、智能终端及存储介质
CN110888644A (zh) * 2019-12-06 2020-03-17 成都安恒信息技术有限公司 一种自定义混淆方案的JavaScript代码混淆方法
CN111427623A (zh) * 2020-03-20 2020-07-17 北京奇艺世纪科技有限公司 程序退出方法、装置、计算机设备和存储介质
CN112597454A (zh) * 2020-12-28 2021-04-02 深圳市欢太科技有限公司 代码混淆方法、代码运行方法、装置、介质与设备

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20210149788A1 (en) * 2019-11-18 2021-05-20 Microsoft Technology Licensing, Llc Software diagnosis using transparent decompilation

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20060059792A (ko) * 2004-11-29 2006-06-02 주식회사 안철수연구소 실시간 컴퓨터 프로그램의 디버깅 방지 방법 및 그 기록매체
KR101861952B1 (ko) * 2017-01-25 2018-05-28 한양대학교 에리카산학협력단 소프트웨어 브레이크 포인트를 무력화시키기 위한 안티 디버깅 방법 및 장치
CN110321674A (zh) * 2019-07-12 2019-10-11 北京智游网安科技有限公司 一种基于脚本程序的反调试方法、智能终端及存储介质
CN110888644A (zh) * 2019-12-06 2020-03-17 成都安恒信息技术有限公司 一种自定义混淆方案的JavaScript代码混淆方法
CN111427623A (zh) * 2020-03-20 2020-07-17 北京奇艺世纪科技有限公司 程序退出方法、装置、计算机设备和存储介质
CN112597454A (zh) * 2020-12-28 2021-04-02 深圳市欢太科技有限公司 代码混淆方法、代码运行方法、装置、介质与设备

Also Published As

Publication number Publication date
CN114036056A (zh) 2022-02-11

Similar Documents

Publication Publication Date Title
US10846083B2 (en) Semantic-aware and self-corrective re-architecting system
CN112100054B (zh) 一种面向数据管控的程序静态分析方法和系统
Dahse et al. Code reuse attacks in php: Automated pop chain generation
Alhuzali et al. Chainsaw: Chained automated workflow-based exploit generation
CN111752571B (zh) 程序升级方法、装置、设备及存储介质
Bastani et al. Specification inference using context-free language reachability
CN111079101B (zh) 基于区块链的侵权取证方法及装置、电子设备、存储介质
US11314863B2 (en) Behavioral threat detection definition and compilation
CN107015839B (zh) 一种实现前端事件代理的方法及装置
US12039038B2 (en) Behavioral threat detection definition and compilation
WO2015130675A2 (en) Apparatus and method for testing computer program implementation against a design model
WO2021042508A1 (zh) 网页生成方法、装置、计算机设备和存储介质
WO2014035737A1 (en) Obtaining metadata set by imperative statement
CN111723345A (zh) 基于回调函数的控制流混淆方法及系统
CN114036056B (zh) 防调试方法、装置、设备、存储介质和程序产品
Jahanshahi et al. Minimalist: Semi-automated Debloating of {PHP} Web Applications through Static Analysis
CN112445706A (zh) 程序异常代码获取方法、装置、电子设备以及存储介质
Keil et al. Efficient dynamic access analysis using JavaScript proxies
Bedadala et al. Generation of Call Graph for Java Higher Order Functions
Johnson et al. Exposing software security and availability risks for commercial mobile devices
Lyu et al. Analyzing Ethereum Smart Contract Vulnerabilities at Scale Based on Inter-Contract Dependency.
Bergstra et al. A bypass of Cohen’s impossibility result
CN111488558A (zh) 脚本保护方法、装置、计算机可读存储介质和计算机设备
CN115756586B (zh) Flink作业的执行方法、装置、计算机设备和存储介质
Chavez et al. An approach to testing java implementation against its uml class model

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
CB02 Change of applicant information
CB02 Change of applicant information

Country or region after: China

Address after: No. 8 Huizhi Street, Suzhou Industrial Park, Suzhou Area, China (Jiangsu) Pilot Free Trade Zone, Suzhou City, Jiangsu Province, 215000

Applicant after: Qichacha Technology Co.,Ltd.

Address before: Room 503, 5 / F, C1 building, 88 Dongchang Road, Suzhou Industrial Park, 215000, Jiangsu Province

Applicant before: Qicha Technology Co.,Ltd.

Country or region before: China

GR01 Patent grant
GR01 Patent grant