CN113836545A - 代码加密方法、装置、设备及存储介质 - Google Patents
代码加密方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN113836545A CN113836545A CN202110965126.2A CN202110965126A CN113836545A CN 113836545 A CN113836545 A CN 113836545A CN 202110965126 A CN202110965126 A CN 202110965126A CN 113836545 A CN113836545 A CN 113836545A
- Authority
- CN
- China
- Prior art keywords
- code
- maze
- skip list
- control flow
- control
- 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
- 238000000034 method Methods 0.000 title claims abstract description 46
- 230000006870 function Effects 0.000 claims description 49
- 238000005336 cracking Methods 0.000 abstract description 4
- 230000008569 process Effects 0.000 description 7
- 238000010586 diagram Methods 0.000 description 6
- 238000004891 communication Methods 0.000 description 5
- 238000010276 construction Methods 0.000 description 2
- 238000010845 search algorithm Methods 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 1
- 230000001010 compromised effect Effects 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000003825 pressing Methods 0.000 description 1
- 230000003068 static effect Effects 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/60—Protecting data
- G06F21/602—Providing cryptographic facilities or services
-
- 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/60—Protecting data
- G06F21/64—Protecting data integrity, e.g. using checksums, certificates or signatures
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Health & Medical Sciences (AREA)
- Bioethics (AREA)
- General Health & Medical Sciences (AREA)
- Computer Hardware Design (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明属于计算机技术领域,公开了一种代码加密方法、装置、设备及存储介质。本发明通过对待加密代码中的函数控制代码进行平坦化处理,获得平坦化控制代码;对平坦化控制代码进行乱序处理,获得乱序控制代码;根据平坦化控制代码中的代码运行逻辑生成控制流迷宫,并为乱序控制代码规划迷宫路径;基于迷宫路径及控制流迷宫对所述乱序控制代码进行加密,获得待加密代码对应的加密代码。由于对待加密代码中的函数控制代码进行平坦化处理及乱序处理,使得在不修改代码中的运行逻辑的同时提高了代码阅读难度,且之后还根据生成的控制流迷宫及迷宫路径对乱序控制代码进一步进行加密,提高了反向破解代码的难度,提高了代码的安全性。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种代码加密方法、装置、设备及存储介质。
背景技术
JavaScript广泛应用于网页(web)应用程序,用以改善用户体验并减少服务器负载。但是JavaScript作为动态解释型语言,以源代码形式存在于客户端,攻击者可轻易对源代码进行查看、分析、复制、盗用和篡改,基于Javascript的攻击被认为是网络安全威胁的主要来源之一。基于Javascript的web应用程序的安全漏洞可能会导致机密数据被窃取、数据完整性被破坏或影响应用程序的可用性。因此,如何使web应用程序免遭安全威胁,保护Javascript代码的安全是最紧迫的任务之一。
目前,JavaScript代码保护主要有以下两种方法:
1、混淆,JavaScript源代码混淆是一种修改JavaScript代码的机制,使其在不改变程序功能的情况下隐藏程序的目的或逻辑,从而防止篡改或程序的逆向工程。
2、加密,使用标准加密函数将JavaScript代码进行加密,在代码执行时再进行解密。
现有的混淆和加密两种JavaScript代码保护方法可以增大逆向者静态分析代码功能的难度,可在一定程度上延长攻击者的逆向时间,但其执行过程对攻击者完全可见,随着动态调试器的功能越来越完善,攻击者通过动态跟踪调试代码,仍然能够比较轻松地还原出源代码。因此,亟须提高JavaScript代码保护强度。
上述内容仅用于辅助理解本发明的技术方案,并不代表承认上述内容是现有技术。
发明内容
本发明的主要目的在于提供一种代码加密方法、装置、设备及存储介质,旨在解决现有技术代码保护强度不足的技术问题。
为实现上述目的,本发明提供了一种代码加密方法,所述方法包括以下步骤:
对待加密代码中的函数控制代码进行平坦化处理,获得平坦化控制代码;
对所述平坦化控制代码进行乱序处理,获得乱序控制代码;
根据所述平坦化控制代码中的代码运行逻辑生成控制流迷宫,并为所述乱序控制代码规划迷宫路径;
基于所述迷宫路径及所述控制流迷宫对所述乱序控制代码进行加密,获得所述待加密代码对应的加密代码。
可选的,所述根据所述平坦化控制代码中的代码运行逻辑生成控制流迷宫的步骤,包括:
根据所述平坦化控制代码中的代码运行逻辑确定顺序控制流跳表及迷宫尺寸;
对所述顺序控制流跳表中的跳表值进行遍历,获得前序遍历序列;
根据所述顺序控制流跳表、所述前序遍历序列及所述迷宫尺寸构建控制流迷宫。
可选的,所述根据所述平坦化控制代码中的代码运行逻辑确定顺序控制流跳表及迷宫尺寸的步骤,包括:
读取所述平坦化控制代码中的代码运行逻辑,获得跳表值及各跳表值对应的跳转逻辑;
根据所述跳表值及各跳表值对应的跳转逻辑构建顺序控制流跳表;
获取所述顺序控制流跳表的跳表长度,根据所述跳表长度确定迷宫尺寸。
可选的,所述根据所述顺序控制流跳表、所述前序遍历序列及所述迷宫尺寸构建控制流迷宫的步骤,包括:
根据所述迷宫尺寸生成迷宫;
依据所述前序遍历序列,根据所述顺序控制流跳表中的各跳表值对所述迷宫进行设置;
在设置完成时,将所述迷宫中未设置部分进行填充,获得控制流迷宫。
可选的,所述为所述乱序控制代码规划迷宫路径的步骤,包括:
根据所述乱序控制代码确定乱序控制流跳表;
确定所述乱序控制流跳表中各跳表值对应的移动次数;
根据各跳表值对应的移动次数为所述乱序控制代码规划迷宫路径。
可选的,所述根据各跳表值对应的移动次数为所述乱序控制代码规划迷宫路径的步骤,包括:
在所述控制流迷宫中选取路径起点;
对所述乱序控制流跳表中的跳表值进行遍历,将被遍历到的跳表值作为当前跳表值;
根据所述当前跳表值在所述控制流迷宫中选取目标点;
根据所述当前跳表值对应的移动次数确定选取移动点;
根据所述路径起点、所述移动点及所述目标点确定所述当前跳表值对应的迷宫路径;
将所述目标点作为新的路径起点,并返回所述遍历所述乱序控制流跳表,将被遍历到的跳表值作为当前跳表值的步骤;
在所述乱序控制流跳表中各跳表值均被遍历过时,根据乱序控制流跳表中各跳表值对应的迷宫路径确定所述乱序控制代码对应的迷宫路径。
可选的,所述基于所述迷宫路径及所述控制流迷宫对所述乱序控制代码进行加密,获得所述待加密代码对应的加密代码的步骤,包括:
根据所述迷宫路径及所述控制流迷宫生成寻路函数;
在所述乱序控制代码中添加寻路函数初始化代码;
通过所述初始化代码将所述乱序控制代码中的跳表值替换为所述寻路函数,获得所述待加密代码对应的加密代码。
此外,为实现上述目的,本发明还提出一种代码加密装置,所述代码加密装置包括以下模块:
代码定位模块,用于对待加密代码中的函数控制代码进行平坦化处理,获得平坦化控制代码;
代码乱序模块,用于对所述平坦化控制代码进行乱序处理,获得乱序控制代码;
路径规划模块,用于根据所述平坦化控制代码中的代码运行逻辑生成控制流迷宫,并为所述乱序控制代码规划迷宫路径;
代码加密模块,用于基于所述迷宫路径及所述控制流迷宫对所述乱序控制代码进行加密,获得所述待加密代码对应的加密代码。
此外,为实现上述目的,本发明还提出一种代码加密设备,所述代码加密设备包括:处理器、存储器及存储在所述存储器上并可在所述处理器上运行的代码加密程序,所述代码加密程序被处理器执行时实现如上所述的代码加密方法的步骤。
此外,为实现上述目的,本发明还提出一种计算机可读存储介质,所述计算机可读存储介质上存储有代码加密程序,所述代码加密程序执行时实现如上所述的代码加密方法的步骤。
本发明通过对待加密代码中的函数控制代码进行平坦化处理,获得平坦化控制代码;对平坦化控制代码进行乱序处理,获得乱序控制代码;根据平坦化控制代码生成控制流迷宫,并为乱序控制代码规划迷宫路径;基于迷宫路径及控制流迷宫对所述乱序控制代码进行加密,获得待加密代码对应的加密代码。由于对待加密代码中的函数控制代码进行平坦化处理及乱序处理,使得在不修改代码中的运行逻辑的同时提高了代码阅读难度,且之后还根据生成的控制流迷宫及迷宫路径对乱序控制代码进一步进行加密,提高了反向破解代码的难度,提高了代码的安全性。
附图说明
图1是本发明实施例方案涉及的硬件运行环境的电子设备的结构示意图;
图2为本发明代码加密方法第一实施例的流程示意图;
图3为本发明代码加密方法第二实施例的流程示意图;
图4为本发明一实施例的控制流迷宫构建示意图;
图5为本发明代码加密装置第一实施例的结构框图。
本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
参照图1,图1为本发明实施例方案涉及的硬件运行环境的代码加密设备结构示意图。
如图1所示,该电子设备可以包括:处理器1001,例如中央处理器(CentralProcessing Unit,CPU),通信总线1002、用户接口1003,网络接口1004,存储器1005。其中,通信总线1002用于实现这些组件之间的连接通信。用户接口1003可以包括显示屏(Display)、输入单元比如键盘(Keyboard),可选用户接口1003还可以包括标准的有线接口、无线接口。网络接口1004可选的可以包括标准的有线接口、无线接口(如无线保真(Wireless-Fidelity,WI-FI)接口)。存储器1005可以是高速的随机存取存储器(RandomAccess Memory,RAM),也可以是稳定的非易失性存储器(Non-Volatile Memory,NVM),例如磁盘存储器。存储器1005可选的还可以是独立于前述处理器1001的存储装置。
本领域技术人员可以理解,图1中示出的结构并不构成对电子设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
如图1所示,作为一种存储介质的存储器1005中可以包括操作系统、网络通信模块、用户接口模块以及代码加密程序。
在图1所示的电子设备中,网络接口1004主要用于与网络服务器进行数据通信;用户接口1003主要用于与用户进行数据交互;本发明电子设备中的处理器1001、存储器1005可以设置在代码加密设备中,所述电子设备通过处理器1001调用存储器1005中存储的代码加密程序,并执行本发明实施例提供的代码加密方法。
本发明实施例提供了一种代码加密方法,参照图2,图2为本发明一种代码加密方法第一实施例的流程示意图。
本实施例中,所述代码加密方法包括以下步骤:
步骤S10:对待加密代码中的函数控制代码进行平坦化处理,获得平坦化控制代码。
需要说明的是,本实施例的执行主体可以是所述代码加密设备,所述代码加密设备可以是个人电脑、服务器等电子设备,也可以是其他可实现相同或相似功能的设备,本实施例对此不加以限制。在本实施例及下述各实施例中,以代码加密设备为例对本发明代码加密方法进行说明。
需要说明的是,待加密代码可以是需要进行加密的代码,函数控制代码可以是待加密代码中控制代码走向的逻辑代码,例如:使用if、while、for等关键字用于控制代码执行逻辑的代码。对待加密代码中的函数控制代码进行平坦化处理,获得平坦化控制代码可以是将待加密代码中的函数控制代码中易于阅读的代码流程重组成一个难以理解的switch case结构的代码流程,从而获得平坦化控制代码。函数控制代码与平坦化控制代码的代码执行结果完全一致,两者仅仅是执行流程具备区别。
例如:将函数控制代码:
进行平坦化处理之后,获得的平坦化控制代码为:
步骤S20:对所述平坦化控制代码进行乱序处理,获得乱序控制代码。
需要说明的是,对平坦化控制代码进行乱序处理,获得乱序控制代码可以是将平坦化控制代码中的switch case结构的代码顺序打乱,从而获得乱序控制代码。
例如:将平坦化控制代码
进行乱序处理,获得的乱序控制代码为:
步骤S30:根据所述平坦化控制代码中的代码运行逻辑生成控制流迷宫,并为所述乱序控制代码规划迷宫路径。
需要说明的是,代码运行逻辑可以包括在代码正常运行的运行流程。根据所述平坦化控制代码中的代码运行逻辑生成控制流迷宫可以是获取预先设定的迷宫尺寸,根据迷宫尺寸创建迷宫,根据平坦化控制代码中的代码运行逻辑确定跳表值,并将跳表值添加至迷宫中,从而获得控制流迷宫。其中,迷宫尺寸可以包括迷宫长度及迷宫宽度,跳表值为switch case结构的代码中case后的数值。为乱序控制代码规划迷宫路径可以是为乱序控制代码中各个跳表值生成在控制流迷宫中的迷宫路径。
步骤S40:基于所述迷宫路径及所述控制流迷宫对所述乱序控制代码进行加密,获得所述待加密代码对应的加密代码。
需要说明的是,基于所述迷宫路径及所述控制流迷宫对所述乱序控制代码进行加密,获得所述待加密代码对应的加密代码可以是根据迷宫路径及控制流迷宫将乱序控制代码中静态的跳表值替换为动态函数,从而获得待加密代码对应的加密代码。
在具体实现中,本实施例步骤S40,可以包括:
根据所述迷宫路径及所述控制流迷宫生成寻路函数;在所述乱序控制代码中添加寻路函数初始化代码;通过所述初始化代码将所述乱序控制代码中的跳表值替换为所述寻路函数,获得所述待加密代码对应的加密代码。
需要说明的是,寻路函数可以是动态函数,随着输入的目标值的不同,可以根据目标值对应的跳表值输出不同的数值,寻路函数初始化代码用于对寻路函数中的参数进行初始化,其中,目标值可以是switch case结构的代码中switch关键字相邻的括号中的参数值。通过所述初始化代码将所述乱序控制代码中的跳表值替换为所述寻路函数可以是通过初始化代码将寻路函数初始化完毕之后,将乱序控制代码中的跳表值替换为寻路函数,并在乱序控制代码中设置辅助信息。辅助信息用于标识该跳表值是否存在不同的跳转分支。
例如:假设乱序控制代码为:
则根据在乱序控制代码中添加寻路函数初始化代码;通过初始化代码将乱序控制代码中的跳表值替换为寻路函数,获得的待加密代码对应的加密代码为:
其中,eval(generateFuncInitCode(jTab))为初始化代码,_foo为目标值,F()为寻路函数,在目标值不同时,寻路函数会输出不同的数值,保证目标值可与原本应执行的第N行case代码匹配。在目标值为0时,F()可以输出2和0,从而保证目标值与原本应执行的第2行case代码匹配;在目标值为1时,F()可以输出0、2、0、1,从而保证目标值与原本应执行的第4行代码case代码匹配;在目标值为2时,F()可以输出1、0、3、3、2,从而保证目标值可以与原本应执行的第5行代码匹配;在目标值为4时,F()可以输出3、3、4,从而保证目标值与原本应执行的第3行case代码匹配。jtFlag为辅助信息,在原本乱序控制代码中当_foo=1时,会运行对应代码_foo=n<1?2:4,根据n的不同判断跳转不同的分支,因此,可以在该行代码中设置辅助信息,用于辅助寻路函数进行分支跳转。
本实施例通过对待加密代码中的函数控制代码进行平坦化处理,获得平坦化控制代码;对平坦化控制代码进行乱序处理,获得乱序控制代码;根据平坦化控制代码生成控制流迷宫,并为乱序控制代码规划迷宫路径;基于迷宫路径及控制流迷宫对所述乱序控制代码进行加密,获得待加密代码对应的加密代码。由于对待加密代码中的函数控制代码进行平坦化处理及乱序处理,使得在不修改代码中的运行逻辑的同时提高了代码阅读难度,且之后还根据生成的控制流迷宫及迷宫路径对乱序控制代码进一步进行加密,提高了反向破解代码的难度,提高了代码的安全性。
参考图3,图3为本发明一种代码加密方法第二实施例的流程示意图。
基于上述第一实施例,本实施例代码加密方法的所述步骤S30,包括:
步骤S301:根据所述平坦化控制代码中的代码运行逻辑确定顺序控制流跳表及迷宫尺寸。
需要说明的是,代码运行逻辑可以包括代码正常运行的运行流程。顺序控制流跳表可以包括平坦化控制代码中的跳表值及各跳表值对应的代码中的跳转逻辑。迷宫尺寸可以包括迷宫的长度及宽度。其中,迷宫尺寸可以由代码加密设备的管理人员预先进行设置,迷宫尺寸可以为不同代码分别进行设置,也可以为所有代码设置统一的迷宫尺寸。
例如:假设平坦化控制代码为:
则其对应的顺序控制流跳表为:
jTabOrder={
0:1,
1:[2,4],
2:3,
3:1,
4:EOF
}
其中,EOF(End Of File)表示函数运行结束,“0:1”表示跳表值为0时,经过代码处理,会跳转至跳表值为1的分支;“1:[2,4]”表示跳表值为1时,经过代码处理,会跳转至跳表值为2或4的分支;“4:EOF”表示跳表值为4时,经过代码处理,函数运行结束。
进一步的,由于平坦化控制代码中的跳表值的数量并不确定,若迷宫尺寸为预先设置,则可能会导致根据预设的迷宫尺寸构建的迷宫不足以放入所有的跳表值,会使得后续步骤执行失败,为了克服上述缺陷,本实施例步骤S301,可以包括:
读取所述平坦化控制代码中的代码运行逻辑,获得跳表值及各跳表值对应的跳转逻辑;根据所述跳表值及各跳表值对应的跳转逻辑构建顺序控制流跳表;获取所述顺序控制流跳表的跳表长度,根据所述跳表长度确定迷宫尺寸。
需要说明的是,读取所述平坦化控制代码中的代码运行逻辑,获得跳表值及各跳表值对应的跳转逻辑可以是读取平坦化控制代码中的代码运行逻辑,确定代码运行流程,根据代码运行流程确定代码运行过程中涉及到的所有跳表值及各跳表值对应的跳转逻辑。顺序控制流跳表的跳表长度可以是顺序控制流跳表中跳表值的个数。根据跳表长度确定迷宫尺寸可以是选择对应的迷宫格数大于跳表长度的迷宫尺寸,其中,迷宫尺寸中的长度与宽度相乘即可获得该迷宫尺寸对应的迷宫格数。
例如:假设顺序控制流跳表的跳表长度为5,则可以选择迷宫的长度为3,宽度也为3,迷宫格数为9的迷宫尺寸3*3。
步骤S302:对所述顺序控制流跳表中的跳表值进行遍历,获得前序遍历序列。
需要说明的是,对所述顺序控制流跳表中的跳表值进行遍历,获得前序遍历序列可以是根据顺序控制流跳表中的跳表值及各跳表值对应的代码中的跳转逻辑构建有向图,然后利用深度优先搜索算法对有向图进行遍历,获得前序遍历序列。
步骤S303:根据所述顺序控制流跳表、所述前序遍历序列及所述迷宫尺寸构建控制流迷宫。
在实际使用中,根据所述顺序控制流跳表、所述前序遍历序列及所述迷宫尺寸构建控制流迷宫可以包括:
根据所述迷宫尺寸生成迷宫;依据所述前序遍历序列,根据所述顺序控制流跳表中的各跳表值对所述迷宫进行设置;在设置完成时,将所述迷宫中未设置部分进行填充,获得控制流迷宫。
需要说明的是,根据迷宫尺寸生成迷宫可以是根据生成长度及宽度与迷宫尺寸中记录的长度与宽度一致的迷宫。依据所述前序遍历序列,根据所述顺序控制流跳表中的各跳表值对所述迷宫进行设置可以是按照前序遍历序列的序列顺序将顺序控制流跳表中的各个跳表值随机放入迷宫的各个迷宫格子中。将所述迷宫中未设置部分进行填充可以是将迷宫中未放入跳表值的迷宫格子使用数值进行填充,其中,填充使用的数值与各跳表值均不同。
为了便于理解,参考图4进行说明,图4为本实施例的控制流迷宫构建示意图。其中,假设顺序控制流跳表为:
jTabOrder={
0:1,
1:[2,4],
2:3,
3:1,
4:EOF
}
则根据其构建的有向图为图4中的a图像所示,通过深度优先搜索算法对有向图进行遍历得到的前序遍历序列如图4中的b图像所示,获得的控制流迷宫如图4中的c图像所示。
步骤S304:根据所述乱序控制代码确定乱序控制流跳表。
需要说明的是,根据乱序控制代码确定乱序控制流跳表的方式与根据平坦化控制代码确定顺序控制流跳表的方式相同。
例如:假设乱序控制代码为:
则其对应的乱序控制流跳表为:
jTabRandom={
3:1,
0:1,
4:EOF,
1:[2,4],
2:3
}
步骤S305:确定所述乱序控制流跳表中各跳表值对应的移动次数。
需要说明的是,确定乱序控制流跳表中各跳表值对应的移动次数可以是根据各跳表值位于乱序控制流跳表中的位置确定各跳表值对应的移动次数。
例如:对于跳表值3,其位于乱序控制流跳表中的第1行,则其对应的移动次数为1;对于跳表值0,其位于乱序空指路跳表中的第2行,则其对应的移动次数为2;对于跳表值4,其位于乱序控制流跳表中的第3行,则其对应的移动次数为3;依次类推,则跳表值1对应的移动次数为4,跳表值2对应的移动次数为5。
步骤S306:根据各跳表值对应的移动次数为所述乱序控制代码规划迷宫路径。
需要说明的是,根据各跳表值对应的移动次数为所述乱序控制代码规划迷宫路径可以是根据跳表值对应的移动次数生成跳表值对应的迷宫路径,将各跳表值对应的移动路径确定乱序控制代码对应的迷宫路径。
在实际使用中,本实施例中所述步骤S306,可以包括:
在所述控制流迷宫中选取路径起点;
对所述乱序控制流跳表中的跳表值进行遍历,将被遍历到的跳表值作为当前跳表值;
根据所述当前跳表值在所述控制流迷宫中选取目标点;
根据所述当前跳表值对应的移动次数确定选取移动点;
根据所述路径起点、所述移动点及所述目标点确定所述当前跳表值对应的迷宫路径;
将所述目标点作为新的路径起点,并返回所述遍历所述乱序控制流跳表,将被遍历到的跳表值作为当前跳表值的步骤;
在所述乱序控制流跳表中各跳表值均被遍历过时,根据乱序控制流跳表中各跳表值对应的迷宫路径确定所述乱序控制代码对应的迷宫路径。
需要说明的是,在控制流迷宫中选取路径起点可以是在控制流迷宫中随机选取一个对应的数值并非前序遍历序列中排序第一的跳表值的迷宫格子作为路径起点。对所述乱序控制流跳表中的跳表值进行遍历可以是按照前序遍历序列的序列顺序对乱序控制流跳表中的跳表值进行遍历。根据所述当前跳表值在所述控制流迷宫中选取目标点可以是将控制流迷宫中对应的数值与当前跳表值相同的迷宫格子作为目标点。根据所述当前跳表值对应的移动次数确定选取移动点可以是将当前跳表值对应的移动次数减2,获得需要选取的移动点数量,在控制流迷宫中随机选取数量与移动点数量一致的迷宫格子作为移动点,其中,移动点对应的数值需与当前跳表值不同,即移动点与目标点不可相同;若移动次数减2后得到的数值小于0或等于0,则不必选择移动点。
可以理解的是,在路径起点、移动点及目标点均确定之后,将路径起点、移动点及目标点相连即可生成当前跳表值对应的迷宫路径。
需要说明的是,若某个跳表值在有向图中对应的节点出度或入度大于1,还需要利用支配树算法确定该节点的支配点,并将与支配点的跳表值相同的迷宫格子作为为该跳表值规划迷宫路径时的路径起点。例如:以图4中a图像的有向图为例,该跳表值1在有向图中对应的节点1可以由节点0与节点3到达,则节点1的入度为2,节点1可以到达节点2及节点4,则节点1的出度为2,可以通过支配树算法计算节点1的支配点,经计算可以确定节点1的支配点为节点0,因此,在为跳表值1规划迷宫路径时可以将控制流迷宫中跳表值为0的迷宫格子作为路径起点。
在实际使用中,还可以路径起点、移动点及目标点之间的先后顺序确定迷宫路径中每次移动时对应的方向。例如:以迷宫左下角端点为坐标原点,将各迷宫格子的边长作为单位构建坐标系,以各迷宫格子的中心点在坐标系中的坐标表示该迷宫格子,假设路径起点的中心点坐标为(x,y),仅存在一个移动点,该移动点的中心点坐标为(rx,ry),则由路径起点移动至移动点的移动步长可以表示为:(dx,dy),其中,dx=rx-x,dy=ry-y,移动方向可以根据dx及dy与移动方向规则表中的规则匹配确定。
表1移动方向规则表
本实施例通过读取平坦化控制代码中的跳表值及各跳表值对应的跳转逻辑,获得顺序控制流跳表;获取所述顺序控制流跳表的跳表长度,根据所述跳表长度确定迷宫尺寸。由于迷宫尺寸是根据平坦化控制代码对应的控制流跳表的跳表长度确定的,可构建的迷宫可正常放入平坦化控制代码中所有的跳表值,从而避免了构建的迷宫无法放入平坦化控制代码中所有的跳表值导致的执行失败的现象。且之后根据乱序控制代码确定乱序控制流跳表;确定所述乱序控制流跳表中各跳表值对应的移动次数;根据各跳表值对应的移动次数为所述乱序控制代码规划迷宫路径。由于各跳表值对应的移动次数是根据各跳表值在乱序控制跳表中的位置确定的,根据此移动次数为乱序控制代码规划迷宫路径可以保证后续根据迷宫路径及控制流迷宫生成的寻路函数可以保证目标值可与原本应执行的第N行case代码匹配,保证了加密后的加密代码执行时的执行结果与待加密代码一致。
此外,本发明实施例还提出一种存储介质,所述存储介质上存储有代码加密程序,所述代码加密程序被处理器执行时实现如上文所述的代码加密方法的步骤。
参照图5,图5为本发明代码加密装置第一实施例的结构框图。
如图5所示,本发明实施例提出的代码加密装置包括:
代码定位模块10,用于对待加密代码中的函数控制代码进行平坦化处理,获得平坦化控制代码;
代码乱序模块20,用于对所述平坦化控制代码进行乱序处理,获得乱序控制代码;
路径规划模块30,用于根据所述平坦化控制代码中的代码运行逻辑生成控制流迷宫,并为所述乱序控制代码规划迷宫路径;
代码加密模块40,用于基于所述迷宫路径及所述控制流迷宫对所述乱序控制代码进行加密,获得所述待加密代码对应的加密代码。
本实施例通过对待加密代码中的函数控制代码进行平坦化处理,获得平坦化控制代码;对平坦化控制代码进行乱序处理,获得乱序控制代码;根据平坦化控制代码生成控制流迷宫,并为乱序控制代码规划迷宫路径;基于迷宫路径及控制流迷宫对所述乱序控制代码进行加密,获得待加密代码对应的加密代码。由于对待加密代码中的函数控制代码进行平坦化处理及乱序处理,使得在不修改代码中的运行逻辑的同时提高了代码阅读难度,且之后还根据生成的控制流迷宫及迷宫路径对乱序控制代码进一步进行加密,提高了反向破解代码的难度,提高了代码的安全性。
进一步的,所述路径规划模块30,还用于根据所述平坦化控制代码中的代码运行逻辑确定顺序控制流跳表及迷宫尺寸;对所述顺序控制流跳表中的跳表值进行遍历,获得前序遍历序列;根据所述顺序控制流跳表、所述前序遍历序列及所述迷宫尺寸构建控制流迷宫。
进一步的,所述路径规划模块30,还用于读取所述平坦化控制代码中的代码运行逻辑,获得跳表值及各跳表值对应的跳转逻辑;根据所述跳表值及各跳表值对应的跳转逻辑构建顺序控制流跳表;获取所述顺序控制流跳表的跳表长度,根据所述跳表长度确定迷宫尺寸。
进一步的,所述路径规划模块30,还用于根据所述迷宫尺寸生成迷宫;依据所述前序遍历序列,根据所述顺序控制流跳表中的各跳表值对所述迷宫进行设置;在设置完成时,将所述迷宫中未设置部分进行填充,获得控制流迷宫。
进一步的,所述路径规划模块30,还用于根据所述乱序控制代码确定乱序控制流跳表;确定所述乱序控制流跳表中各跳表值对应的移动次数;根据各跳表值对应的移动次数为所述乱序控制代码规划迷宫路径。
进一步的,所述路径规划模块30,还用于在所述控制流迷宫中选取路径起点;对所述乱序控制流跳表中的跳表值进行遍历,将被遍历到的跳表值作为当前跳表值;根据所述当前跳表值在所述控制流迷宫中选取目标点;根据所述当前跳表值对应的移动次数确定选取移动点;根据所述路径起点、所述移动点及所述目标点确定所述当前跳表值对应的迷宫路径;将所述目标点作为新的路径起点,并返回所述遍历所述乱序控制流跳表,将被遍历到的跳表值作为当前跳表值的步骤;在所述乱序控制流跳表中各跳表值均被遍历过时,根据乱序控制流跳表中各跳表值对应的迷宫路径确定所述乱序控制代码对应的迷宫路径。
进一步的,所述代码加密模块40,还用于根据所述迷宫路径及所述控制流迷宫生成寻路函数;在所述乱序控制代码中添加寻路函数初始化代码;通过所述初始化代码将所述乱序控制代码中的跳表值替换为所述寻路函数,获得所述待加密代码对应的加密代码。
应当理解的是,以上仅为举例说明,对本发明的技术方案并不构成任何限定,在具体应用中,本领域的技术人员可以根据需要进行设置,本发明对此不做限制。
需要说明的是,以上所描述的工作流程仅仅是示意性的,并不对本发明的保护范围构成限定,在实际应用中,本领域的技术人员可以根据实际的需要选择其中的部分或者全部来实现本实施例方案的目的,此处不做限制。
另外,未在本实施例中详尽描述的技术细节,可参见本发明任意实施例所提供的代码加密方法,此处不再赘述。
此外,需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者系统不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者系统所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者系统中还存在另外的相同要素。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如只读存储器(Read Only Memory,ROM)/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
Claims (10)
1.一种代码加密方法,其特征在于,所述代码加密方法包括以下步骤:
对待加密代码中的函数控制代码进行平坦化处理,获得平坦化控制代码;
对所述平坦化控制代码进行乱序处理,获得乱序控制代码;
根据所述平坦化控制代码中的代码运行逻辑生成控制流迷宫,并为所述乱序控制代码规划迷宫路径;
基于所述迷宫路径及所述控制流迷宫对所述乱序控制代码进行加密,获得所述待加密代码对应的加密代码。
2.如权利要求1所述的代码加密方法,其特征在于,所述根据所述平坦化控制代码中的代码运行逻辑生成控制流迷宫的步骤,包括:
根据所述平坦化控制代码中的代码运行逻辑确定顺序控制流跳表及迷宫尺寸;
对所述顺序控制流跳表中的跳表值进行遍历,获得前序遍历序列;
根据所述顺序控制流跳表、所述前序遍历序列及所述迷宫尺寸构建控制流迷宫。
3.如权利要求2所述的代码加密方法,其特征在于,所述根据所述平坦化控制代码中的代码运行逻辑确定顺序控制流跳表及迷宫尺寸的步骤,包括:
读取所述平坦化控制代码中的代码运行逻辑,获得跳表值及各跳表值对应的跳转逻辑;
根据所述跳表值及各跳表值对应的跳转逻辑构建顺序控制流跳表;
获取所述顺序控制流跳表的跳表长度,根据所述跳表长度确定迷宫尺寸。
4.如权利要求2所述的代码加密方法,其特征在于,所述根据所述顺序控制流跳表、所述前序遍历序列及所述迷宫尺寸构建控制流迷宫的步骤,包括:
根据所述迷宫尺寸生成迷宫;
依据所述前序遍历序列,根据所述顺序控制流跳表中的各跳表值对所述迷宫进行设置;
在设置完成时,将所述迷宫中未设置部分进行填充,获得控制流迷宫。
5.如权利要求1所述的代码加密方法,其特征在于,所述为所述乱序控制代码规划迷宫路径的步骤,包括:
根据所述乱序控制代码确定乱序控制流跳表;
确定所述乱序控制流跳表中各跳表值对应的移动次数;
根据各跳表值对应的移动次数为所述乱序控制代码规划迷宫路径。
6.如权利要求5所述的代码加密方法,其特征在于,所述根据各跳表值对应的移动次数为所述乱序控制代码规划迷宫路径的步骤,包括:
在所述控制流迷宫中选取路径起点;
对所述乱序控制流跳表中的跳表值进行遍历,将被遍历到的跳表值作为当前跳表值;
根据所述当前跳表值在所述控制流迷宫中选取目标点;
根据所述当前跳表值对应的移动次数确定选取移动点;
根据所述路径起点、所述移动点及所述目标点确定所述当前跳表值对应的迷宫路径;
将所述目标点作为新的路径起点,并返回所述遍历所述乱序控制流跳表,将被遍历到的跳表值作为当前跳表值的步骤;
在所述乱序控制流跳表中各跳表值均被遍历过时,根据乱序控制流跳表中各跳表值对应的迷宫路径确定所述乱序控制代码对应的迷宫路径。
7.如权利要求1所述的代码加密方法,其特征在于,所述基于所述迷宫路径及所述控制流迷宫对所述乱序控制代码进行加密,获得所述待加密代码对应的加密代码的步骤,包括:
根据所述迷宫路径及所述控制流迷宫生成寻路函数;
在所述乱序控制代码中添加寻路函数初始化代码;
通过所述初始化代码将所述乱序控制代码中的跳表值替换为所述寻路函数,获得所述待加密代码对应的加密代码。
8.一种代码加密装置,其特征在于,所述代码加密装置包括以下模块:
代码定位模块,用于对待加密代码中的函数控制代码进行平坦化处理,获得平坦化控制代码;
代码乱序模块,用于对所述平坦化控制代码进行乱序处理,获得乱序控制代码;
路径规划模块,用于根据所述平坦化控制代码中的代码运行逻辑生成控制流迷宫,并为所述乱序控制代码规划迷宫路径;
代码加密模块,用于基于所述迷宫路径及所述控制流迷宫对所述乱序控制代码进行加密,获得所述待加密代码对应的加密代码。
9.一种代码加密设备,其特征在于,所述代码加密设备包括:处理器、存储器及存储在所述存储器上并可在所述处理器上运行的代码加密程序,所述代码加密程序被处理器执行时实现如权利要求1-7中任一项所述的代码加密方法的步骤。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有代码加密程序,所述代码加密程序执行时实现如权利要求1-7中任一项所述的代码加密方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110965126.2A CN113836545A (zh) | 2021-08-20 | 2021-08-20 | 代码加密方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110965126.2A CN113836545A (zh) | 2021-08-20 | 2021-08-20 | 代码加密方法、装置、设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113836545A true CN113836545A (zh) | 2021-12-24 |
Family
ID=78961084
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110965126.2A Pending CN113836545A (zh) | 2021-08-20 | 2021-08-20 | 代码加密方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113836545A (zh) |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5081675A (en) * | 1989-11-13 | 1992-01-14 | Kitti Kittirutsunetorn | System for protection of software in memory against unauthorized use |
EP1309905A2 (en) * | 2000-04-12 | 2003-05-14 | Cloakware Corporation | Tamper resistant software |
US20050183072A1 (en) * | 1999-07-29 | 2005-08-18 | Intertrust Technologies Corporation | Software self-defense systems and methods |
US20060253687A1 (en) * | 2005-05-09 | 2006-11-09 | Microsoft Corporation | Overlapped code obfuscation |
US20090049550A1 (en) * | 2007-06-18 | 2009-02-19 | Pc Tools Technology Pty Ltd | Method of detecting and blocking malicious activity |
WO2013068217A1 (de) * | 2011-11-08 | 2013-05-16 | Siemens Aktiengesellschaft | Verfahren zum schutz gegen reverse-engineering eines computerprogramms |
US20140108786A1 (en) * | 2011-03-11 | 2014-04-17 | Emsycon Gmbh | Tamper-protected hardware and method for using same |
WO2020188546A1 (en) * | 2019-03-21 | 2020-09-24 | Cryptometry Canada Inc. | Detection and prevention of reverse engineering of computer programs |
CN112115427A (zh) * | 2020-08-14 | 2020-12-22 | 咪咕文化科技有限公司 | 代码混淆方法、装置、电子设备及存储介质 |
CN114329545A (zh) * | 2021-12-27 | 2022-04-12 | 中国电信股份有限公司 | 数据的加密方法及装置 |
-
2021
- 2021-08-20 CN CN202110965126.2A patent/CN113836545A/zh active Pending
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5081675A (en) * | 1989-11-13 | 1992-01-14 | Kitti Kittirutsunetorn | System for protection of software in memory against unauthorized use |
US20050183072A1 (en) * | 1999-07-29 | 2005-08-18 | Intertrust Technologies Corporation | Software self-defense systems and methods |
EP1309905A2 (en) * | 2000-04-12 | 2003-05-14 | Cloakware Corporation | Tamper resistant software |
US20060253687A1 (en) * | 2005-05-09 | 2006-11-09 | Microsoft Corporation | Overlapped code obfuscation |
US20090049550A1 (en) * | 2007-06-18 | 2009-02-19 | Pc Tools Technology Pty Ltd | Method of detecting and blocking malicious activity |
US20140108786A1 (en) * | 2011-03-11 | 2014-04-17 | Emsycon Gmbh | Tamper-protected hardware and method for using same |
WO2013068217A1 (de) * | 2011-11-08 | 2013-05-16 | Siemens Aktiengesellschaft | Verfahren zum schutz gegen reverse-engineering eines computerprogramms |
WO2020188546A1 (en) * | 2019-03-21 | 2020-09-24 | Cryptometry Canada Inc. | Detection and prevention of reverse engineering of computer programs |
CN112115427A (zh) * | 2020-08-14 | 2020-12-22 | 咪咕文化科技有限公司 | 代码混淆方法、装置、电子设备及存储介质 |
CN114329545A (zh) * | 2021-12-27 | 2022-04-12 | 中国电信股份有限公司 | 数据的加密方法及装置 |
Non-Patent Citations (6)
Title |
---|
PRATIK KANANI等: "Obfuscation: Maze of code", 2017 2ND INTERNATIONAL CONFERENCE ON COMMUNICATION SYSTEMS, COMPUTING AND IT APPLICATIONS (CSCITA), 16 October 2017 (2017-10-16), pages 11 - 16 * |
吴极等: "反调试技术综述", 信息技术与网络安全, vol. 38, no. 9, 10 September 2019 (2019-09-10), pages 5 - 13 * |
李向东等: "恶意代码检测技术及其在等级保护工作中的应用", 信息网络安全, no. 8, 10 August 2012 (2012-08-10), pages 164 - 166 * |
袁淑丹;黎成;任子亭;: "软件保护的分析与思考", 电脑知识与技术, no. 34, 5 December 2014 (2014-12-05), pages 8180 - 8181 * |
郑琪: "面向Android智能手机终端应用程序的代码混淆算法研究与实现", 中国优秀硕士学位论文全文数据库 信息科技辑, no. 8, 15 August 2015 (2015-08-15), pages 138 - 95 * |
郑琪: "面向Android智能手机终端应用程序的代码混淆算法研究与实现", 中国优秀硕士学位论文全文数据库, no. 08, 15 August 2015 (2015-08-15), pages 138 - 95 * |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102107872B1 (ko) | 컴파일러 기반 난독화 기법 | |
JP6227772B2 (ja) | 動的ライブラリを保護する方法及び装置 | |
RU2439669C2 (ru) | Способ предотвращения обратного инжиниринга программного обеспечения, неавторизованной модификации и перехвата данных во время выполнения | |
US10599820B2 (en) | Control flow flattening for code obfuscation where the next block calculation needs run-time information | |
CN103827880A (zh) | 保护非本机代码安全的方法 | |
CN104680039A (zh) | 一种应用程序安装包的数据保护方法及装置 | |
US8904492B2 (en) | Method of controlling information processing system, computer-readable recording medium storing program for controlling apparatus | |
US20170068804A1 (en) | Method for Protecting a Computer Program From Being Influenced, and Computer System | |
US11403372B2 (en) | Systems, methods, and storage media for obfuscating a computer program by representing the control flow of the computer program as data | |
EP3729306B1 (en) | Compiling device and method | |
EP2937803B1 (en) | Control flow flattening for code obfuscation where the next block calculation needs run-time information | |
Madkour et al. | Securing mobile-agent-based systems against malicious hosts | |
CN106209346A (zh) | 白盒密码技术交错查找表 | |
CN1742247A (zh) | 用于加密的应用程序安装的结构 | |
CN108182358B (zh) | 文件保护方法、装置、计算设备及计算机存储介质 | |
CN113836545A (zh) | 代码加密方法、装置、设备及存储介质 | |
CN108021790B (zh) | 文件保护方法、装置、计算设备及计算机存储介质 | |
Seifi et al. | Analysis of two authorization protocols using Colored Petri Nets | |
CN105095698B (zh) | 基于最近执行的程序代码的程序代码模糊处理 | |
Fortuna et al. | A framework for web application integrity | |
Cerutti et al. | Looking for criminal intents in javascript obfuscated code | |
CN113282892A (zh) | 代码混淆方法、装置、计算机设备和存储介质 | |
JP5277825B2 (ja) | プログラム難読化装置及び難読化プログラム | |
Lashermes et al. | Hardware-assisted program execution integrity: Hapei | |
Rodríguez‐Veliz et al. | Call graph obfuscation and diversification: an approach |
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 |