CN112597454A - 代码混淆方法、代码运行方法、装置、介质与设备 - Google Patents

代码混淆方法、代码运行方法、装置、介质与设备 Download PDF

Info

Publication number
CN112597454A
CN112597454A CN202011583592.6A CN202011583592A CN112597454A CN 112597454 A CN112597454 A CN 112597454A CN 202011583592 A CN202011583592 A CN 202011583592A CN 112597454 A CN112597454 A CN 112597454A
Authority
CN
China
Prior art keywords
code
node
obfuscated
file
variable
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
Application number
CN202011583592.6A
Other languages
English (en)
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.)
Guangdong Oppo Mobile Telecommunications Corp Ltd
Shenzhen Huantai Technology Co Ltd
Original Assignee
Guangdong Oppo Mobile Telecommunications Corp Ltd
Shenzhen Huantai 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 Guangdong Oppo Mobile Telecommunications Corp Ltd, Shenzhen Huantai Technology Co Ltd filed Critical Guangdong Oppo Mobile Telecommunications Corp Ltd
Priority to CN202011583592.6A priority Critical patent/CN112597454A/zh
Publication of CN112597454A publication Critical patent/CN112597454A/zh
Pending legal-status Critical Current

Links

Images

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/42Syntactic analysis
    • G06F8/427Parsing
    • 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)

Abstract

本公开提供代码混淆方法、代码运行方法、代码混淆装置、代码运行装置、计算机可读存储介质与电子设备,涉及计算机安全技术领域。所述方法包括:将待处理代码解析为抽象语法树;按照预先配置的转换规则对所述抽象语法树的各个节点进行处理,生成混淆代码;在所述混淆代码中插入运行检测代码,得到目标转换代码;将所述目标转换代码转换为字节码文件。本公开可以增加代码的阅读和调试难度,提升代码安全性。

Description

代码混淆方法、代码运行方法、装置、介质与设备
技术领域
本公开涉及计算机安全技术领域,尤其涉及代码混淆方法、代码运行方法、代码混淆装置、代码运行装置、计算机可读存储介质与电子设备。
背景技术
代码是程序员用开发工具所支持的语言编写的源文件,是一组由字符、符号或信号码元以离散形式表示信息的明确的规则体系。按照代码的执行端,可以分为服务端代码和客户端代码。其中,客户端代码是指运行在用户手机、电脑等电子设备上的代码,可以用于提交数据,如获取用户录入的数据,并将该数据提交给服务端。
然而,客户端代码对于用户而言是可见的。因此,为了防止代码被泄露,可以通过加密的方式对代码进行保护,而在客户端运行代码时,可以通过获取服务端发送的密钥来进行解密,但这种方式也意味着密钥会直接暴露在代码中,在断网情况下密钥也无法传输至客户端。
因此,需要提供一种能够有效保护代码安全的方法。
发明内容
本公开提供了代码混淆方法、代码运行方法、代码混淆装置、代码运行装置、计算机可读存储介质与电子设备,进而至少在一定程度上提高代码的安全性。
本公开的其他特性和优点将通过下面的详细描述变得显然,或部分地通过本公开的实践而习得。
根据本公开的第一方面,提供一种代码混淆方法,包括:将待处理代码解析为抽象语法树;按照预先配置的转换规则对所述抽象语法树的各个节点进行处理,生成混淆代码;在所述混淆代码中插入运行检测代码,得到目标转换代码;将所述目标转换代码转换为字节码文件。
根据本公开的第二方面,提供一种代码运行方法,包括:接收字节码文件,其中,所述字节码文件为通过上述任一项所述的代码混淆方法生成的字节码文件;对所述字节码文件进行反解析,生成混淆代码,所述混淆代码包括运行检测代码;运行所述混淆代码,并通过所述运行检测代码检测所述混淆代码的运行状态。
根据本公开的第三方面,提供一种代码混淆装置,包括:解析单元,用于将待处理代码解析为抽象语法树;处理单元,用于按照预先配置的转换规则对所述抽象语法树的各个节点进行处理,生成混淆代码;插入单元,用于在所述混淆代码中插入运行检测代码,得到目标转换代码;转换单元,用于将所述目标转换代码转换为字节码文件。
根据本公开的第四方面,提供一种代码运行装置,包括:接收单元,用于接收字节码文件,其中,所述字节码文件为通过上述任一项所述的代码混淆方法生成的字节码文件;反解析单元,用于对所述字节码文件进行反解析,生成混淆代码,所述混淆代码包括运行检测代码;运行单元,用于运行所述混淆代码,并通过所述运行检测代码检测所述混淆代码的运行状态。
根据本公开的第五方面,提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述代码混淆方法和代码运行方法。
根据本公开的第六方面,提供一种电子设备,包括:处理器;以及存储器,用于存储所述处理器的可执行指令;其中,所述处理器配置为经由执行所述可执行指令来执行上述代码混淆方法和代码运行方法。
本公开的技术方案具有以下有益效果:
根据上述代码混淆方法、代码运行方法、代码混淆装置、代码运行装置、计算机可读存储介质与电子设备,可以将待处理代码解析为抽象语法树,并按照预先配置的转换规则对抽象语法树的各个节点进行处理,生成混淆代码,在该混淆代码中插入运行检测代码,得到目标转换代码,将目标转换代码转换为字节码文件。一方面,通过按照预先配置的转换规则对抽象语法树的各个节点进行处理,生成混淆代码,可以极大地降低代码的可读性,增加代码调试的难度,提高代码的安全性;另一方面,通过在混淆代码中插入运行检测代码,可以加强对混淆代码运行的监测,防止客户端违规运行混淆代码,因而可以进一步提高代码的安全性;再一方面,通过将目标转换代码转换为字节码文件,可以提高代码的运行效率,也可以满足多种运行环境,如浏览器、快游戏等非浏览器环境的代码运行,提高了代码的可适性。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。显而易见地,下面描述中的附图仅仅是本公开的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1示出本示例性实施方式的一种系统架构的示意图;
图2示出本示例性实施方式的一种代码混淆方法的流程图;
图3示出本示例性实施方式的一种生成混淆代码的流程图;
图4示出本示例性实施方式的一种代码混淆方法的子流程图;
图5示出本示例性实施方式的一种生成目标转换代码的流程图;
图6示出本示例性实施方式的一种生成字节码文件的流程图;
图7示出本示例性实施方式的一种代码运行方法的流程图;
图8示出本示例性实施方式的另一种代码运行方法的流程图;
图9示出本示例性实施方式的一种代码混淆装置的结构框图;
图10示出本示例性实施方式的一种代码运行装置的结构框图;
图11示出本示例性实施方式的计算机可读存储介质的示意图;
图12示出本示例性实施方式的电子设备的示意图。
具体实施方式
现在将参考附图更全面地描述示例实施方式。然而,示例实施方式能够以多种形式实施,且不应被理解为限于在此阐述的范例;相反,提供这些实施方式使得本公开将更加全面和完整,并将示例实施方式的构思全面地传达给本领域的技术人员。所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施方式中。在下面的描述中,提供许多具体细节从而给出对本公开的实施方式的充分理解。然而,本领域技术人员将意识到,可以实践本公开的技术方案而省略所述特定细节中的一个或更多,或者可以采用其它的方法、组元、装置、步骤等。在其它情况下,不详细示出或描述公知技术方案以避免喧宾夺主而使得本公开的各方面变得模糊。
此外,附图仅为本公开的示意性图解,并非一定是按比例绘制。图中相同的附图标记表示相同或类似的部分,因而将省略对它们的重复描述。附图中所示的一些方框图是功能实体,不一定必须与物理或逻辑上独立的实体相对应。可以采用软件形式来实现这些功能实体,或在一个或多个硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。
相关技术的一种代码混淆方案中,可以将原始代码转换为Base64编码(基于64个可打印字符来表示二进制数据),再通过AES(Advanced Encryption Standard,高级加密标准)加密方法加密,在运行代码时,可以通过逆向解密的方法得到原始代码来运行。但是这种方法中,AES加密方法属于对称加密方法,密钥和公钥是相同的,并且密钥的传输也意味着密钥会直接暴露在代码中,因此,密钥一旦泄露,加密后的代码可以被轻易破解,故代码安全性较差。此外,在网络环境较差或断网情况下,密钥无法正常传输至客户端,此时,客户端无法对代码进行解密和运行。
图1示出了本公开示例性实施方式的一种系统架构的示意图。如图1所示,该系统架构100可以包括:客户端110、网络120和服务端130。客户端110可以是具有代码运行功能的各种电子设备,包括但不限于手机、平板电脑、数码相机、个人电脑等。网络120用以在客户端110和服务端130之间提供通信链路的介质,可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等。应该理解,图1中的客户端、网络和服务端的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端、网络和服务器。比如服务端130可以是多个服务器组成的服务器集群等。
本公开的示例性实施方式首先提供了一种代码混淆方法和代码运行方法。其中,代码混淆方法可以由图1中所示的服务端130执行,代码运行方法可以由图1中所示的客户端110或服务端130执行。
下面分别对本示例性实施方式中的代码混淆方法和代码运行方法进行详细阐述。
图2示出了本示例性实施方式中代码混淆方法的一种流程,可以包括以下步骤S210~S240:
步骤S210,将待处理代码解析为抽象语法树。
其中,待处理代码可以是由开发人员编写的原始代码,可以包括任意一种或多种编程语言编写的代码,如JavaScript语言、Python语言和C语言等;抽象语法树(AbstractSyntax Tree,AST)可以简称为语法树,是以树状形式表现原始代码的语法结构,树中的每个节点都可以表示原始代码中的一种语法结构,如包、类型、修饰符、运算符、接口、返回值等。
通过对待处理代码进行词法分析和语法分析,可以将待处理代码中的语句映射到树中的每个节点上,得到待处理代码的抽象语法树。以JavaScript语言的待处理代码为例,参考图3中步骤S301所示,可以通过JavaScript解析器,如Babel(一种编写下一代JavaScript语法的编译器)解析器等将待处理代码解析为相应的抽象语法树。
由于抽象语法树具有不依赖于具体文法和语言细节的特点,因此,通过将待处理代码解析为抽象语法树,可以增强代码中各个语法结构的独立性,为处理待处理代码提供便利。
步骤S220,按照预先配置的转换规则对上述抽象语法树的各个节点进行处理,生成混淆代码。
其中,转换规则是指将待处理代码的抽象语法树转换为混淆代码的处理规则,可以包括对上述待处理代码的各个语法结构对应的抽象语法树的节点的处理规则;混淆代码是一种功能上与待处理代码等同,但是难以阅读和理解的代码形式。
实际上,代码混淆是对编写完成的代码进行重新组织和处理,使得处理后的代码与处理前的代码可以完成相同的功能,但很难被反编译的代码形式。在将待处理代码解析为抽象语法树后,可以按照预先配置的转换规则遍历上述抽象语法树中的各个节点,并对其进行处理,例如,可以按照上述转换规则对抽象语法树各个节点中的字符串变量进行加密。通过该方法,可以降低待处理代码的可读性,增加代码被反编译的难度,即使反编译成功,也很难得出代码的真正语义,因而可以有效提高代码的安全性。
此外,在一种可选的实施方式中,在按照预先配置的转换规则对上述抽象语法树的各个节点进行处理时,如图3步骤S302所示,可以首先检查抽象语法树中是否存在未访问的节点,如果存在未访问的节点,则可以按照步骤S303~S320对未访问的节点进行处理,以生成混淆代码;如果不存在未访问的节点,说明上述抽象语法树中的每个节点都完成了处理,则可以按照步骤S320通过Babel提供的接口处理后的抽象语法树生成为混淆代码。
由于抽象语法树中的每个节点都表示待处理代码中的一种语法结构,相同语法结构的节点可以对应于相同的节点类型,基于此,在一种可选的实施方式中,如图4所示,步骤S220可以通过以下步骤S410~S430实现:
步骤S410.确定上述抽象语法树中各个节点的类型。
步骤S420.在上述转换规则中,确定节点类型与上述各个节点的类型相匹配的匹配转换规则。
步骤S430.利用上述匹配转换规则对各个节点进行处理,生成混淆代码。
其中,匹配转换规则是转换规则中用于对上述抽象语法树中的各个节点进行处理的转换规则。
在上述抽象语法树中,根据各个节点中的变量类型、各变量间的关系和各节点的代码功能类型等,可以确定抽象语法树中各个节点的类型。例如,对于声明变量的节点,可以确定该节点的类型为变量声明节点,对于节点中具有字符串的节点,则可以确定该节点的类型为字符串节点。特别的,一个节点也可以同时对应多种节点类型,例如,对于声明变量的节点,若该节点中同时具有字符串,则该节点的类型为变量声明节点和字符串节点。在确定抽象语法树中各个节点的类型后,可以根据上述转换规则,确定转换规则中节点类型与上述各个节点的类型相匹配的匹配转换规则,从而按照对应的匹配转换规则对上述各个节点进行处理,进而生成待处理代码的混淆代码。相应的,当抽象语法树的节点具有多种节点类型时,其对应的匹配转换规则也可以有多个,此时,可以按照每个匹配转换规则分别对上述抽象语法树的节点进行处理,例如,对于上述节点的类型为变量声明节点和字符串节点的节点,可以首先按照变量声明节点对应的匹配转换规则对上述节点进行处理,然后按照字符串节点对应的匹配转换规则对上述节点中的字符串进行处理。
具体的,在一种可选的实施方式中,步骤S430可以通过以下方法实现:
在上述各个节点中,将变量声明节点中的变量名转换为十六进制码。
其中,变量声明节点是指节点的代码功能为创建新的变量和表示变量类型的节点。
对于变量声明节点中的变量名,可以将其转换为十六进制码,具体的,可以将变量名转换为Unicode(Unicode码)编码,进而将该Unicode编码转换为十六进制码,用该十六进制码的变量名替换原有的变量名,以此来提高代码的阅读难度。
进一步的,为了提高抽象语法树的节点处理效率,在一种可选的实施方式中,在将变量声明节点中的变量名转换为十六进制码时,还可以判断上述变量声明节点中的变量名与历史变量名是否相同,从而在确定上述变量声明节点中的变量名与历史变量名相同时,将历史变量名对应的十六进制码确定为上述变量声明节点中的变量名所对应的十六进制码。
其中,历史变量名可以是历史时间内各变量声明节点中的变量名,且该历史变量名具有对应的十六进制码。例如,参考图3所示,当确定抽象语法树的节点中存在未访问的节点时,可以首先按照步骤S303判断未访问的节点是否为变量声明节点,在确定未访问节点是变量声明节点时,可以将该变量声明节点中的变量名转换为十六进制码。或者,也可以通过步骤S304判断未访问节点的变量名与历史变量名是否相同,在确定未访问节点的变量名与历史变量名相同时,可以按照步骤S305将历史变量名对应的十六进制码确定为上述未访问节点的变量名所对应的十六进制码,在确定未访问节点的变量名与历史变量名不同时,可以按照步骤S306将未访问节点的变量名转换为十六进制码,同时可以将该变量名作为历史变量名,并记录该历史变量名与十六进制码的转换关系,从而在下一次进行转换时,确定需要转换的变量名是否与该历史变量名是否相同,以便快速确定需要转换的变量名的十六进制码。
在一些情况下,上述抽象语法树的各个节点中可能会包括大量的空格或Tab符等,因此,在一种可选的实施方式中,在上述各个节点中包括空节点时,步骤S430还可以通过删除上述各个节点中的空节点实现。
其中,空节点可以是节点中包括空格、Tab符、空的代码块或括号等的节点。
对于各个节点中的空节点,如节点中的空格、空的代码块等,可以将空节点进行删除,来压缩代码文本的大小。例如,如图3所示,在确定未访问节点不是变量声明节点时,可以按照步骤S307判断未访问节点是否为空节点,如确定节点中是否全为空格或空的代码块,当确定未访问节点是空节点,如节点中全为空格或空的代码块时,可以按照步骤S308删除该未访问节点,来压缩代码文本的大小。
在一种可选的实施方式中,当上述各个节点中包括字符串时,步骤S430还可以通过提取上述各个节点中的字符串,并将该字符串存储至全局变量实现。
其中,全局变量也可以称为外部变量,是在函数外部定义的变量,可以被代码中的所有对象或函数引用。
对于各个节点中的字符串,可以将字符串统一存储到对应的全局变量中。例如,继续参考图3所示,当确定未访问节点不是空节点时,可以进一步按照步骤S309判断未访问节点是否为字符串节点,当确定该节点为字符串节点时,可以按照步骤S310将上述字符串节点中的字符串统一存储至一个全局变量中。
本示例性实施方式中,按照抽象语法树各个节点的代码类型,上述各个节点还可以划分为循环语句节点和非循环语句节点。其中,循环语句节点可以是包括循环语句的节点,非循环语句节点也就是不包括循环语句的节点。由此,在一种可选的实施方式中,上述步骤S430还可以通过在上述各个节点中,根据循环语句节点的语句类型,将循环语句节点从第一循环语句类型转换为第二循环语句类型实现。
其中,第一循环语句类型和第二循环语句类型分别为不同的两种循环语句类型。例如,继续参考图3所示,可以按照步骤S311判断未访问节点是否为If语句节点,在确定未访问节点是If语句节点时,执行步骤S312,根据条件语句的内容将If语句节点替换成Switch语句节点;按照步骤S313判断未访问节点是否为Switch语句节点,在确定未访问节点是Switch语句节点时,执行步骤S314,根据Switch语句的内容将Switch语句节点替换为If语句节点;按照步骤S315判断未访问节点是否为while语句节点,在确定未访问节点是while语句节点时,执行步骤S316,将while语句节点替换为for语句节点;按照步骤S317判断未访问节点是否为for语句节点,在确定未访问节点是for语句节点时,执行步骤S318,将for语句节点替换为while语句节点。
进一步的,为了提高代码的复杂度,在一种可选的实施方式中,在将循环语句节点从第一循环语句类型转换为第二循环语句类型时,还可以在循环语句节点中插入非执行代码。例如,参考图3中步骤S319所示,对于上述Switch语句节点、If语句节点、while语句节点和for语句节点,可以根据各语句节点的类型,在非全部执行的Switch语句节点和If语句节点中插入永远都不会执行的非执行代码。
需要说明的是,图3所示的对抽象语法树进行处理的方法仅为示例性说明,当一个节点同时对应多种节点类型时,也可以依次判断节点的类型与每种节点类型是否匹配,从而在确定节点的类型与某个节点类型相匹配时,按照对应的匹配转换规则对节点进行处理。例如,在按照如图3中步骤S303所示的方法判断未访问的节点是否为变量声明节点后,不论判断结果如何,也可以在对未访问节点进行处理后,进一步按照步骤S307所示的方法来判断未访问节点是否为空节点,并对未访问节点进行处理。
通过生成混淆代码,可以减少待处理代码的可读性,提升代码被逆向破解的难度,因此,代码的安全性更高。
步骤S230,在上述混淆代码中插入运行检测代码,得到目标转换代码。
其中,运行检测代码是指混淆代码在客户端运行时的检测代码,可以用于在客户端运行过程中监测代码的运行情况,并根据运行情况进行相应的处理,避免因待处理代码在客户端运行而产生代码泄露等情况的发生。
具体的,可以在混淆代码的相应位置,如代码开头等位置插入运行检测代码,得到混淆代码的目标转换代码。
在一种可选的实施方式中,上述运行检测代码可以包括调试检测代码。其中,调试检测代码可以用于检测客户端是否打开调试页面,并在检测到客户端打开调试页面时定时插入阻塞代码。
本示例性实施方式中,阻塞代码是能够阻塞代码运行的控制代码,可以用于阻塞客户端打开调试页面,例如,阻塞代码可以是延时代码。参考图5所示,可以按照步骤S520在混淆代码中插入调试检测代码,由此,在客户端运行代码时,可以按照步骤S530检测客户端是否打开混淆代码的调试页面,如可以通过JavaScript中的debugger(一种JavaScript中的调试工具)关键词来判断客户端是否打开调试页面,在确定客户端打开混淆代码的调试页面的操作时,可以执行步骤S540,即通过调试检测代码以一定时间间隔自动在上述混淆代码中插入阻塞代码,如时间较长的延时代码,此时客户端运行混淆代码时,会呈现出“死等”的状态,因而可以增加混淆代码的调试难度,提高代码安全性。
在一种可选的实施方式中,运行检测代码还可以包括域名校验代码。其中,域名校验代码可以用于检测客户端运行上述混淆代码的域名是否与预置域名一致,在检测到客户端运行上述混淆代码的域名与上述预置域名不一致时,控制客户端执行死循环代码。
本示例性实施方式中,预置域名是指服务端预先配置的允许代码运行的域名地址,可以由开发人员预先根据需求设置。
参考图5所示,可以按照步骤S520在混淆代码中插入域名校验代码,当客户端未打开调试页面时,可以按照步骤S550检测客户端运行混淆代码的域名与预置域名是否一致,当两者一致时,执行步骤S560,正常执行混淆代码,当两者不一致时,可以确定混淆代码是被违规下载并运行的,此时可以执行步骤S570,即在混淆代码中插入死循环代码,使得客户端执行死循环代码,无法获取混淆代码的运行结果,因此,通过这种方式,可以防止客户端将混淆代码下载下来并转移至其他浏览器平台中运行,可以进一步提高代码的安全性。
进一步的,为了增加客户端调试混淆代码的难度等,在一种可选的实施方式中,参考图5所示,在上述混淆代码中插入运行检测代码时,还可以按照步骤S510将混淆代码中的输出函数修改为空函数,如可以通过以下代码禁止所有调试页面的输出:
console.prototype.log=function(){}
通过将混淆代码中的输出函数修改为空函数,使得混淆代码中的全部运行结果不会直接显示在客户端中,可以提高混淆代码调试的难度,保护混淆代码的安全。
通过步骤S230在混淆代码中插入运行检测代码的方法,混淆代码可以被处理为极难阅读和调试的目标转换代码。
步骤S240,将上述目标转换代码转换为字节码文件。
通过将上述目标转换代码转换为字节码文件,可以将混淆代码转换为体积较小字节码文件。并且由于字节码文件的体积较小,对客户端而言,加载和运行速度更快;同时,所生成的字节码文件可以用于客户端浏览器和一些非浏览器环境,如快游戏运行环境等的使用,代码的可适性较强。其中,快游戏是一种免下载安装的新型应用形式,相较于一般的下载游戏,具有更好的性能,所耗费的存储空间也更少。
为了进一步增强目标转换代码的无序性,在一种可选的实施方式中,在按照步骤S230得到目标转换代码后,还可以将目标转换代码转换为字符串代码。由此,步骤S240可以通过以下方式实现:
将上述字符串代码和字符串代码的编译模块封装为代码包文件;
通过编译器将上述代码包文件转换为Wasm字节码文件。
其中,代码包文件是将多个代码块整合为一个大的代码集合;Wasm字节码文件是一种包含执行程序,由一序列代码/数据对组成的二进制字节码,其依托于Webssembly技术(一种面向Web的二进制格式),该技术是一种给浏览器使用的汇编语言,是通过浏览器执行低级二进制语法的运行机制。
具体的,参考图6步骤S610所示,可以通过Base64等算法处理目标转换代码,得到一个毫无规律的字符串代码,来进一步降低代码的可读性和可调试性。其中,Base64算法是一组二进制到文本的编码方案,是通过将ASCII(American Standard Code forInformation Interchange,美国信息交换标准代码)格式的二进制数据转换为基数64表示形式来表示二进制数据的。然后,可以通过步骤S620将上述字符串代码硬编码至AssemblyScript(一种将TypeScript语法编译成Wasm格式文件的编译工具)实现的模块中,然后执行步骤S630,通过编译器将AssemblyScript代码转换成Wasm字节码文件。通过生成代码模块和将代码模块转换为Wasm字节码文件,可以降低混淆代码的可读性,同时提高代码的加载性能,使得混淆代码可以不需要调用服务端的编译模块,也可以正常运行。
综上,根据本示例性实施方式中的代码混淆方法,可以将待处理代码解析为抽象语法树,并按照预先配置的转换规则对抽象语法树的各个节点进行处理,生成混淆代码,在该混淆代码中插入运行检测代码,得到目标转换代码,将目标转换代码转换为字节码文件。一方面,通过按照预先配置的转换规则对抽象语法树的各个节点进行处理,生成混淆代码,可以极大地降低代码的可读性,增加代码调试的难度,提高代码的安全性;另一方面,通过在混淆代码中插入运行检测代码,可以加强对混淆代码运行的监测,防止客户端违规运行混淆代码,因而可以进一步提高代码的安全性;再一方面,通过将目标转换代码转换为字节码文件,可以提高代码的运行效率,也可以满足多种运行环境,如浏览器、快游戏等非浏览器环境的代码运行,提高了代码的可适性。
此外,对于开发人员而言,整个代码的混淆过程可以融入现有的代码开发过程,实现代码混淆的全自动化,也可以提高开发效率。
图7示出了本示例性实施方式中代码运行方法的一种流程,可以包括以下步骤S710~S730:
步骤S710,接收字节码文件。
其中,上述字节码文件是通过上述代码混淆方法生成的字节码文件。
在客户端需要运行混淆代码时,可以向服务端发送混淆代码的获取请求,来获取服务端响应于该获取请求发送的字节码文件。以Wasm字节码文件为例,参考图8所示,在客户端第一次运行混淆代码时,可以按照步骤S810利用Wasm接口加载和获取Wasm字节码文件。在后续运行混淆代码时,可以直接从本地获取混淆代码,而不需要再次向服务端发送获取请求。
步骤S720,对上述字节码文件进行反解析,生成混淆代码。
其中,上述混淆代码包括运行检测代码。该运行检测代码可以用于在客户端运行混淆代码的过程中,检测混淆代码的运行状态。
通过对字节码文件进行反解析,可以得到深度混淆过的混淆代码。
为了避免客户端频繁获取反解析字节码的解码工具,在一种可选的实施方式中,上述字节码文件可以包括目标转换代码和该目标转换代码的编译模块,由此,步骤S720可以通过以下方式实现:
利用上述编译模块对目标转换代码进行反解析,生成上述混淆代码。
通过在字节码文件中封装目标转换代码和目标转换代码的编译模块,使得客户端可以直接根据字节码中的编译模块对目标转换代码进行反解析,而不需要单独获取目标转换代码的编译模块。
步骤S730,运行上述混淆代码,并通过上述运行检测代码检测混淆代码的运行状态。
例如,参考图8所示,在获取字节码文件,如Wasm字节码文件后,可以按照步骤S820运行该Wasm字节码文件,然后如步骤S830所示,得到深度混淆过的混淆代码。在运行混淆代码时,可以按照步骤S840所示的方法,调用原生函数,如setTimeout函数,来执行混淆代码;同时,在运行混淆代码的过程中,运行检测代码可以用于检测混淆代码的运行状态,如运行混淆代码的域名是否与预置域名一致,或者是否打开调试页面等。
综上,根据本示例性实施方式中的代码运行方法,可以通过接收字节码文件,并对该字节码文件进行反解析,来运行反解析得到的混淆代码,并通过混淆代码中的运行检测代码检测混淆代码的运行状态。一方面,由于混淆代码是经过深度混淆的代码文件,因此,在客户端正常运行代码的基础上,可以有效保障代码的安全性;另一方面,由于字节码文件相比其他格式的代码,其体积更小,加载速度更快,因而可以提高代码的运行速率。
本公开的示例性实施方式还提供一种代码混淆装置,该代码混淆装置可以应用于服务端。如图9所示,该代码混淆装置900可以包括:解析单元910,可以用于将待处理代码解析为抽象语法树;处理单元920,可以用于按照预先配置的转换规则对抽象语法树的各个节点进行处理,生成混淆代码;插入单元930,可以用于在混淆代码中插入运行检测代码,得到目标转换代码;转换单元940,可以用于将目标转换代码转换为字节码文件。
在本公开的一种示例性实施方式中,处理单元920可以用于确定抽象语法树中各个节点的类型,在转换规则中,确定节点类型与各个节点的类型相匹配的匹配转换规则,利用匹配转换规则对各个节点进行处理,生成混淆代码。
在本公开的一种示例性实施方式中,处理单元920还可以用于在各个节点中,将变量声明节点中的变量名转换为十六进制码。
在本公开的一种示例性实施方式中,在将变量声明节点中的变量名转换为十六进制码时,处理单元920还可以用于在确定变量声明节点中的变量名与历史变量名相同时,将历史变量名对应的十六进制码确定为变量声明节点中的变量名所对应的十六进制码;其中,历史变量名为历史时间内各变量声明节点中的变量名,且历史变量名具有对应的十六进制码。
在本公开的一种示例性实施方式中,处理单元920还可以用于删除各个节点中的空节点。
在本公开的一种示例性实施方式中,处理单元920还可以用于提取各个节点中的字符串,并将字符串存储至全局变量。
在本公开的一种示例性实施方式中,处理单元920还可以用于在各个节点中,根据循环语句节点的语句类型,将循环语句节点从第一循环语句类型转换为第二循环语句类型。
在本公开的一种示例性实施方式中,在将循环语句节点从第一循环语句类型转换为第二循环语句类型时,处理单元920还可以用于包括在循环语句节点中插入非执行代码。
在本公开的一种示例性实施方式中,运行检测代码可以包括调试检测代码,该调试检测代码可以用于检测客户端是否打开调试页面,并在检测到客户端打开调试页面时定时插入阻塞代码。
在本公开的一种示例性实施方式中,运行检测代码还可以包括域名校验代码,该域名校验代码可以用于检测客户端运行混淆代码的域名是否与预置域名一致,并在检测到客户端运行混淆代码的域名与预置域名不一致时,控制客户端执行死循环代码。
在本公开的一种示例性实施方式中,在混淆代码中插入运行检测代码时,插入单元930还可以用于将混淆代码中的输出函数修改为空函数。
在本公开的一种示例性实施方式中,在得到目标转换代码后,插入单元930还可以用于将目标转换代码转换为字符串代码;转换单元940可以用于将目标转换代码和目标转换代码的编译模块封装为代码包文件,通过编译器将上述代码包文件转换为Wasm字节码文件。
本公开的示例性实施方式中还提供了一种代码运行装置,参考图10所示,代码运行装置1000可以包括:接收单元1010,可以用于接收字节码文件,其中,字节码文件为通过上述任一项的代码混淆方法生成的字节码文件;反解析单元1020,可以用于对字节码文件进行反解析,生成混淆代码;运行单元1030,可以用于运行混淆代码,并通过运行检测代码检测混淆代码的运行状态。
在本公开的一种示例性实施方式中,字节码文件可以包括目标转换代码和目标转换代码的编译模块,反解析单元1020可以用于利用编译模块对目标转换代码进行反解析,生成混淆代码。
上述装置中各单元的具体细节在方法部分实施方式中已经详细说明,未披露的细节内容可以参见方法部分的实施方式内容,因而不再赘述。
本公开的示例性实施方式还提供了一种计算机可读存储介质,其上存储有能够实现本说明书上述方法的程序产品。在一些可能的实施方式中,本公开的各个方面还可以实现为一种程序产品的形式,其包括程序代码,当程序产品在终端设备上运行时,程序代码用于使终端设备执行本说明书上述“示例性方法”部分中描述的根据本公开各种示例性实施方式的步骤。
参考图11所示,描述了根据本公开的示例性实施方式的用于实现上述方法的程序产品1100,其可以采用便携式紧凑盘只读存储器(CD-ROM)并包括程序代码,并可以在终端设备,例如个人电脑上运行。然而,本公开的程序产品不限于此,在本文件中,可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
程序产品500可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以为但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。可读信号介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于无线、有线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言的任意组合来编写用于执行本公开操作的程序代码,程序设计语言包括面向对象的程序设计语言—诸如Java、C++等,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络,包括局域网(LAN)或广域网(WAN),连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。
本公开的示例性实施方式还提供了一种能够实现上述方法的电子设备。下面参照图12来描述根据本公开的这种示例性实施方式的电子设备1200。图12显示的电子设备1200仅仅是一个示例,不应对本公开实施方式的功能和使用范围带来任何限制。
如图12所示,电子设备1200可以以通用计算设备的形式表现。电子设备1200的组件可以包括但不限于:上述至少一个处理单元1210、上述至少一个存储单元1220、连接不同系统组件(包括存储单元1220和处理单元1210)的总线1230和显示单元1240。
其中,存储单元1220存储有程序代码,程序代码可以被处理单元1210执行,使得处理单元1210执行本说明书上述“示例性方法”部分中描述的根据本公开各种示例性实施方式的步骤。例如,处理单元1210可以执行图2至图8所示的方法步骤等。
存储单元1220可以包括易失性存储单元形式的可读介质,例如随机存取存储单元(RAM)1221和/或高速缓存存储单元1222,还可以进一步包括只读存储单元(ROM)1223。
存储单元1220还可以包括具有一组(至少一个)程序模块1225的程序/实用工具1224,这样的程序模块1225包括但不限于:操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。
总线1230可以为表示几类总线结构中的一种或多种,包括存储单元总线或者存储单元控制器、外围总线、图形加速端口、处理单元或者使用多种总线结构中的任意总线结构的局域总线。
电子设备1200也可以与一个或多个外部设备1300(例如键盘、指向设备、蓝牙设备等)通信,还可与一个或者多个使得用户能与该电子设备1200交互的设备通信,和/或与使得该电子设备1200能与一个或多个其它计算设备进行通信的任何设备(例如路由器、调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口1250进行。并且,电子设备1200还可以通过网络适配器1260与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器1260通过总线1230与电子设备1200的其它模块通信。应当明白,尽管图中未示出,可以结合电子设备1200使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
应当注意,尽管在上文详细描述中提及了用于动作执行的设备的若干模块或者单元,但是这种划分并非强制性的。实际上,根据本公开的示例性实施方式,上文描述的两个或更多模块或者单元的特征和功能可以在一个模块或者单元中具体化。反之,上文描述的一个模块或者单元的特征和功能可以进一步划分为由多个模块或者单元来具体化。
此外,上述附图仅是根据本公开示例性实施方式的方法所包括的处理的示意性说明,而不是限制目的。易于理解,上述附图所示的处理并不表明或限制这些处理的时间顺序。另外,也易于理解,这些处理可以是例如在多个模块中同步或异步执行的。
通过以上的实施方式的描述,本领域的技术人员易于理解,这里描述的示例性实施方式可以通过软件实现,也可以通过软件结合必要的硬件的方式来实现。因此,根据本公开示例性实施方式的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中或网络上,包括若干指令以使得一台计算设备(可以是个人计算机、服务器、终端装置、或者网络设备等)执行根据本公开示例性实施方式的方法。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其他实施方式。本申请旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施方式仅被视为示例性的,本公开的真正范围和精神由权利要求指出。
应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限。

Claims (18)

1.一种代码混淆方法,其特征在于,所述方法包括:
将待处理代码解析为抽象语法树;
按照预先配置的转换规则对所述抽象语法树的各个节点进行处理,生成混淆代码;
在所述混淆代码中插入运行检测代码,得到目标转换代码;
将所述目标转换代码转换为字节码文件。
2.根据权利要求1所述的方法,其特征在于,所述按照预先配置的转换规则对所述各个节点进行处理,生成混淆代码,包括:
确定所述抽象语法树中各个节点的类型;
在所述转换规则中,确定节点类型与所述各个节点的类型相匹配的匹配转换规则;
利用所述匹配转换规则对所述各个节点进行处理,生成所述混淆代码。
3.根据权利要求2所述的方法,其特征在于,所述利用所述匹配转换规则对所述各个节点进行处理,生成所述混淆代码,包括:
在所述各个节点中,将变量声明节点中的变量名转换为十六进制码。
4.根据权利要求3所述的方法,其特征在于,在将变量声明节点中的变量名转换为十六进制码时,所述方法还包括:
在确定所述变量声明节点中的变量名与历史变量名相同时,将所述历史变量名对应的十六进制码确定为所述变量声明节点中的变量名所对应的十六进制码;
其中,所述历史变量名为历史时间内各所述变量声明节点中的变量名,且所述历史变量名具有对应的十六进制码。
5.根据权利要求2所述的方法,其特征在于,所述利用所述匹配转换规则对所述各个节点进行处理,生成所述混淆代码,还包括:
删除所述各个节点中的空节点。
6.根据权利要求2所述的方法,其特征在于,所述利用所述匹配转换规则对所述各个节点进行处理,生成所述混淆代码,还包括:
提取所述各个节点中的字符串,并将所述字符串存储至全局变量。
7.根据权利要求2所述的方法,其特征在于,所述利用所述匹配转换规则对所述各个节点进行处理,生成所述混淆代码,还包括:
在所述各个节点中,根据循环语句节点的语句类型,将所述循环语句节点从第一循环语句类型转换为第二循环语句类型。
8.根据权利要求7所述的方法,其特征在于,在将所述循环语句节点从第一循环语句类型转换为第二循环语句类型时,所述方法还包括:
在所述循环语句节点中插入非执行代码。
9.根据权利要求1所述的方法,其特征在于,所述运行检测代码包括调试检测代码,所述调试检测代码用于检测客户端是否打开调试页面,并在检测到所述客户端打开调试页面时定时插入阻塞代码。
10.根据权利要求1所述的方法,其特征在于,所述运行检测代码还包括域名校验代码,所述域名校验代码用于检测客户端运行所述混淆代码的域名是否与预置域名一致,并在检测到所述客户端运行所述混淆代码的域名与所述预置域名不一致时,控制所述客户端执行死循环代码。
11.根据权利要求1所述的方法,其特征在于,在所述混淆代码中插入运行检测代码时,所述方法还包括:
将所述混淆代码中的输出函数修改为空函数。
12.根据权利要求1所述的方法,其特征在于,在得到目标转换代码后,所述方法还包括:
将所述目标转换代码转换为字符串代码;
所述将所述目标转换代码转换为字节码文件,包括:
将所述字符串代码和所述字符串代码的编译模块封装为代码包文件;
通过编译器将所述代码包文件转换为Wasm字节码文件。
13.一种代码运行方法,其特征在于,所述方法包括:
接收字节码文件,其中,所述字节码文件为通过权利要求1至12任一项所述的代码混淆方法生成的字节码文件;
对所述字节码文件进行反解析,生成混淆代码,所述混淆代码包括运行检测代码;
运行所述混淆代码,并通过所述运行检测代码检测所述混淆代码的运行状态。
14.根据权利要求13所述的方法,其特征在于,所述字节码文件包括目标转换代码和所述目标转换代码的编译模块,所述对所述字节码文件进行解码,生成混淆代码,包括:
利用所述编译模块对所述目标转换代码进行反解析,生成所述混淆代码。
15.一种代码混淆装置,其特征在于,所述装置包括:
解析单元,用于将待处理代码解析为抽象语法树;
处理单元,用于按照预先配置的转换规则对所述抽象语法树的各个节点进行处理,生成混淆代码;
插入单元,用于在所述混淆代码中插入运行检测代码,得到目标转换代码;
转换单元,用于将所述目标转换代码转换为字节码文件。
16.一种代码运行装置,其特征在于,所述装置包括:
接收单元,用于接收字节码文件,其中,所述字节码文件为通过权利要求1至12任一项所述的代码混淆方法生成的字节码文件;
反解析单元,用于对所述字节码文件进行反解析,生成混淆代码,所述混淆代码包括运行检测代码;
运行单元,用于运行所述混淆代码,并通过所述运行检测代码检测所述混淆代码的运行状态。
17.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1-14任一项所述的方法。
18.一种电子设备,其特征在于,包括:
处理器;以及
存储器,用于存储所述处理器的可执行指令;
其中,所述处理器配置为经由执行所述可执行指令来执行权利要求1-14任一项所述的方法。
CN202011583592.6A 2020-12-28 2020-12-28 代码混淆方法、代码运行方法、装置、介质与设备 Pending CN112597454A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202011583592.6A CN112597454A (zh) 2020-12-28 2020-12-28 代码混淆方法、代码运行方法、装置、介质与设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011583592.6A CN112597454A (zh) 2020-12-28 2020-12-28 代码混淆方法、代码运行方法、装置、介质与设备

Publications (1)

Publication Number Publication Date
CN112597454A true CN112597454A (zh) 2021-04-02

Family

ID=75202880

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011583592.6A Pending CN112597454A (zh) 2020-12-28 2020-12-28 代码混淆方法、代码运行方法、装置、介质与设备

Country Status (1)

Country Link
CN (1) CN112597454A (zh)

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113220306A (zh) * 2021-05-31 2021-08-06 支付宝(杭州)信息技术有限公司 操作执行方法、装置和电子设备
CN113449330A (zh) * 2021-08-31 2021-09-28 北京华云安信息技术有限公司 对Javascript加密文件进行传输的方法
CN113849781A (zh) * 2021-08-20 2021-12-28 苏州浪潮智能科技有限公司 Go语言源代码混淆方法、系统、终端及存储介质
CN113946804A (zh) * 2021-12-21 2022-01-18 深圳市活力天汇科技股份有限公司 一种源代码的混淆方法和装置
CN114036056A (zh) * 2021-11-16 2022-02-11 企查查科技有限公司 防调试方法、装置、设备、存储介质和程序产品
CN114039743A (zh) * 2021-09-27 2022-02-11 成都鲁易科技有限公司 数据的加密方法、装置、存储介质以及终端
CN114090964A (zh) * 2021-11-18 2022-02-25 北京五八信息技术有限公司 代码处理方法、装置、电子设备及可读介质
CN114417267A (zh) * 2022-01-24 2022-04-29 中国电信股份有限公司 代码混淆方法、装置、电子设备及存储介质
WO2023245365A1 (zh) * 2022-06-20 2023-12-28 北京小米移动软件有限公司 快应用安装包获取方法和装置、电子设备、存储介质

Cited By (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113220306A (zh) * 2021-05-31 2021-08-06 支付宝(杭州)信息技术有限公司 操作执行方法、装置和电子设备
CN113849781A (zh) * 2021-08-20 2021-12-28 苏州浪潮智能科技有限公司 Go语言源代码混淆方法、系统、终端及存储介质
CN113849781B (zh) * 2021-08-20 2024-01-12 苏州浪潮智能科技有限公司 Go语言源代码混淆方法、系统、终端及存储介质
CN113449330A (zh) * 2021-08-31 2021-09-28 北京华云安信息技术有限公司 对Javascript加密文件进行传输的方法
CN114039743A (zh) * 2021-09-27 2022-02-11 成都鲁易科技有限公司 数据的加密方法、装置、存储介质以及终端
CN114036056A (zh) * 2021-11-16 2022-02-11 企查查科技有限公司 防调试方法、装置、设备、存储介质和程序产品
CN114036056B (zh) * 2021-11-16 2024-03-26 企查查科技股份有限公司 防调试方法、装置、设备、存储介质和程序产品
CN114090964A (zh) * 2021-11-18 2022-02-25 北京五八信息技术有限公司 代码处理方法、装置、电子设备及可读介质
CN113946804A (zh) * 2021-12-21 2022-01-18 深圳市活力天汇科技股份有限公司 一种源代码的混淆方法和装置
CN113946804B (zh) * 2021-12-21 2022-05-20 深圳市活力天汇科技股份有限公司 一种源代码的混淆方法和装置
CN114417267A (zh) * 2022-01-24 2022-04-29 中国电信股份有限公司 代码混淆方法、装置、电子设备及存储介质
WO2023245365A1 (zh) * 2022-06-20 2023-12-28 北京小米移动软件有限公司 快应用安装包获取方法和装置、电子设备、存储介质

Similar Documents

Publication Publication Date Title
CN112597454A (zh) 代码混淆方法、代码运行方法、装置、介质与设备
CN110096338B (zh) 智能合约执行方法、装置、设备及介质
US11120018B2 (en) Spark query method and system supporting trusted computing
US10216488B1 (en) Intercepting and injecting calls into operations and objects
EP3038004A1 (en) Method for providing security for common intermediate language-based program
CN110414261B (zh) 一种数据脱敏方法、装置、设备及可读存储介质
CN109255209B (zh) 一种数据处理方法、装置、设备和存储介质
US20090138863A1 (en) Method And Apparatus For Protecting .NET Programs
US10380329B2 (en) Method and apparatus for preventing application from being deciphered
CN109948308A (zh) 代码安全保护方法、装置、电子设备和计算机可读存储介质
CN110309631B (zh) 一种编程语言结构混淆处理方法、智能终端及存储介质
CN111736840A (zh) 小程序应用的编译方法、运行方法、存储介质及电子设备
CN103177199A (zh) 网页应用代码保护方法及系统和执行的提速方法及系统
CN110333868A (zh) 用于生成子应用的安装包的方法和系统
WO2021175053A1 (zh) 一种在虚拟机中执行功能模块的方法和装置
CN112214736A (zh) 一种代码加密方法及相关组件
GB2563381A (en) Method and apparatus for executing a scripting language
CN111913741B (zh) 对象拦截方法、装置、介质及电子设备
CN110597496B (zh) 应用程序的字节码文件获取方法及装置
CN114154123B (zh) 应用于Python项目的加密保护方法
CN113849781B (zh) Go语言源代码混淆方法、系统、终端及存储介质
CN113449330B (zh) 对Javascript加密文件进行传输的方法
CN113836582A (zh) 软件加密及解密方法、装置、电子设备和存储介质
CN109218284B (zh) Xss漏洞检测方法及装置、计算机设备及可读介质
CN114527984A (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