CN114296793A - 混淆代码的反混淆方法、装置、可读介质及电子设备 - Google Patents
混淆代码的反混淆方法、装置、可读介质及电子设备 Download PDFInfo
- Publication number
- CN114296793A CN114296793A CN202111643591.0A CN202111643591A CN114296793A CN 114296793 A CN114296793 A CN 114296793A CN 202111643591 A CN202111643591 A CN 202111643591A CN 114296793 A CN114296793 A CN 114296793A
- Authority
- CN
- China
- Prior art keywords
- code
- confusion
- variable
- text
- obfuscated
- 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
Images
Landscapes
- Document Processing Apparatus (AREA)
Abstract
本公开涉及一种混淆代码的反混淆方法、装置、可读介质及电子设备,该方法包括:获取混淆代码文本,将混淆代码文本转换为抽象语法树,对抽象语法树进行语法分析,以获取混淆代码文本中代码块对应的混淆方式,确定混淆方式对应的反混淆方案,根据反混淆方案对代码块进行处理得到反混淆后的代码文本,根据反混淆后的代码文本得到目标代码文本。通过反混淆方案,使得开发人员能够非常快速的获取反混淆后的高可读性的目标代码文本,同时快速的获取到网页的加密算法。
Description
技术领域
本公开涉及计算机技术领域,具体地,涉及一种混淆代码的反混淆方法、装置、可读介质及电子设备。
背景技术
在现行的互联网环境中,用户在使用各种网站采集所需要的数据时,往往需要先解决它的验证码。其验证码的工作原理通常为一份JavaScript(JS)代码在浏览器中执行,以获取用户反馈的验证码数据(如数字/图片验证码或拖动图片生成的坐标轨迹等),当用户点击确认时将这份验证码数据通过一些加密算法进行加密,然后将加密后的验证码数据提交给该网站的后端服务器进行校验。若需要获取到这些加密算法,需要对该网站的验证码加密方式进行解析,从而获取到其加密算法,以使开发人员将识别验证码的结果和构造的环境进行加密计算,模拟提交验证码获取其返回的凭据(validate)标识参数,进行模拟请求以达到获取开发人员所需要的数据的目的。但直接从网站上获取的网页源代码是经过一些混淆算法将开发人员可读的代码变成了不可读的混淆代码,直接阅读混淆代码对开发人员来说极具挑战,并且十分耗费时间。
发明内容
本公开的目的是提供一种混淆代码的反混淆方法、装置、可读介质及电子设备,用以解决直接阅读混淆代码对开发人员来说极具挑战,并且十分耗费时间的问题。
第一方面,本公开提供一种混淆代码的反混淆方法,包括:获取混淆代码文本;将所述混淆代码文本转换为抽象语法树;对所述抽象语法树进行语法分析,以获取所述混淆代码文本中代码块对应的混淆方式;确定所述混淆方式对应的反混淆方案;根据所述反混淆方案对所述代码块进行处理得到反混淆后的代码文本;根据所述反混淆后的代码文本得到目标代码文本。
可选地,所述混淆方式包括变量替换、函数执行平坦化和全局变量调用中的至少一种。
可选地,所述抽象语法树包括多个节点,每个所述节点对应一个所述代码块;所述对所述抽象语法树进行语法分析,以获取所述混淆代码文本中代码块对应的混淆方式的步骤,包括:遍历所述抽象语法树中的所有所述节点;根据所述节点中包含的变量标识或语句属性确定所述混淆代码文本中代码块对应的混淆方式。
可选地,所述变量标识包括第一编码变量标识及全局变量的标识,所述语句属性包括循环结构语句及选择结构语句;所述根据所述节点中包含的变量属性、语句属性确定所述混淆代码文本中代码块对应的混淆方式的步骤,包括:对于所有所述节点中的每个节点,当检测到所述节点中的所述第一编码变量标识时,确定所述节点对应的所述代码块的混淆方式为所述变量替换;当检测到所述节点中的所述循环结构语句或所述选择结构语句时,确定所述节点对应的所述代码块的混淆方式为所述函数执行平坦化;当检测到所述节点中的所述全局变量的标识时,确定所述节点对应的所述代码块的混淆方式为所述全局变量调用。
可选地,所述节点对应的所述代码块的混淆方式为所述变量替换,所述根据所述反混淆方案对所述代码块进行处理得到反混淆后的代码文本的步骤,包括:筛选出所述节点中的第一编码变量;通过编码器将所述第一编码变量替换为第二编码变量,以得到所述代码块的反混淆后的代码文本。
可选地,所述节点对应的所述代码块的混淆方式为所述函数执行平坦化,所述根据所述反混淆方案对所述代码块进行处理得到反混淆后的代码文本的步骤,包括:通过调整所述代码块中代码文本的执行顺序得到所述反混淆后的代码文本。
可选地,所述通过调整所述代码块中代码文本的执行顺序得到所述反混淆后的代码文本的步骤,包括:获取所述节点的对应的全局变量;当所述全局变量的名称与预存储的全局变量名称一致时,获取所述代码块的流程分发器的控制流程;所述控制流程表征所述代码块中的代码文本的执行顺序;根据所述控制流程调整所述代码块中代码文本的执行顺序,将调整所述执行顺序后的所述代码文本,作为所述代码块的反混淆后的代码文本。
可选地,所述节点对应的所述代码块的混淆方式为所述全局变量调用,所述根据所述反混淆方案对所述代码块进行处理得到反混淆后的代码文本的步骤,包括:利用实际引用变量替换全局变量的引用得到所述反混淆后的代码文本。
可选地,所述利用实际引用变量替换全局变量的引用得到所述反混淆后的代码文本的步骤,包括:获取所述全局变量对应的全局变量名称;当所述全局变量名称与预存储的全局变量名称一致时,获取所述全局变量的引用,执行所述全局变量的引用从内存中获取所述实际引用变量;利用所述实际引用变量替换所述全局变量的引用,将替换所述全局变量的引用后的代码文本作为所述代码块的反混淆后的代码文本。
可选地,所述将所述混淆代码文本转换为抽象语法树,包括:对所述混淆代码文本进行解析,得到解析后的混淆代码文本;将所述解析后的混淆代码文本转换为所述抽象语法树。
第二方面,本公开提供一种混淆代码的反混淆装置,包括:接收模块,用于获取混淆代码文本;转换模块,用于将所述混淆代码文本转换为抽象语法树;分析模块,用于对所述抽象语法树进行语法分析,以获取所述混淆代码文本中代码块对应的混淆方式;处理模块,用于根据所述混淆方式对应的反混淆方案;所述处理模块,还用于根据所述反混淆方案对所述代码块进行处理得到反混淆后的代码文本;所述处理模块,还用于根据所述反混淆后的代码文本得到目标代码文本。
第三方面,本公开提供一种计算机可读介质,其上存储有计算机程序,该程序被处理装置执行时实现前述的混淆代码的反混淆方法的步骤。
第四方面,本公开提供一种电子设备,包括:存储装置,其上存储有计算机程序;处理装置,用于执行所述存储装置中的所述计算机程序,以实现前述的混淆代码的反混淆方法的步骤。
通过上述技术方案,获取混淆代码文本,将混淆代码文本转换为抽象语法树,对抽象语法树进行语法分析,以获取混淆代码文本中代码块对应的混淆方式,确定混淆方式对应的反混淆方案,根据反混淆方案对代码块进行处理得到反混淆后的代码文本,根据反混淆后的代码文本得到目标代码文本。通过反混淆方案,使得开发人员能够非常快速的获取反混淆后的高可读性的目标代码文本,同时快速的获取到网页的加密算法。
本公开的其他特征和优点将在随后的具体实施方式部分予以详细说明。
附图说明
结合附图并参考以下具体实施方式,本公开各实施例的上述和其他特征、优点及方面将变得更加明显。贯穿附图中,相同或相似的附图标记表示相同或相似的元素。应当理解附图是示意性的,原件和元素不一定按照比例绘制。在附图中:
图1是本公开一个示例性实施例提供的计算机系统的结构示意图。
图2是本公开一个示例性实施例提供的一种混淆代码的反混淆方法的流程图。
图3是本公开一个示例性实施例示出的步骤S104的子步骤的流程图。
图4是本公开另一个示例性实施例示出的步骤S104的子步骤的流程图。
图5是本公开一个示例性实施例示出的一种混淆代码的反混淆装置框图。
图6图根据一示例性实施例示出的一种电子设备的框图。
附图标记说明
120-终端;140-服务器;20-混淆代码的反混淆装置;201-接收模块;203-转换模块;205-分析模块;207-处理模块;400-电子设备;401-处理器;402-存储器;403-多媒体组件;404-输入/输出(I/O)接口;405-通信组件。
具体实施方式
以下结合附图对本公开的具体实施方式进行详细说明。应当理解的是,此处所描述的具体实施方式仅用于说明和解释本公开,并不用于限制本公开。
下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。
图1示出了本公开一个示例性实施例提供的计算机系统的结构示意图,该计算机系统包括终端120和服务器140。
终端120与服务器140之间通过有线或者无线网络相互连接。
终端120可以包括智能手机、笔记本电脑、台式电脑、平板电脑、智能音箱、智能机器人中的至少一种。
终端120包括显示器;显示器用于显示验证码的输入界面。
终端120包括第一存储器和第一处理器。第一存储器中存储有第一程序;上述第一程序被第一处理器调用执行以实现混淆代码的反混淆方法。第一存储器可以包括但不限于以下几种:随机存取存储器(Random Access Memory,RAM)、只读存储器(Read OnlyMemory,ROM)、可编程只读存储器(Programmable Read-Only Memory,PROM)、可擦除只读存储器(Erasable Programmable Read-Only Memory,EPROM)、以及电可擦除只读存储器(Electric Erasable Programmable Read-Only Memory,EEPROM)。
第一处理器可以是一个或者多个集成电路芯片组成。可选地,第一处理器可以是通用处理器,比如,中央处理器(Central Processing Unit,CPU)或者网络处理器(NetworkProcessor,NP)。可选地,第一处理器可以用于执行本公开提供的混淆代码的反混淆方法。
服务器140包括第二存储器和第二处理器。第二存储器中存储有第二程序,上述第二程序被第二处理器调用来实现本公开提供的混淆代码的反混淆方法。可选地,第二存储器可以包括但不限于以下几种:RAM、ROM、PROM、EPROM、EEPROM。可选地,第二处理器可以是通用处理器,比如,CPU或者NP。
服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN(Content Delivery Network,内容分发网络)、以及大数据和人工智能平台等基础云计算服务的云服务器。终端可以是智能手机、平板电脑、笔记本电脑、台式计算机、智能音箱、智能手表等,但并不局限于此。终端以及服务器可以通过有线或无线通信方式进行直接或间接地连接,本公开在此不做限制。
示例性的,服务器可以是提供网站服务的后端服务器,如提供数据、文件下载等网站服务,终端上可以安装有各种用于浏览网页的应用程序,如浏览器,用户可以从浏览器上访问、下载后端服务器的数据、文件等。本公开提供的混淆代码的反混淆方法可以应用于终端120或服务器140,或者也可以由终端120和服务器140构成的系统执行。
直接从网站上获取的网页源代码是经过一些混淆算法将开发人员可读的代码变成了不可读的混淆代码。开发人员无法快速获取到高可读性的JS代码以及网页的加密算法。现有的一些获取JS混淆代码的加密算法的方法有,一是直接阅读JS混淆代码,调试JS混淆代码以获取加密算法,这种方法对开发人员来说极具挑战,二是将JS混淆代码通过人工的手段进行替换。但这两种方法均无法做到用户只提供JS混淆代码,无需任何额外的操作就可以得到反混淆后的高可读性代码。为了快速获取开发人员高可读性的JS代码,本公开提出了一种混淆代码的反混淆方法。
请参阅图2,图2为本公开一个示例性实施例提供的一种混淆代码的反混淆方法的流程图。该方法由电子设备来执行,例如,由图1所示的计算机系统中的终端或服务器来执行。图2所示的混淆代码的反混淆方法包括以下步骤:
在步骤S101中,获取混淆代码文本。
示例性的,用户可以在终端或服务器上打开浏览器,打开需要获取的数据所在的网页,或者说是需要验证码的网页,点击查看源代码,即可获取到混淆代码文本。
本公开提到的混淆代码文本以JS混淆代码为例来进行说明。
需要说明的是,JS代码的混淆算法包括但不限于变量替换、函数执行平坦化和全局变量调用三种,本公开以这三种为例来进行说明。变量替换具体为将JS代码中的变量名称用十六进制或者其他进制来表示,以此来降低代码的可读性,达到混淆JS代码的目的。函数执行平坦化具体为将执行的JS代码之间的逻辑关系打乱,增加一个流程分发器来控制JS代码的执行,以此来降低JS代码的可读性,达到混淆JS代码的目的。全局变量调用具体为利用全局变量存储代码中的引用,利用一个全局变量来存储所有的被引用的变量名称,通过全局变量的引用来间接调用内存中的实际引用变量,即真实的引用变量。
在步骤S102中,将混淆代码文本转换为抽象语法树。
抽象语法树(Abstract Syntax Tree,AST)是源代码的抽象语法结构的树状表示,树上的每个节点都表示源代码中的一种结构,之所以说是抽象的,是因为抽象语法树并不会表示出真实语法出现的每一个细节,比如说,嵌套括号被隐含在树的结构中,并没有以节点的形式呈现。
JS混淆代码包括多个代码块。将混淆代码文本转换为抽象语法树包括:对混淆代码文本进行解析,得到解析后的混淆代码文本,将解析后的混淆代码文本转换为抽象语法树。示例性的,对JS混淆代码进行解析,得到解析后的JS混淆代码,将解析后的JS混淆代码转换为AST,即将解析后的JS混淆代码转换为一种抽象的数据结构。示例性的,可以通过JS的一些库函数,比如“@babel/parser”,将混淆代码转换成AST的函数。Babel Parser是Babel中使用的JavaScript解析器,Babel是一个Javascript编译器。
需要说明的是,解析后的JS混淆代码转换得到的AST包括多个节点,某些节点可能会有一个或多个子节点,每个节点对应一个代码块,从多个节点中寻找到最常被调用的全局变量,以及最常被调用的全局变量的兄弟节点。通过AST中最常被调用的全局变量定义的位置,获取该全局变量的定义代码块及其初始化的代码块,然后将获取到的全局变量代码块转换为JS代码,利用JavaScript的容器化组件将全局变量代码块加载当前内存中,提供给后续步骤的替换使用。
需要说明的是,最常被调用的全局变量的定义为:遍历JS混淆代码中的全局变量名称,记录全局变量名称出现的次数,按照全局变量名称出现的次数将全局变量名称对应的全局变量进行降序排列得到一个队列,然后将该队列中从头到尾依次检测全局变量是否为在AST的第一层或者第二层结点定义的全局变量,若是,则该全局变量为最常被调用的全局变量。
在步骤S103中,对抽象语法树进行语法分析,以获取混淆代码文本中代码块对应的混淆方式。
示例性的,以获取混淆代码文本中每个代码块对应的混淆方式首先需要遍历AST中的所有节点,例如可以采用JS的库函数“@babel/traverse"遍历AST中的节点,根据节点中包含的变量标识或语句属性确定混淆代码文本中代码块对应的混淆方式。变量标识包括第一编码变量标识及全局变量的标识,语句属性包括循环结构语句及选择结构语句。
根据节点中包含的变量标识、语句属性确定混淆代码文本中代码块对应的混淆方式具体为:对于每个节点,当检测到某个节点中的第一编码变量标识时,确定该节点对应的代码块的混淆方式为变量替换,该第一编码变量标识可以是但不限于unicode编码变量标识;当检测到某个节点中的循环结构语句或选择结构语句时,确定该节点对应的代码块的混淆方式为函数执行平坦化,该循环结构语句可以是for循环语句,该选择结构语句可以是switch…case选择结构语句;当检测到某个节点中的全局变量的标识时,确定该节点对应的代码块的混淆方式为全局变量调用。
在步骤S104中,确定混淆方式对应的反混淆方案。
在获取到每个代码块对应的混淆方式后,确定混淆方式对应的反混淆方案。
示例性的,当某个节点对应的代码块的混淆方式为变量替换时,该代码块对应的反混淆方案为:将节点中的变量进行替换得到反混淆后的代码文本。
示例性的,当某个节点对应的代码块的混淆方式为函数执行平坦化时,该代码块对应的反混淆方案为:通过调整代码块中代码文本的执行顺序得到反混淆后的代码文本。
示例性的,当某个节点对应的代码块的混淆方式为全局变量调用时,该代码块对应的反混淆方案为:利用实际引用变量替换全局变量的引用得到反混淆后的代码文本。
在步骤S105中,根据反混淆方案对代码块进行处理得到反混淆后的代码文本。
根据反混淆方案对代码块进行处理得到每个代码块的反混淆后的代码文本。
示例性的,将节点中的变量进行替换的具体过程为:筛选出该节点中的第一编码变量,通过编码器将所述第一编码变量替换为第二编码变量,以得到所述代码块的反混淆后的代码文本。示例性的,该第二编码变量可以是但不限于utf8编码。例如,筛选出该节点中的unicode编码变量,将该节点中的unicode编码变量全部替换为utf8编码。
当某个节点对应的代码块的混淆方式为函数执行平坦化时,步骤S105包括三个子步骤,请参阅图3,图3是本公开一个示例性实施例示出的步骤S105的子步骤的流程图。
在子步骤S10511中,获取节点的对应的全局变量。
获取该节点对应的全局变量以及该全局变量的名称。
在子步骤S10512中,当全局变量的名称与预存储的全局变量名称一致时,获取代码块的流程分发器的控制流程。
当该全局变量的名称与预存储的全局变量名称一致时,对该混淆方式是否为函数执行平坦化方式再进行一次校验,具体为判断该代码块对应的节点以及该节点的子节点是否符合函数执行平坦化的节点格式,若是,则校验通过,若否,则校验不通过,并退出执行步骤S10512;校验通过则确定该混淆方式为全局变量调用,然后获取该代码块的流程分发器的控制流程,该流程分发器用于控制代码块中的代码文本的执行,控制流程是指代码块中的代码文本的执行顺序。
该预存储的全局变量名称为最常被调用的全局变量的名称。
当全局变量名称与预存储的全局变量名称不一致时,退出执行步骤S10512。
在子步骤S10513中,根据控制流程调整代码块中代码文本的执行顺序,将调整执行顺序后的代码文本,作为代码块的反混淆后的代码文本。
根据控制流程调整代码块中的代码文本的执行顺序,将流程分发器打乱的代码文本的执行顺序调整至正确的执行顺序,将调整执行顺序后的代码文本,作为代码块的反混淆后的代码文本。
当某个节点对应的代码块的混淆方式为全局变量调用时,步骤S105包括三个子步骤,请参阅图4,图4是本公开另一个示例性实施例示出的步骤S105的子步骤的流程图。
在子步骤S10521中,获取全局变量对应的全局变量名称。
在子步骤S10522中,当全局变量名称与预存储的全局变量名称一致时,获取全局变量的引用,执行全局变量的引用从内存中获取实际引用变量。
当全局变量名称与预存储的全局变量名称一致时,对该混淆方式是否为全局变量调用方式再进行一次校验,具体为判断该代码块对应的节点以及该节点的子节点是否符合全局变量调用的节点格式,若是,则校验通过,若否,则校验不通过,并退出执行步骤S10522;校验通过则确定该混淆方式为全局变量调用,然后获取全局变量的引用,执行全局变量的引用从内存中返回实际引用变量。
当全局变量名称与预存储的全局变量名称不一致时,退出执行步骤S10522。
该预存储的全局变量名称为最常被调用的全局变量的名称。
在子步骤S10523中,利用实际引用变量替换全局变量的引用,将替换全局变量的引用后的代码文本作为代码块的反混淆后的代码文本。
需要说明的是,子步骤S10511-S10513与子步骤S10521-S10523之间并没有先后执行的顺序关系,可以是先执行子步骤S10511-S10513,后执行子步骤S10521-S10523;可以是先执行子步骤S10521-S10523,后执行子步骤S10511-S10513;也可以是同时执行。
需要说明的是,每个代码块可能会对应不止一种混淆方式,对同一个代码块的对应的多个混淆方式采用对应的反混淆方案进行反混淆时,多个反混淆的过程并不冲突,即多个反混淆的过程可以是同时进行的,他们之间互不影响。
在步骤S106中,根据反混淆后的代码文本得到目标代码文本。
目标代码文本为用户可读的代码文本。
执行步骤S104后,AST中的节点对应的代码块均为反混淆后用户可读的代码文本,此时将AST重新生成高可读性代码,例如通过JS的库函数“@babel/generator”将AST转换为代码,输出即可得到目标代码文本。
综上所述,本公开示例性实施例提供的混淆代码的反混淆方法,包括:获取混淆代码文本,将混淆代码文本转换为抽象语法树,对抽象语法树进行语法分析,以获取混淆代码文本中代码块对应的混淆方式,确定混淆方式对应的反混淆方案,根据反混淆方案对代码块进行处理得到反混淆后的代码文本,根据反混淆后的代码文本得到目标代码文本。通过反混淆方案,使得开发人员能够非常快速的获取反混淆后的高可读性的目标代码文本,同时快速的获取到网页的加密算法。
图5是本公开一个示例性实施例示出的一种混淆代码的反混淆装置框图。参照图5,该装置20包括接收模块201、转换模块203、分析模块205和处理模块207。
该接收模块201,用于获取混淆代码文本。
该转换模块203,用于将所述混淆代码文本转换为抽象语法树;
该分析模块205,用于对所述抽象语法树进行语法分析,以获取所述混淆代码文本中代码块对应的混淆方式;
该处理模块207,用于根据所述混淆方式对应的反混淆方案;
该处理模块207,还用于根据所述反混淆方案对所述代码块进行处理得到反混淆后的代码文本;
该处理模块207,还用于根据所述反混淆后的代码文本得到目标代码文本。
可选地,所述混淆方式包括变量替换、函数执行平坦化和全局变量调用中的至少一种。
可选地,该分析模块205,还用于:
遍历所述抽象语法树中的所有所述节点;
根据所述节点中包含的变量标识或语句属性确定所述混淆代码文本中代码块对应的混淆方式。
可选地,该分析模块205,还用于:
对于所有所述节点中的每个节点,当检测到所述节点中的所述第一编码变量标识时,确定所述节点对应的所述代码块的混淆方式为所述变量替换;
当检测到所述节点中的所述循环结构语句或所述选择结构语句时,确定所述节点对应的所述代码块的混淆方式为所述函数执行平坦化;
当检测到所述节点中的所述全局变量的标识时,确定所述节点对应的所述代码块的混淆方式为所述全局变量调用。
可选地,该处理模块207,还用于:筛选出所述节点中的第一编码变量;
通过编码器将所述第一编码变量替换为第二编码变量,以得到所述代码块的反混淆后的代码文本。
可选地,该分析模块205,还用于:通过调整所述代码块中代码文本的执行顺序得到所述反混淆后的代码文本。
可选地,该处理模块207,还用于:获取所述节点的对应的全局变量;
当所述全局变量的名称与预存储的全局变量名称一致时,
获取所述代码块的流程分发器的控制流程;所述控制流程表征所述代码块中的代码文本的执行顺序;
根据所述控制流程调整所述代码块中代码文本的执行顺序,将调整所述执行顺序后的所述代码文本,作为所述代码块的反混淆后的代码文本。
可选地,该分析模块205,还用于:利用实际引用变量替换全局变量的引用得到所述反混淆后的代码文本。
可选地,该处理模块207,还用于:获取所述全局变量对应的全局变量名称;
当所述全局变量名称与预存储的全局变量名称一致时,
获取所述全局变量的引用,执行所述全局变量的引用从内存中获取所述实际引用变量;
利用所述实际引用变量替换所述全局变量的引用,将替换所述全局变量的引用后的代码文本作为所述代码块的反混淆后的代码文本。
可选地,该转换模块203,用于:
对所述混淆代码文本进行解析,得到解析后的混淆代码文本;
将所述解析后的混淆代码文本转换为所述抽象语法树。
综上所述,获取混淆代码文本,将混淆代码文本转换为抽象语法树,对抽象语法树进行语法分析,以获取混淆代码文本中代码块对应的混淆方式,确定混淆方式对应的反混淆方案,根据反混淆方案对代码块进行处理得到反混淆后的代码文本,根据反混淆后的代码文本得到目标代码文本。通过反混淆方案,使得开发人员能够非常快速的获取反混淆后的高可读性的目标代码文本,同时快速的获取到网页的加密算法。
关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
图6是根据一示例性实施例示出的一种电子设备400的框图。如图4所示,该电子设备400可以包括:处理器401,存储器402。该电子设备400还可以包括多媒体组件403,输入/输出(I/O)接口404,以及通信组件405中的一者或多者。
其中,处理器401用于控制该电子设备400的整体操作,以完成上述的混淆代码的反混淆方法中的全部或部分步骤。存储器402用于存储各种类型的数据以支持在该电子设备400的操作,这些数据例如可以包括用于在该电子设备400上操作的任何应用程序或方法的指令,以及应用程序相关的数据,例如联系人数据、收发的消息、图片、音频、视频等等。该存储器402可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,例如静态随机存取存储器(Static Random Access Memory,简称SRAM),电可擦除可编程只读存储器(Electrically Erasable Programmable Read-Only Memory,简称EEPROM),可擦除可编程只读存储器(Erasable Programmable Read-Only Memory,简称EPROM),可编程只读存储器(Programmable Read-Only Memory,简称PROM),只读存储器(Read-Only Memory,简称ROM),磁存储器,快闪存储器,磁盘或光盘。多媒体组件403可以包括屏幕和音频组件。其中屏幕例如可以是触摸屏,音频组件用于输出和/或输入音频信号。例如,音频组件可以包括一个麦克风,麦克风用于接收外部音频信号。所接收的音频信号可以被进一步存储在存储器402或通过通信组件405发送。音频组件还包括至少一个扬声器,用于输出音频信号。I/O接口404为处理器401和其他接口模块之间提供接口,上述其他接口模块可以是键盘,鼠标,按钮等。这些按钮可以是虚拟按钮或者实体按钮。通信组件405用于该电子设备400与其他设备之间进行有线或无线通信。无线通信,例如Wi-Fi,蓝牙,近场通信(Near FieldCommunication,简称NFC),2G、3G、4G、NB-IOT、eMTC、或其他5G等等,或它们中的一种或几种的组合,在此不做限定。因此相应的该通信组件405可以包括:Wi-Fi模块,蓝牙模块,NFC模块等等。
在一示例性实施例中,电子设备400可以被一个或多个应用专用集成电路(Application Specific Integrated Circuit,简称ASIC)、数字信号处理器(DigitalSignal Processor,简称DSP)、数字信号处理设备(Digital Signal Processing Device,简称DSPD)、可编程逻辑器件(Programmable Logic Device,简称PLD)、现场可编程门阵列(Field Programmable Gate Array,简称FPGA)、控制器、微控制器、微处理器或其他电子元件实现,用于执行上述的混淆代码的反混淆方法。
在另一示例性实施例中,还提供了一种包括程序指令的计算机可读存储介质,该程序指令被处理器执行时实现上述的混淆代码的反混淆方法的步骤。例如,该计算机可读存储介质可以为上述包括程序指令的存储器402,上述程序指令可由电子设备400的处理器401执行以完成上述的混淆代码的反混淆方法。在另一示例性实施例中,还提供一种计算机程序产品,该计算机程序产品包含能够由可编程的装置执行的计算机程序,该计算机程序具有当由该可编程的装置执行时用于执行上述的混淆代码的反混淆方法的代码部分。
以上结合附图详细描述了本公开的优选实施方式,但是,本公开并不限于上述实施方式中的具体细节,在本公开的技术构思范围内,可以对本公开的技术方案进行多种简单变型,这些简单变型均属于本公开的保护范围。
另外需要说明的是,在上述具体实施方式中所描述的各个具体技术特征,在不矛盾的情况下,可以通过任何合适的方式进行组合,为了避免不必要的重复,本公开对各种可能的组合方式不再另行说明。
此外,本公开的各种不同的实施方式之间也可以进行任意组合,只要其不违背本公开的思想,其同样应当视为本公开所公开的内容。
Claims (13)
1.一种混淆代码的反混淆方法,其特征在于,包括:
获取混淆代码文本;
将所述混淆代码文本转换为抽象语法树;
对所述抽象语法树进行语法分析,以获取所述混淆代码文本中代码块对应的混淆方式;
确定所述混淆方式对应的反混淆方案;
根据所述反混淆方案对所述代码块进行处理得到反混淆后的代码文本;
根据所述反混淆后的代码文本得到目标代码文本。
2.根据权利要求1所述的方法,其特征在于,所述混淆方式包括变量替换、函数执行平坦化和全局变量调用中的至少一种。
3.根据权利要求2所述的方法,其特征在于,所述抽象语法树包括多个节点,每个所述节点对应一个所述代码块;
所述对所述抽象语法树进行语法分析,以获取所述混淆代码文本中代码块对应的混淆方式的步骤,包括:
遍历所述抽象语法树中的所有所述节点;
根据所述节点中包含的变量标识或语句属性确定所述混淆代码文本中代码块对应的混淆方式。
4.根据权利要求3所述的方法,其特征在于,所述变量标识包括第一编码变量标识及全局变量的标识,所述语句属性包括循环结构语句及选择结构语句;
所述根据所述节点中包含的变量属性、语句属性确定所述混淆代码文本中代码块对应的混淆方式的步骤,包括:
对于所有所述节点中的每个节点,当检测到所述节点中的所述第一编码变量标识时,确定所述节点对应的所述代码块的混淆方式为所述变量替换;
当检测到所述节点中的所述循环结构语句或所述选择结构语句时,确定所述节点对应的所述代码块的混淆方式为所述函数执行平坦化;
当检测到所述节点中的所述全局变量的标识时,确定所述节点对应的所述代码块的混淆方式为所述全局变量调用。
5.根据权利要求4所述的方法,其特征在于,所述节点对应的所述代码块的混淆方式为所述变量替换,所述根据所述反混淆方案对所述代码块进行处理得到反混淆后的代码文本的步骤,包括:
筛选出所述节点中的第一编码变量;
通过编码器将所述第一编码变量替换为第二编码变量,以得到所述代码块的反混淆后的代码文本。
6.根据权利要求4所述的方法,其特征在于,所述节点对应的所述代码块的混淆方式为所述函数执行平坦化,所述根据所述反混淆方案对所述代码块进行处理得到反混淆后的代码文本的步骤,包括:
通过调整所述代码块中代码文本的执行顺序得到所述反混淆后的代码文本。
7.根据权利要求6所述的方法,其特征在于,所述通过调整所述代码块中代码文本的执行顺序得到所述反混淆后的代码文本的步骤,包括:
获取所述节点的对应的全局变量;
当所述全局变量的名称与预存储的全局变量名称一致时,
获取所述代码块的流程分发器的控制流程;所述控制流程表征所述代码块中的代码文本的执行顺序;
根据所述控制流程调整所述代码块中代码文本的执行顺序,将调整所述执行顺序后的所述代码文本,作为所述代码块的反混淆后的代码文本。
8.根据权利要求4所述的方法,其特征在于,所述节点对应的所述代码块的混淆方式为所述全局变量调用,所述根据所述反混淆方案对所述代码块进行处理得到反混淆后的代码文本的步骤,包括:
利用实际引用变量替换全局变量的引用得到所述反混淆后的代码文本。
9.根据权利要求8所述的方法,其特征在于,所述利用实际引用变量替换全局变量的引用得到所述反混淆后的代码文本的步骤,包括:
获取所述全局变量对应的全局变量名称;
当所述全局变量名称与预存储的全局变量名称一致时,
获取所述全局变量的引用,执行所述全局变量的引用从内存中获取所述实际引用变量;
利用所述实际引用变量替换所述全局变量的引用,将替换所述全局变量的引用后的代码文本作为所述代码块的反混淆后的代码文本。
10.根据权利要求1所述的方法,其特征在于,所述将所述混淆代码文本转换为抽象语法树,包括:
对所述混淆代码文本进行解析,得到解析后的混淆代码文本;
将所述解析后的混淆代码文本转换为所述抽象语法树。
11.一种混淆代码的反混淆装置,其特征在于,包括:
接收模块,用于获取混淆代码文本;
转换模块,用于将所述混淆代码文本转换为抽象语法树;
分析模块,用于对所述抽象语法树进行语法分析,以获取所述混淆代码文本中代码块对应的混淆方式;
处理模块,用于根据所述混淆方式对应的反混淆方案;
所述处理模块,还用于根据所述反混淆方案对所述代码块进行处理得到反混淆后的代码文本;
所述处理模块,还用于根据所述反混淆后的代码文本得到目标代码文本。
12.一种计算机可读介质,其上存储有计算机程序,其特征在于,所述程序被处理装置执行时实现权利要求1-10中任一项所述方法的步骤。
13.一种电子设备,其特征在于,包括:
存储装置,其上存储有计算机程序;
处理装置,用于执行所述存储装置中的所述计算机程序,以实现权利要求1-10中任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111643591.0A CN114296793A (zh) | 2021-12-29 | 2021-12-29 | 混淆代码的反混淆方法、装置、可读介质及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111643591.0A CN114296793A (zh) | 2021-12-29 | 2021-12-29 | 混淆代码的反混淆方法、装置、可读介质及电子设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114296793A true CN114296793A (zh) | 2022-04-08 |
Family
ID=80970883
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111643591.0A Pending CN114296793A (zh) | 2021-12-29 | 2021-12-29 | 混淆代码的反混淆方法、装置、可读介质及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114296793A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117349803A (zh) * | 2023-12-06 | 2024-01-05 | 浙江大学 | 代码解混淆方法、装置、电子设备及计算机可读存储介质 |
-
2021
- 2021-12-29 CN CN202111643591.0A patent/CN114296793A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117349803A (zh) * | 2023-12-06 | 2024-01-05 | 浙江大学 | 代码解混淆方法、装置、电子设备及计算机可读存储介质 |
CN117349803B (zh) * | 2023-12-06 | 2024-03-19 | 浙江大学 | 代码解混淆方法、装置、电子设备及计算机可读存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107977351B (zh) | 电子报表生成方法、装置、计算机设备及存储介质 | |
WO2018113596A1 (zh) | 应用程序审核操作权限处理方法、装置和存储介质 | |
CN108038134B (zh) | 页面展示的方法、装置和存储介质以及电子设备 | |
CN110688598B (zh) | 业务参数采集方法、装置、计算机设备和存储介质 | |
US20210058475A1 (en) | Systems and methods for tracking sharing of web content | |
CN111338623B (zh) | 一种开发用户界面的方法、装置、介质和电子设备 | |
US10382313B2 (en) | Test building for testing server operation | |
CN111274781A (zh) | 表格显示方法、装置、存储介质及电子设备 | |
CN111090582A (zh) | 错误代码定位方法、装置、存储介质及电子设备 | |
CN111124544A (zh) | 界面显示方法、装置、电子设备及存储介质 | |
CN113535587B (zh) | 目标应用检测方法、装置及计算机设备 | |
US20180089154A1 (en) | Computer implemented system and method for transforming web content for display on multiple form factors | |
CN114296793A (zh) | 混淆代码的反混淆方法、装置、可读介质及电子设备 | |
CN113590985B (zh) | 页面跳转配置方法、装置、电子设备和计算机可读介质 | |
CN113535565B (zh) | 一种接口用例生成方法、装置、设备和介质 | |
CN115809193A (zh) | 前端逆向异常数据健壮性检测方法、装置及存储介质 | |
CN115080154A (zh) | 页面显示方法、装置、存储介质及电子设备 | |
CN114115855A (zh) | 代码复用方法及装置、计算机可读存储介质、电子设备 | |
CN113377376A (zh) | 数据包生成方法、数据包生成装置、电子设备及存储介质 | |
CN113138767A (zh) | 代码语言转换方法、装置、电子设备及存储介质 | |
CN113886216A (zh) | 接口测试和工具配置方法、装置、电子设备和存储介质 | |
US11671529B2 (en) | Cross-channel configurable navigation | |
US11949667B2 (en) | Masking composite payloads using policy graphs | |
CN110704066B (zh) | 代码编译方法、装置、设备及存储介质 | |
CN115600023A (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 |