CN110457869B - 程序编译加密方法、装置、存储介质及电子设备 - Google Patents
程序编译加密方法、装置、存储介质及电子设备 Download PDFInfo
- Publication number
- CN110457869B CN110457869B CN201910668650.6A CN201910668650A CN110457869B CN 110457869 B CN110457869 B CN 110457869B CN 201910668650 A CN201910668650 A CN 201910668650A CN 110457869 B CN110457869 B CN 110457869B
- Authority
- CN
- China
- Prior art keywords
- code
- syntax tree
- encrypted
- program
- tree
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 56
- 238000004458 analytical method Methods 0.000 claims abstract description 48
- 238000006243 chemical reaction Methods 0.000 claims abstract description 23
- 238000004590 computer program Methods 0.000 claims description 17
- 239000000203 mixture Substances 0.000 claims description 4
- 238000003491 array Methods 0.000 claims 5
- 238000005336 cracking Methods 0.000 abstract description 25
- 230000006870 function Effects 0.000 description 17
- 238000010586 diagram Methods 0.000 description 5
- 230000003190 augmentative effect Effects 0.000 description 3
- 238000013500 data storage Methods 0.000 description 3
- 239000011521 glass Substances 0.000 description 3
- 238000007726 management method Methods 0.000 description 3
- 230000004888 barrier function Effects 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000007599 discharging Methods 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/10—Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
- G06F21/12—Protecting executable software
- G06F21/121—Restricting unauthorised execution of programs
- G06F21/125—Restricting unauthorised execution of programs by manipulating the program code, e.g. source code, compiled code, interpreted code, machine code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
- G06F8/425—Lexical analysis
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 Security & Cryptography (AREA)
- Multimedia (AREA)
- Technology Law (AREA)
- Computer Hardware Design (AREA)
- Storage Device Security (AREA)
- Stored Programmes (AREA)
Abstract
本申请实施例提供一种程序编译加密方法、装置、存储介质及电子设备,所述程序编译加密方法包括:对程序源代码进行词法分析,以将所述程序源代码拆分为多个词法单元;对所述多个词法单元进行语法分析,以根据所述多个词法单元生成语法树;根据预设加密算法对所述语法树进行加密,以生成加密后的语法树;根据所述加密后的语法树生成机器代码,并输出所述机器代码。所述程序编译加密方法中,由于在程序编译过程中,对语法树进行了加密,并将加密后的语法树进行代码转换从而得到最终的机器代码,因此当用户试图对机器代码进行恶意破解时,所述机器代码中的加密信息便可极大地增加破解的难度,从而提高程序面对恶意破解时的安全性。
Description
技术领域
本申请涉及电子技术领域,特别涉及一种程序编译加密方法、装置、存储介质及电子设备。
背景技术
随着电子技术的发展,诸如智能手机等电子设备的功能越来越丰富。例如,用户可以通过电子设备实现社交功能、购物功能、游戏功能等。
电子设备上所实现的每一项功能,除了需要电子设备的硬件支撑外,程序的实现更为重要。而程序是由代码组成的。例如,社交应用、购物应用、游戏应用都是由大量的代码来实现的。在程序的开发过程中,通常需要将源代码编译为机器代码,最终发布程序时,发布的程序中包括的即为机器代码。程序发布后,用户即可使用程序来实现对应的功能。
然而,有些用户在使用程序的过程中,会对程序进行恶意破解,尝试通过程序中的机器代码来获取程序的源代码,从而导致程序面临安全性威胁。
发明内容
本申请实施例提供一种程序编译加密方法、装置、存储介质及电子设备,可以提高程序面对恶意破解时的安全性。
本申请实施例提供一种程序编译加密方法,包括:
对程序源代码进行词法分析,以将所述程序源代码拆分为多个词法单元;
对所述多个词法单元进行语法分析,以根据所述多个词法单元生成语法树;
根据预设加密算法对所述语法树进行加密,以生成加密后的语法树;
根据所述加密后的语法树生成机器代码,并输出所述机器代码。
本申请实施例还提供一种程序编译加密装置,包括:
词法分析模块,用于对程序源代码进行词法分析,以将所述程序源代码拆分为多个词法单元;
语法分析模块,用于对所述多个词法单元进行语法分析,以根据所述多个词法单元生成语法树;
加密模块,用于根据预设加密算法对所述语法树进行加密,以生成加密后的语法树;
代码输出模块,用于根据所述加密后的语法树生成机器代码,并输出所述机器代码。
本申请实施例还提供一种存储介质,所述存储介质中存储有计算机程序,当所述计算机程序在计算机上运行时,使得所述计算机执行上述程序编译加密方法。
本申请实施例还提供一种电子设备,包括处理器和存储器,所述存储器中存储有计算机程序,所述处理器通过调用所述存储器中存储的所述计算机程序,用于执行上述程序编译加密方法。
本申请实施例提供的程序编译加密方法包括:对程序源代码进行词法分析,以将所述程序源代码拆分为多个词法单元;对所述多个词法单元进行语法分析,以根据所述多个词法单元生成语法树;根据预设加密算法对所述语法树进行加密,以生成加密后的语法树;根据所述加密后的语法树生成机器代码,并输出所述机器代码。所述程序编译加密方法中,由于在程序编译过程中,对语法树进行了加密,并将加密后的语法树进行代码转换从而得到最终的机器代码,因此当用户试图对机器代码进行恶意破解时,所述机器代码中的加密信息便可极大地增加破解的难度,从而提高程序面对恶意破解时的安全性。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍。显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例提供的程序编译加密方法的应用场景示意图。
图2为本申请实施例提供的程序编译加密方法的第一种流程示意图。
图3为本申请实施例提供的程序编译加密方法的第二种流程示意图。
图4为本申请实施例提供的程序编译加密方法的第三种流程示意图。
图5为本申请实施例提供的程序编译加密装置的结构示意图。
图6为本申请实施例提供的电子设备的第一种结构示意图。
图7为本申请实施例提供的电子设备的第二种结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述。显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域技术人员在没有付出创造性劳动前提下所获得的所有其他实施例,都属于本申请的保护范围。
本申请实施例提供一种程序编译加密方法,所述程序编译加密方法可以应用于电子设备中。所述电子设备可以为智能手机、平板电脑、游戏设备、AR(Augmented Reality,增强现实)设备、汽车、数据存储装置、音频播放装置、视频播放装置、笔记本电脑、桌面计算设备、可穿戴设备诸如电子手表、电子眼镜、电子头盔、电子手链、电子项链、电子衣物等设备。
参考图1,图1为本申请实施例提供的程序编译加密方法的应用场景示意图。
在程序开发的过程中,程序开发人员编写的是源代码。源代码是由自然语言组成的代码。电子设备无法执行源代码,只能将源代码编译为机器代码后,电子设备才能执行机器代码,以实现相应的功能。
其中,在将源代码编译为机器代码时,电子设备可以首先对程序源代码进行词法分析,得到词法单元;再对词法单元进行语法分析,以得到语法树;随后对语法树进行加密,得到加密后的语法树;最后对加密后的语法树进行代码转换,以生成机器代码,所述机器代码可以被电子设备执行,以实现相应的功能。可以理解的,电子设备对加密后的语法树进行代码转换,生成机器代码后,还可以输出所述机器代码,以供程序开发人员查看或者对机器代码再次进行处理。以下对本申请提供的程序编译加密方法进行详细描述。
参考图2,图2为本申请实施例提供的程序编译加密方法的第一种流程示意图。其中,所述程序编译加密方法包括以下步骤:
110,对程序源代码进行词法分析,以将所述程序源代码拆分为多个词法单元。
电子设备对程序进行编译时,首先可以对程序源代码进行词法分析,以将所述程序源代码拆分为多个词法单元。其中,词法分析可以通过词法分析器来完成。词法分析器可以将程序源代码作为字符串文本,按照设定的词法分析规则将字符串文本拆分成多个词法单元。词法单元为所述程序源代码所能够拆分成的最小单位,可以称为token。例如,一个数字“1”可以作为一个token,一个字符串“ab”也可以作为一个token。
120,对所述多个词法单元进行语法分析,以根据所述多个词法单元生成语法树。
电子设备得到多个词法单元后,可以对所述多个词法单元进行语法分析,以根据所述多个词法单元生成语法树。其中,语法分析可以通过语法分析器来完成。语法分析器可以根据所述多个词法单元之间的关系将所述多个词法单元组成一棵抽象的语法树,所述语法树可以称为AST。语法树AST包括了拆分得到的每一个token,以及每一个token与其它token之间的关系。
130,根据预设加密算法对所述语法树进行加密,以生成加密后的语法树。
电子设备得到语法树后,可以根据预设加密算法对所述语法树进行加密,以生成加密后的语法树。其中,所述预设加密算法可以是预先设置的加密算法,例如MD5(Message-Digest Algorithm 5,信息-摘要算法)加密算法、base64加密算法等。
例如,电子设备可以对所述语法树AST中的每一个token分别进行加密,以生成加密后的语法树。或者,电子设备也可以对所述语法树AST中的一部分token进行加密,并根据加密后的部分token与未加密的token共同组成加密后的语法树。
140,根据所述加密后的语法树生成机器代码,并输出所述机器代码。
电子设备得到加密后的语法树之后,即可根据所述加密后的语法树生成机器代码,并输出所述机器代码。其中,电子设备可以根据预先设定的自然语言代码与机器语言代码之间的转换规则,对所述加密后的语法树进行代码转换,以得到最终的机器代码。所述机器代码即为可以被电子设备执行并实现对应功能的代码。
最终得到机器代码时,由于对代码转换之前的语法树进行过加密,因此转换得到的机器代码中也具有加密信息。可以理解的,由于本申请实施例是对语法树进行加密,将加密后的语法树进行代码转换从而得到最终的机器代码,而不是简单地对语法树转换后得到的机器代码进行加密,因此最终得到的机器代码中的加密信息并不是加密算法本身,而是包括了加密算法和代码转换规则的多重加密信息。从而,当用户试图对机器代码进行恶意破解时,所述机器代码中的加密信息便可极大地增加破解的难度,从而提高程序面对恶意破解时的安全性。
在一些实施例中,参考图3,图3为本申请实施例提供的程序编译加密方法的第二种流程示意图。
其中,步骤130、根据预设加密算法对所述语法树进行加密,以生成加密后的语法树,包括以下步骤:
131,获取所述语法树中的字符串;
132,将所述字符串转换为字符串数组;
133,根据所述预设加密算法对所述字符串数组进行加密,以得到加密后的字符串数组;
134,根据所述加密后的字符串数组生成加密后的语法树。
本申请实施例中,电子设备对语法树进行加密时,可以只对所述语法树中的部分词法单元进行加密。
其中,电子设备首先获取所述语法树中的字符串。可以理解的,所述字符串即为由多个字符组成的一串字符,例如字符串“1,2,3,4,5,6,abc”。随后,将所述字符串转换为字符串数组,或者也可以理解为将所述字符串进行阵列化。例如,可以将字符串“1,2,3,4,5,6,abc”转换为字符串数组[“1”,“2”,“3”,“4”,“5”,“6”,“abc”]。
随后,电子设备根据预设加密算法对所述字符串数组进行加密,以得到加密后的字符串数组。其中,所述预设加密算法例如可以为MD5加密算法、base64加密算法等。对字符串数组加密后,即可使加密后的字符串数组中不出现原来的字符串,也即可以实现对原来的字符串的隐藏。
电子设备对字符串数组进行加密得到加密后的字符串数组后,即可根据所述加密后的字符串数组生成加密后的语法树。例如,可以根据所述加密后的字符串数组、未加密的其它词法单元、以及加密后的字符串数组与其它词法单元之间的组成关系,来生成加密后的语法树。
可以理解的,加密就必然存在着解密。为了使最终转换得到的机器代码能够被顺利执行,还可以在加密后的语法树中的随机位置插入解密算法,负责在程序的执行过程中对加密后的语法树进行解密。
需要说明的是,由于所述解密算法在语法树中的位置是随机的,与所述预设加密算法处于语法树中的不同位置,因此即使程序遭遇恶意破解,进行破解的用户也难以发现预设加密算法和解密算法之间的逻辑关系,甚至无法发现语法树中隐藏的解密算法。从而,可以进一步增加破解的难度,提高程序面临破解时的安全性。
在一些实施例中,参考图4,图4为本申请实施例提供的程序编译加密方法的第三种流程示意图。
其中,步骤130、根据预设加密算法对所述语法树进行加密,以生成加密后的语法树,还包括以下步骤:
135,获取所述语法树中的打印语句代码;
136,删除所述打印语句代码。
可以理解的,在程序开发的过程中,为了方便程序的调试,程序开发人员通常会在编写代码时加入一些打印语句代码。这些打印语句代码可以用于输出日志、代码运行结果等信息。
在打印语句代码为程序开发人员带来调试便利的同时,也会在程序发布后为破解者提供便利,为破解者提供程序运行结果、运行节点等重要信息。因此,为了提高程序的安全性,增加破解的难度,可以将程序中的打印语句代码删除。
其中,电子设备在对程序进行编译的过程中,对语法树进行加密时,可以获取所述语法树中的打印语句代码,并删除所述打印语句代码。其中,电子设备可以获取所述语法树中的所有打印语句代码,并进行删除。从而,可以在程序的编译过程中,删除掉有利于对程序进行破解的代码。并且,由于这些打印语句代码是供开发人员调试程序时查看日志、代码运行结果等信息时使用的,因此删除这些打印语句代码不会对程序的功能造成影响。
可以理解的,电子设备在获取语法树中的打印语句代码时,可以通过正则表达式对语法树进行匹配,以查询所述语法树中的打印语句代码。
也即,步骤135、获取所述语法树中的打印语句代码,可以包括:将预设正则表达式与所述语法树进行匹配,所述预设正则表达式用于查询控制台语句代码,将匹配到的控制台语句代码确定为所述打印语句代码。
其中,电子设备中可以预先设置预设正则表达式。所述预设正则表达式用于查询控制台语句代码。从而,电子设备可以将所述预设正则表达式与所述语法树进行匹配,以匹配出所述语法树中的控制台语句代码。例如,匹配到的语句代码中可以包括console语句。随后,电子设备可以将将匹配到的控制台语句代码确定为所述打印语句代码。
可以理解的,电子设备在获取语法树中的打印语句代码时,还可以通过遍历的方式从所述语法树中查询打印语句代码。
也即,步骤135、获取所述语法树中的打印语句代码,可以包括:遍历所述语法树的所有节点,以查询所述语法树中名称包括控制台的节点,将查询到的节点的代码确定为所述打印语句代码。
其中,所述语法树中可以包括多个节点。每个节点可以包括执行某个功能的语句代码。例如,所述语法树中可以包括控制台节点。控制台节点即包括了控制台语句代码,用于在运行时输出打印语句。从而,电子设备可以遍历所述语法树的所有节点,以查询所述语法树中名称包括控制台的节点,并将查询到的节点的代码确定为所述打印语句代码。
可以理解的,删除打印语句代码的步骤可以在对语法树进行加密之前进行,也可以在对语法树进行加密之后进行。也即,上述步骤135、136可以在步骤131之前执行,也可以在步骤134之后执行,或者也可以在步骤131至步骤134之间执行,本申请对此不进行限定。
在一些实施例中,继续参考图4,步骤130、根据预设加密算法对所述语法树进行加密,以生成加密后的语法树,还包括以下步骤:
137,在所述语法树中插入随机代码段,所述随机代码段为不被执行的代码。
其中,电子设备在对程序进行编译的过程中,在对语法树进行加密时,可以在所述语法树中插入随机代码段。其中,所述随机代码段为不被执行的代码。例如,所述随机代码段可以是在程序开发过程中被注释掉的代码。所述随机代码段在程序的运行过程中不起任何作用,只是用于在程序遭遇恶意破解时,给破解者设置障碍,增加破解的难度。其中,所述随机代码段也可以称为僵尸代码。
可以理解的,插入随机代码段的步骤可以在对语法树进行加密之前进行,也可以在对语法树进行加密之后进行。也即,上述步骤137可以在步骤131之前执行,也可以在步骤134之后执行,或者也可以在步骤131至步骤134之间执行,本申请对此不进行限定。
具体实施时,本申请不受所描述的各个步骤的执行顺序的限制,在不产生冲突的情况下,某些步骤还可以采用其它顺序进行或者同时进行。
由上可知,本申请实施例提供的程序编译加密方法,包括:对程序源代码进行词法分析,以将所述程序源代码拆分为多个词法单元;对所述多个词法单元进行语法分析,以根据所述多个词法单元生成语法树;根据预设加密算法对所述语法树进行加密,以生成加密后的语法树;根据所述加密后的语法树生成机器代码,并输出所述机器代码。所述程序编译加密方法中,由于在程序编译过程中,对语法树进行了加密,并将加密后的语法树进行代码转换从而得到最终的机器代码,因此当用户试图对机器代码进行恶意破解时,所述机器代码中的加密信息便可极大地增加破解的难度,从而提高程序面对恶意破解时的安全性。
本申请实施例还提供一种程序编译加密装置,所述程序编译加密装置可以集成在电子设备中。所述电子设备可以为智能手机、平板电脑、游戏设备、AR(Augmented Reality,增强现实)设备、汽车、数据存储装置、音频播放装置、视频播放装置、笔记本电脑、桌面计算设备、可穿戴设备诸如电子手表、电子眼镜、电子头盔、电子手链、电子项链、电子衣物等设备。
参考图5,图5为本申请实施例提供的程序编译加密装置的结构示意图。其中,所述程序编译加密装置200包括:词法分析模块201、语法分析模块202、加密模块203、代码输出模块204。
词法分析模块201,用于对程序源代码进行词法分析,以将所述程序源代码拆分为多个词法单元。
在对程序进行编译时,词法分析模块201可以首先对程序源代码进行词法分析,以将所述程序源代码拆分为多个词法单元。其中,词法分析可以通过词法分析器来完成。词法分析器可以将程序源代码作为字符串文本,按照设定的词法分析规则将字符串文本拆分成多个词法单元。词法单元为所述程序源代码所能够拆分成的最小单位,可以称为token。例如,一个数字“1”可以作为一个token,一个字符串“ab”也可以作为一个token。
语法分析模块202,用于对所述多个词法单元进行语法分析,以根据所述多个词法单元生成语法树。
词法分析模块201得到多个词法单元后,语法分析模块202可以对所述多个词法单元进行语法分析,以根据所述多个词法单元生成语法树。其中,语法分析可以通过语法分析器来完成。语法分析器可以根据所述多个词法单元之间的关系将所述多个词法单元组成一棵抽象的语法树,所述语法树可以称为AST。语法树AST包括了拆分得到的每一个token,以及每一个token与其它token之间的关系。
加密模块203,用于根据预设加密算法对所述语法树进行加密,以生成加密后的语法树。
语法分析模块202得到语法树后,加密模块203可以根据预设加密算法对所述语法树进行加密,以生成加密后的语法树。其中,所述预设加密算法可以是预先设置的加密算法,例如MD5(Message-Digest Algorithm 5,信息-摘要算法)加密算法、base64加密算法等。
例如,加密模块203可以对所述语法树AST中的每一个token分别进行加密,以生成加密后的语法树。或者,加密模块203也可以对所述语法树AST中的一部分token进行加密,并根据加密后的部分token与未加密的token共同组成加密后的语法树。
代码输出模块204,用于根据所述加密后的语法树生成机器代码,并输出所述机器代码。
加密模块203得到加密后的语法树之后,代码输出模块204即可根据所述加密后的语法树生成机器代码,并输出所述机器代码。其中,代码输出模块204可以根据预先设定的自然语言代码与机器语言代码之间的转换规则,对所述加密后的语法树进行代码转换,以得到最终的机器代码。所述机器代码即为可以被电子设备执行并实现对应功能的代码。
最终得到机器代码时,由于对代码转换之前的语法树进行过加密,因此转换得到的机器代码中也具有加密信息。可以理解的,由于本申请实施例是对语法树进行加密,将加密后的语法树进行代码转换从而得到最终的机器代码,而不是简单地对语法树转换后得到的机器代码进行加密,因此最终得到的机器代码中的加密信息并不是加密算法本身,而是包括了加密算法和代码转换规则的多重加密信息。从而,当用户试图对机器代码进行恶意破解时,所述机器代码中的加密信息便可极大地增加破解的难度,从而提高程序面对恶意破解时的安全性。
在一些实施例中,所述加密模块203用于执行以下步骤:
获取所述语法树中的字符串;
将所述字符串转换为字符串数组;
根据所述预设加密算法对所述字符串数组进行加密,以得到加密后的字符串数组;
根据所述加密后的字符串数组生成加密后的语法树。
本申请实施例中,加密模块203对语法树进行加密时,可以只对所述语法树中的部分词法单元进行加密。
其中,加密模块203首先获取所述语法树中的字符串。可以理解的,所述字符串即为由多个字符组成的一串字符,例如字符串“1,2,3,4,5,6,abc”。随后,将所述字符串转换为字符串数组,或者也可以理解为将所述字符串进行阵列化。例如,可以将字符串“1,2,3,4,5,6,abc”转换为字符串数组[“1”,“2”,“3”,“4”,“5”,“6”,“abc”]。
随后,加密模块203根据预设加密算法对所述字符串数组进行加密,以得到加密后的字符串数组。其中,所述预设加密算法例如可以为MD5加密算法、base64加密算法等。对字符串数组加密后,即可使加密后的字符串数组中不出现原来的字符串,也即可以实现对原来的字符串的隐藏。
加密模块203对字符串数组进行加密得到加密后的字符串数组后,即可根据所述加密后的字符串数组生成加密后的语法树。例如,可以根据所述加密后的字符串数组、未加密的其它词法单元、以及加密后的字符串数组与其它词法单元之间的组成关系,来生成加密后的语法树。
可以理解的,加密就必然存在着解密。为了使最终转换得到的机器代码能够被顺利执行,还可以在加密后的语法树中的随机位置插入解密算法,负责在程序的执行过程中对加密后的语法树进行解密。
需要说明的是,由于所述解密算法在语法树中的位置是随机的,与所述预设加密算法处于语法树中的不同位置,因此即使程序遭遇恶意破解,进行破解的用户也难以发现预设加密算法和解密算法之间的逻辑关系,甚至无法发现语法树中隐藏的解密算法。从而,可以进一步增加破解的难度,提高程序面临破解时的安全性。
在一些实施例中,所述加密模块203还用于执行以下步骤:
获取所述语法树中的打印语句代码;
删除所述打印语句代码。
可以理解的,在程序开发的过程中,为了方便程序的调试,程序开发人员通常会在编写代码时加入一些打印语句代码。这些打印语句代码可以用于输出日志、代码运行结果等信息。
在打印语句代码为程序开发人员带来调试便利的同时,也会在程序发布后为破解者提供便利,为破解者提供程序运行结果、运行节点等重要信息。因此,为了提高程序的安全性,增加破解的难度,可以将程序中的打印语句代码删除。
其中,加密模块203在对程序进行编译的过程中,对语法树进行加密时,可以获取所述语法树中的打印语句代码,并删除所述打印语句代码。其中,加密模块203可以获取所述语法树中的所有打印语句代码,并进行删除。从而,可以在程序的编译过程中,删除掉有利于对程序进行破解的代码。并且,由于这些打印语句代码是供开发人员调试程序时查看日志、代码运行结果等信息时使用的,因此删除这些打印语句代码不会对程序的功能造成影响。
可以理解的,加密模块203在获取语法树中的打印语句代码时,可以通过正则表达式对语法树进行匹配,以查询所述语法树中的打印语句代码。
也即,获取所述语法树中的打印语句代码时,所述加密模块203执行以下步骤:将预设正则表达式与所述语法树进行匹配,所述预设正则表达式用于查询控制台语句代码,将匹配到的控制台语句代码确定为所述打印语句代码。
其中,电子设备中可以预先设置预设正则表达式。所述预设正则表达式用于查询控制台语句代码。从而,加密模块203可以将所述预设正则表达式与所述语法树进行匹配,以匹配出所述语法树中的控制台语句代码。例如,匹配到的语句代码中可以包括console语句。随后,加密模块203可以将将匹配到的控制台语句代码确定为所述打印语句代码。
可以理解的,加密模块203在获取语法树中的打印语句代码时,还可以通过遍历的方式从所述语法树中查询打印语句代码。
也即,获取所述语法树中的打印语句代码时,所述加密模块203执行以下步骤:遍历所述语法树的所有节点,以查询所述语法树中名称包括控制台的节点,将查询到的节点的代码确定为所述打印语句代码。
其中,所述语法树中可以包括多个节点。每个节点可以包括执行某个功能的语句代码。例如,所述语法树中可以包括控制台节点。控制台节点即包括了控制台语句代码,用于在运行时输出打印语句。从而,加密模块203可以遍历所述语法树的所有节点,以查询所述语法树中名称包括控制台的节点,并将查询到的节点的代码确定为所述打印语句代码。
在一些实施例中,所述加密模块203还用于执行以下步骤:
在所述语法树中插入随机代码段,所述随机代码段为不被执行的代码。
其中,在对程序进行编译的过程中,在对语法树进行加密时,加密模块203可以在所述语法树中插入随机代码段。其中,所述随机代码段为不被执行的代码。例如,所述随机代码段可以是在程序开发过程中被注释掉的代码。所述随机代码段在程序的运行过程中不起任何作用,只是用于在程序遭遇恶意破解时,给破解者设置障碍,增加破解的难度。其中,所述随机代码段也可以称为僵尸代码。
具体实施时,以上各个模块可以作为独立的实体来实现,也可以进行任意组合,作为同一或若干个实体来实现。
由上可知,本申请实施例提供的程序编译加密装置200,包括:词法分析模块201,用于对程序源代码进行词法分析,以将所述程序源代码拆分为多个词法单元;语法分析模块202,用于对所述多个词法单元进行语法分析,以根据所述多个词法单元生成语法树;加密模块203,用于根据预设加密算法对所述语法树进行加密,以生成加密后的语法树;代码输出模块204,用于根据所述加密后的语法树生成机器代码,并输出所述机器代码。所述程序编译加密装置200由于在程序编译过程中,对语法树进行了加密,并将加密后的语法树进行代码转换从而得到最终的机器代码,因此当用户试图对机器代码进行恶意破解时,所述机器代码中的加密信息便可极大地增加破解的难度,从而提高程序面对恶意破解时的安全性。
本申请实施例还提供一种电子设备。所述电子设备可以为智能手机、平板电脑、游戏设备、AR(Augmented Reality,增强现实)设备、汽车、数据存储装置、音频播放装置、视频播放装置、笔记本电脑、桌面计算设备、可穿戴设备诸如电子手表、电子眼镜、电子头盔、电子手链、电子项链、电子衣物等设备。
参考图6,图6为本申请实施例提供的电子设备的第一种结构示意图。
电子设备300包括处理器301和存储器302。其中,处理器301与存储器302电性连接。
处理器301是电子设备300的控制中心,利用各种接口和线路连接整个电子设备的各个部分,通过运行或调用存储在存储器302内的计算机程序,以及调用存储在存储器302内的数据,执行电子设备的各种功能和处理数据,从而对电子设备进行整体监控。
在本实施例中,电子设备300中的处理器301按照如下的步骤,将一个或一个以上的计算机程序的进程对应的指令加载到存储器302中,并由处理器301来运行存储在存储器302中的计算机程序,从而执行以下步骤:
对程序源代码进行词法分析,以将所述程序源代码拆分为多个词法单元;
对所述多个词法单元进行语法分析,以根据所述多个词法单元生成语法树;
根据预设加密算法对所述语法树进行加密,以生成加密后的语法树;
根据所述加密后的语法树生成机器代码,并输出所述机器代码。
在一些实施例中,根据预设加密算法对所述语法树进行加密,以生成加密后的语法树时,处理器301执行以下步骤:
获取所述语法树中的字符串;
将所述字符串转换为字符串数组;
根据所述预设加密算法对所述字符串数组进行加密,以得到加密后的字符串数组;
根据所述加密后的字符串数组生成加密后的语法树。
在一些实施例中,根据预设加密算法对所述语法树进行加密,以生成加密后的语法树时,处理器301还执行以下步骤:
获取所述语法树中的打印语句代码;
删除所述打印语句代码。
在一些实施例中,获取所述语法树中的打印语句代码时,处理器301执行以下步骤:
将预设正则表达式与所述语法树进行匹配,所述预设正则表达式用于查询控制台语句代码;
将匹配到的控制台语句代码确定为所述打印语句代码。
在一些实施例中,获取所述语法树中的打印语句代码时,处理器301执行以下步骤:
遍历所述语法树的所有节点,以查询所述语法树中名称包括控制台的节点;
将查询到的节点的代码确定为所述打印语句代码。
在一些实施例中,根据预设加密算法对所述语法树进行加密,以生成加密后的语法树时,处理器301还执行以下步骤:
在所述语法树中插入随机代码段,所述随机代码段为不被执行的代码。
存储器302可用于存储计算机程序和数据。存储器302存储的计算机程序中包含有可在处理器中执行的指令。计算机程序可以组成各种功能模块。处理器301通过调用存储在存储器302的计算机程序,从而执行各种功能应用以及数据处理。
在一些实施例中,参考图7,图7为本申请实施例提供的电子设备的第二种结构示意图。
其中,电子设备300还包括:显示屏303、控制电路304、输入单元305、以及电源306。其中,处理器301分别与显示屏303、控制电路304、输入单元305、以及电源306电性连接。
显示屏303可用于显示由用户输入的信息或提供给用户的信息以及电子设备的各种图形用户接口,这些图形用户接口可以由图像、文本、图标、视频和其任意组合来构成。例如,显示屏303可以用于在程序的调试过程中,输出代码段的运行结果。
控制电路304与显示屏303电性连接,用于控制显示屏303显示信息。
输入单元305可用于接收输入的数字、字符信息或用户特征信息(例如指纹),以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。其中,输入单元305可以包括指纹识别模组。
电源306用于给电子设备300的各个部件供电。在一些实施例中,电源306可以通过电源管理系统与处理器301逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。
尽管图7中未示出,电子设备300还可以包括摄像头、射频模块、蓝牙模块等,在此不再赘述。
由上可知,本申请实施例提供了一种电子设备,所述电子设备执行以下步骤:对程序源代码进行词法分析,以将所述程序源代码拆分为多个词法单元;对所述多个词法单元进行语法分析,以根据所述多个词法单元生成语法树;根据预设加密算法对所述语法树进行加密,以生成加密后的语法树;根据所述加密后的语法树生成机器代码,并输出所述机器代码。所述电子设备由于在程序编译过程中,对语法树进行了加密,并将加密后的语法树进行代码转换从而得到最终的机器代码,因此当用户试图对机器代码进行恶意破解时,所述机器代码中的加密信息便可极大地增加破解的难度,从而提高程序面对恶意破解时的安全性。
本申请实施例还提供一种存储介质,所述存储介质中存储有计算机程序,当所述计算机程序在计算机上运行时,所述计算机执行上述任一实施例所述的程序编译加密方法。
需要说明的是,本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过计算机程序来指令相关的硬件来完成,所述计算机程序可以存储于计算机可读存储介质中,所述存储介质可以包括但不限于:只读存储器(ROM,Read OnlyMemory)、随机存取存储器(RAM,Random Access Memory)、磁盘或光盘等。
以上对本申请实施例所提供的程序编译加密方法、装置、存储介质及电子设备进行了详细介绍。本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。
Claims (6)
1.一种程序编译加密方法,其特征在于,包括:
对程序源代码进行词法分析,以将所述程序源代码拆分为多个词法单元;
对所述多个词法单元进行语法分析,以根据所述多个词法单元生成语法树;
获取所述语法树中的打印语句代码,并删除所述打印语句代码;
在所述语法树中插入随机代码段;
获取所述语法树中的字符串,将所述字符串转换为字符串数组,根据预设加密算法对所述语法树中部分词法单元的字符串数组进行加密,以得到加密后的字符串数组,根据所述加密后的字符串数组、未加密的其它词法单元以及加密后的字符串数组与所述其它词法单元之间的组成关系,生成加密后的语法树;
在所述加密后的语法树中的随机位置插入解密算法,所述解密算法与所述预设加密算法处于所述语法树的不同位置,以得到加密且具有解密算法的语法树;
根据预先设定的自然语言代码与机器代码之间的代码转换规则,对所述加密后的语法树进行代码转换,以得到机器代码,所述机器代码中包含加密信息,所述加密信息为包括所述预设加密算法和所述代码转换规则的多重加密信息,并输出所述机器代码。
2.根据权利要求1所述的程序编译加密方法,其特征在于,所述获取所述语法树中的打印语句代码,包括:
将预设正则表达式与所述语法树进行匹配,所述预设正则表达式用于查询控制台语句代码;
将匹配到的控制台语句代码确定为所述打印语句代码。
3.根据权利要求1所述的程序编译加密方法,其特征在于,所述获取所述语法树中的打印语句代码,包括:
遍历所述语法树的所有节点,以查询所述语法树中名称包括控制台的节点;
将查询到的节点的代码确定为所述打印语句代码。
4.一种程序编译加密装置,其特征在于,包括:
词法分析模块,用于对程序源代码进行词法分析,以将所述程序源代码拆分为多个词法单元;
语法分析模块,用于对所述多个词法单元进行语法分析,以根据所述多个词法单元生成语法树;
加密模块,用于获取所述语法树中的打印语句代码,并删除所述打印语句代码,在所述语法树中插入随机代码段,获取所述语法树中的字符串,将所述字符串转换为字符串数组,根据预设加密算法对所述语法树中部分词法单元的字符串数组进行加密,以得到加密后的字符串数组,根据所述加密后的字符串数组、未加密的其它词法单元以及加密后的字符串数组与所述其它词法单元之间的组成关系,生成加密后的语法树,并在所述加密后的语法树中的随机位置插入解密算法,所述解密算法与所述预设加密算法处于所述语法树的不同位置,以得到加密且具有解密算法的语法树;
代码输出模块,用于根据预先设定的自然语言代码与机器代码之间的代码转换规则,对所述加密后的语法树进行代码转换,以得到机器代码,所述机器代码中包含加密信息,所述加密信息为包括所述预设加密算法和所述代码转换规则的多重加密信息,并输出所述机器代码。
5.一种存储介质,其特征在于,所述存储介质中存储有计算机程序,当所述计算机程序在计算机上运行时,使得所述计算机执行权利要求1至3任一项所述的程序编译加密方法。
6.一种电子设备,其特征在于,所述电子设备包括处理器和存储器,所述存储器中存储有计算机程序,所述处理器通过调用所述存储器中存储的所述计算机程序,用于执行权利要求1至3任一项所述的程序编译加密方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910668650.6A CN110457869B (zh) | 2019-07-23 | 2019-07-23 | 程序编译加密方法、装置、存储介质及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910668650.6A CN110457869B (zh) | 2019-07-23 | 2019-07-23 | 程序编译加密方法、装置、存储介质及电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110457869A CN110457869A (zh) | 2019-11-15 |
CN110457869B true CN110457869B (zh) | 2022-03-22 |
Family
ID=68483241
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910668650.6A Active CN110457869B (zh) | 2019-07-23 | 2019-07-23 | 程序编译加密方法、装置、存储介质及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110457869B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111399842B (zh) * | 2020-03-10 | 2023-09-05 | 北京奇艺世纪科技有限公司 | 一种代码编译方法及装置 |
CN111988624A (zh) * | 2020-09-07 | 2020-11-24 | 北京达佳互联信息技术有限公司 | 视频处理方法、装置、设备及存储介质 |
CN112241519A (zh) * | 2020-11-05 | 2021-01-19 | 王志平 | 一种软件版权保护的实现方法 |
Family Cites Families (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104298594B (zh) * | 2014-09-25 | 2018-03-02 | 南京航空航天大学 | 一种源代码中值计算错误的自动检测和定位方法 |
CN105069355B (zh) * | 2015-08-26 | 2018-09-11 | 厦门市美亚柏科信息股份有限公司 | webshell变形的静态检测方法和装置 |
US10289842B2 (en) * | 2015-11-12 | 2019-05-14 | Samsung Electronics Co., Ltd. | Method and apparatus for protecting kernel control-flow integrity using static binary instrumentation |
CN109255209B (zh) * | 2017-07-13 | 2022-05-17 | 阿里巴巴集团控股有限公司 | 一种数据处理方法、装置、设备和存储介质 |
CN107341372B (zh) * | 2017-07-25 | 2018-12-07 | 北京深思数盾科技股份有限公司 | 一种软件保护方法和装置 |
CN107391087A (zh) * | 2017-07-28 | 2017-11-24 | 郑州云海信息技术有限公司 | 一种硬件信息读写的方法及装置 |
CN107908933B (zh) * | 2017-11-08 | 2020-08-28 | 北京顶象技术有限公司 | 一种基于中间语言的字符串加密方法 |
US11392686B2 (en) * | 2018-01-02 | 2022-07-19 | Blackberry Limited | Detecting stack cookie utilization in a binary software component using binary static analysis |
CN108595921B (zh) * | 2018-03-22 | 2020-11-13 | 北京奇艺世纪科技有限公司 | 一种源代码中字符串的混淆方法和装置 |
CN109948308A (zh) * | 2019-03-13 | 2019-06-28 | 智者四海(北京)技术有限公司 | 代码安全保护方法、装置、电子设备和计算机可读存储介质 |
CN109992935B (zh) * | 2019-03-15 | 2021-05-25 | 同盾控股有限公司 | 一种源代码保护方法及装置 |
CN109918917B (zh) * | 2019-03-19 | 2021-06-08 | 北京智游网安科技有限公司 | 防止h5源码泄漏的方法、计算机设备和存储介质 |
-
2019
- 2019-07-23 CN CN201910668650.6A patent/CN110457869B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN110457869A (zh) | 2019-11-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102107872B1 (ko) | 컴파일러 기반 난독화 기법 | |
US11120018B2 (en) | Spark query method and system supporting trusted computing | |
CN106575166B (zh) | 手写输入字符的处理、数据拆分和合并及编解码处理方法 | |
CN106778288B (zh) | 一种数据脱敏的方法及系统 | |
CN110457869B (zh) | 程序编译加密方法、装置、存储介质及电子设备 | |
US9436449B1 (en) | Scenario-based code trimming and code reduction | |
KR102132504B1 (ko) | 컴퓨팅 장치의 보안 식별 및 보안 식별 방법 | |
JP2018152050A (ja) | ブロックチェーンバージョン制御システム | |
US10216488B1 (en) | Intercepting and injecting calls into operations and objects | |
WO2021017735A1 (zh) | 一种智能合约的形式化验证方法、电子装置及存储介质 | |
US9607160B2 (en) | Method and apparatus for providing string encryption and decryption in program files | |
CN111736840A (zh) | 小程序应用的编译方法、运行方法、存储介质及电子设备 | |
CN106663018A (zh) | 在容器化工作空间环境中修改android应用生命周期以控制其执行的方法 | |
CN112214653B (zh) | 字符串识别方法、装置、存储介质及电子设备 | |
WO2023029447A1 (zh) | 模型保护方法、装置、设备、系统以及存储介质 | |
US10481996B2 (en) | Hybrid code modification in intermediate language for software application | |
Du et al. | Generating service models by trace subsequence substitution | |
CN114925338A (zh) | 一种编译方法、装置、设备、介质和产品 | |
Yang et al. | Describectx: context-aware description synthesis for sensitive behaviors in mobile apps | |
US10540157B2 (en) | Systems to remove object relational mappings from a software project | |
CN115270180A (zh) | 日志存储、封装方法和装置 | |
CN114547560A (zh) | 一种处理方法、装置及电子设备 | |
CN113420288A (zh) | 一种容器镜像敏感信息检测系统及方法 | |
CN110032832B (zh) | 一种Web应用程序的处理方法及装置 | |
CN111666581A (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 |