CN106548046B - 一种保护代码的装置和方法 - Google Patents
一种保护代码的装置和方法 Download PDFInfo
- Publication number
- CN106548046B CN106548046B CN201610941870.8A CN201610941870A CN106548046B CN 106548046 B CN106548046 B CN 106548046B CN 201610941870 A CN201610941870 A CN 201610941870A CN 106548046 B CN106548046 B CN 106548046B
- Authority
- CN
- China
- Prior art keywords
- source code
- functional module
- code
- module
- protecting
- 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 31
- 230000008569 process Effects 0.000 claims description 7
- 230000006870 function Effects 0.000 description 23
- 239000012634 fragment Substances 0.000 description 4
- 230000008859 change Effects 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000008901 benefit 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/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
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Multimedia (AREA)
- Computer Hardware Design (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Technology Law (AREA)
- Stored Programmes (AREA)
- Storage Device Security (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明提供了一种保护代码的装置和方法,其包括:保护部件,其配置为对从源代码中选择的功能模块进行编译处理,以将所述功能模块编译成字节码形式,并配置为将编译处理后的功能模块嵌入至所述源代码中形成新的源代码;执行部件,其配置为解释执行所述新的源代码。本发明具有安全强度高,处理速度快的特点。
Description
技术领域
本发明涉及软件保护领域,特别涉及一种保护代码的装置和方法。
背景技术
目前,现有的脚本语言保护流程通常是在源代码中安插标签,并对添加标签的代码执行编译链接以生成目标程序,也可以再通过添加外壳进一步加强代码的安全性。但是上述添加外壳的方式,在不同平台下会受到限制,影响代码的适用性。
发明内容
本发明实施例提供了一种可以实现代码的快速保护且不受使用平台的限制的保护代码的装置和方法。
为了解决上述技术问题,本发明实施例提供了如下的技术方案:
本发明提供了一种保护代码的装置,其包括:
保护部件,其配置为对从源代码中选择的功能模块进行编译处理,以将所述功能模块编译成字节码形式,并配置为将编译处理后的功能模块嵌入至所述源代码中形成新的源代码;
执行部件,其配置为解释执行所述新的源代码。
作为优选,所述保护部件还配置为利用预设算法对编译处理后的功能模块执行加密处理,并将编译处理和加密处理后的功能模块嵌入至所述源代码中形成新的源代码。
作为优选,所述预设算法包括AES算法和/或RC4算法。
作为优选,所述执行部件还进一步配置为对新的源代码中经过加密处理的功能模块进行解密处理,并解释执行包括解密处理后的功能模块的源代码。
作为优选,所述保护部件还配置为在对所述功能模块执行编译处理之前还执行:在不改变所述源代码的功能的条件下,对所述源代码中除了所述功能模块之外的部分增加花指令或改变参数逻辑关系。
作为优选,所述装置还包括存储部件,其配置为将所述新的源代码存储到预设的目录下。
作为优选,所述字节码包括二进制字节码。
本发明还提供了一种保护代码的方法,其包括以下步骤:
S10:从源代码中提取选择的功能模块;
S20:对所述功能模块进行编译,以将所述功能模块编译成字节码形式;
S30:将编译后的功能模块嵌入至源代码中,以形成新的源代码。
作为优选,还包括步骤S40:解释执行所述新的源代码。
作为优选,步骤S20进一步配置为:将所述功能模块编译成字节码形式,并对编译后的功能模块进行加密处理;
步骤S30进一步配置为:将编译和加密处理后的功能模块嵌入至所述源代码中,以形成新的源代码。
作为优选,步骤S40进一步包括:
S41:解密所述新的源代码中经过加密处理的功能模块;
S42;解释执行经步骤S41处理后的新的源代码。
作为优选,步骤S10或步骤S20之前还进一步包括:在不改变所述源代码的功能的条件下,对所述源代码中除了所述功能模块之外的部分增加花指令或改变参数逻辑关系。
作为优选,步骤S30还进一步包括将所述新的源代码存储到预设目录下。
与现有技术相比,本发明实施例的有益效果在于:
1.本发明实施例可以解决添加外壳的方式所受到的平台或其他方面的限制问题,即本发明实施例可以不受不同平台的影响,实用性和适用性更强,可以作为外壳保护方式的替代方案;
2.本发明实施例可以在达到较高安全强度的目标的同时利用较少的开发成本;
3.本发明实施例不会在代码中添加标签或其他标记,对原本代码改动较小。
附图说明
图1为本发明实施例中的一种保护代码的装置的原理结构示意图;
图2为本发明实施例中的一种保护代码的方法的流程图;
图3为本发明另一实施例中的一种保护代码的方法的流程图;
图4为图3中步骤S40的方法流程图。
附图标记说明
1-保护部件 2-执行部件
11-编译模块 12-加密模块
13-处理模块
具体实施方式
下面,结合附图对本发明的具体实施例进行详细的描述,但本发明不限于此。
本发明的实施例提供了一种保护代码的装置和方法,其可以通过将选取自代码中的重要功能模块编译成字节码形式,以加大破译难度,而且还具有处理速度快的特点,相较于加壳保护的方式,不受不同平台的限制,适用性更强。
如图1所示,为本发明实施例中的一种保护代码的装置的原理结构示意图。其中,本发明实施例的保护代码的装置可以包括保护部件1和执行部件2。保护部件1用于对代码的源代码中的一部分进行处理,以增强其安全防护性能,执行部件2用于解释执行经处理后的代码。
具体的,本实施例中的保护部件1可以对从源代码中选择的功能模块进行编译处理,以将功能模块编译成字节码形式,并且还将编译处理后的功能模块嵌入至源代码中形成新的源代码。
其中,功能模块是指源代码中的功能函数模块,所选择的功能模块一般是代码中较为重要的功能函数模块,而且选择该功能模块的方式可以是根据预先设定的函数名称、参数、地址等信息来进行选择。对功能模块的选择可以是由保护部件1执行的,也可以通过其他的方式将选择出功能模块输入至保护部件1进行相应的处理,本领域的技术人员可以根据不同的需求自行设定。
另外,本实施例中保护部件1可以将选择出的功能模块编译成字节码形式,如二进制字节码,也可以是其他的字节码形式,如八进制字节码、十进制字节码或者带有特定符号的字节码形式,以加大保护强度,增强破译难度。
在本发明一个实施例中,保护部件1还可以在对选择的功能模块执行编译处理之前执行:在不改变源代码的功能的条件下,在源代码中除了选择的功能模块之外的部分代码中增加花指令或改变参数逻辑关系。这里所说的花指令是对源代码本身的功能配置没有影响的,例如可以调整源代码的代码长度的指令,其会给破译带来干扰。同时,改变参数逻辑关系也可以改变代码段的长度,进一步增加破译时间和难度。而且,该部分的功能配置可以通过保护部件1中的处理模块13执行,即处理模块13可以在源代码中的部分代码中增加花指令或改变参数逻辑关系。
进一步的,在一优选实施例中,保护部件1还可以利用预设算法对编译处理后的功能模块执行加密处理,并将经过编译处理和加密处理后的功能模块嵌入至源代码中形成新的源代码。
也就是说,本实施例中的保护部件1可以包括执行编译处理的编译模块11和执行加密处理的加密模块12。编译模块11用于将选择出的功能模块编译成字节码形式,而加密模块12可以将编译模块11编译处理后的功能模块执行加密处理,其用于加密的预设算法可以是AES算法、RC4算法等,也可以使用两种或两种以上的预设算法同时对编译处理后的功能模块执行加密处理,并将经过编译和加密后的功能模块嵌入至源代码中形成新的源代码。该新的源代码由于其中重要的功能模块已经经过编译和加密处理,并且编译后的功能模块为字节码形式,其安全性能更高,且由于处理的方式不会受到不同的平台系统限制,方便使用,且处理速度更快。
例如,本实施例中的实现特定功能的原始代码即源代码可以是如下形式,其中可以包括多个重要代码片段,在对该代码进行编译时,可以将各重要代码片段作为选择的功能模块进行编译处理,以有效的保护重要的源代码。
原始代码:
//重要代码片段1
func1()
{
...
}
//重要代码片段2
func2()
{
...
...
}
//主函数
int main()
{
...
...
func1();//代码片段1调用
...
...
Func2();//代码片段2调用
...
...
}
而在经过编译模块11编译处理和加密模块22加密处理后,可以生成包括经编译和加密处理的字节码形式的功能模块的新的源代码。
另外,本发明实施例中的执行部件2在解释执行新的源代码时还需要对该新的源代码中经过加密处理的功能模块进行解密处理,并解释执行包括解密处理后的功能模块的源代码。
进一步的,本发明实施例中的保护代码的装置还可以包括存储部件3,该存储部件3可以将保护部件1处理生成的新的源代码存储到预设的目录下。本实施例中所述的预设目录可以是计算机本地的任意存储目录,也可以是作为服务器端的地址目录,或者是网络端的网盘、网址目录,本领域的技术人员可以根据需求自行设置。
综上所述,本发明实施例提供的保护代码的装置可以实现代码的保护,且具有不受应用平台限制的优点,安全强度更高。
另外,本发明实施例还提供了一种保护代码的方法,如图2所示,为本发明实施中的保护代码的方法的流程图,其中,该方法可以包括以下步骤:
S10:从源代码中提取选择的功能模块;
本实施例中所选择的功能模块一般是源代码中较为重要的功能函数模块,而且选择功能模块的方式可以是根据预先设定的函数名称、参数、地址等信息来进行选择,本领域的技术人员可以根据不同的需求自行设定。
S20:对功能模块进行编译,以将功能模块编译成字节码形式;
本实施例中,可以将选择出的功能模块编译成字节码形式,如二进制字节码,也可以是其他的字节码形式,例如八进制字节码、十进制字节码或者带有特定符号的字节码形式,以加大保护强度,增强破译难度。
S30:将编译后的功能模块嵌入至源代码中,以形成新的源代码。由于新的源代码中包括字节码形式的功能模块,其可以有效的提高代码的安全强度。
另外,步骤S30还可以进一步包括将新的源代码存储到预设目录下。本实施例中所述的预设目录可以是计算机本地的任意存储目录,也可以是作为服务器端的地址目录,或者是网络端的网盘、网址目录,本领域的技术人员可以根据需求自行设置。
在本发明的实施例中,还可以执行对于新的源代码的解释执行步骤,即在步骤S30之后还可以包括步骤S40:解释执行新的源代码,以实现的功能配置。
优选的,本发明实施例中,在步骤S10或S20之前,还可以在不改变源代码的功能的条件下,对源代码中除了功能模块之外的部分增加花指令或改变参数逻辑关系。这里所说的花指令是对源代码本身的功能配置没有影响的,例如可以调整源代码的代码长度的指令,其会给破译带来干扰。同时,改变参数逻辑关系也可以改变代码段的长度,进一步增加破译时间和难度。
如图3所示,为本发明另一实施例中的保护代码的方法,其中的步骤S20还可以进一步配置为:将功能模块编译成字节码形式,并对编译后的功能模块进行加密处理。对应的步骤S30可以进一步配置为:将编译和加密处理后的功能模块嵌入至源代码中,以形成新的源代码。
本实施例中加密处理所应用的预设算法可以是AES算法、RC4算法等,也可以使用两种或两种以上的预设算法同时对编译处理后的功能模块执行加密。而且新的源代码由于其中重要的功能模块已经经过编译和加密处理,其安全性能更高,且由于处理的方式不会受到不同的平台系统限制,方便使用,且处理速度更快。
如图4所示,为本发明实施例图3中步骤S40的方法流程图,其中步骤S40可以进一步包括:
S41:解密出新的源代码中经过加密处理的功能模块;
S42;解释执行经步骤S41处理后的新的源代码。
其中,在解释执行新的源代码时,将编译后生成的字节码形式的功能模块解析成对应的代码段,以实现代码的功能配置。
综上所述,本发明实施例中的保护代码的装置和方法,可以通过将选择出的功能模块编译成字节码形式,以增加破译难度,保护性能更强;而且还不受不同应用平台的限制,适用性更好。
以上实施例仅为本发明的示例性实施例,不用于限制本发明,本发明的保护范围由权利要求书限定。本领域技术人员可以在本发明的实质和保护范围内,对本发明做出各种修改或等同替换,这种修改或等同替换也应视为落在本发明的保护范围内。
Claims (13)
1.一种保护代码的装置,其特征在于,包括:
保护部件,其配置为对从源代码中选择的功能模块进行编译处理,以将所述功能模块编译成字节码形式,并配置为将编译处理后的功能模块嵌入至所述源代码中形成新的源代码,其中,所述功能模块是指所述源代码中的功能函数模块,根据预先设定的信息来选择所述功能模块;
执行部件,其配置为解释执行所述新的源代码,
其中,所述保护部件还配置为在对所述功能模块执行编译处理之前还执行:在不改变所述源代码的功能的条件下,对所述源代码中除了所述功能模块之外的部分改变参数逻辑关系。
2.根据权利要求1所述的保护代码的装置,其特征在于,所述保护部件还配置为利用预设算法对编译处理后的功能模块执行加密处理,并将编译处理和加密处理后的功能模块嵌入至所述源代码中形成新的源代码。
3.根据权利要求2所述的保护代码的装置,其特征在于,所述预设算法包括AES算法和/或RC4算法。
4.根据权利要求2所述的保护代码的装置,其特征在于,所述执行部件还进一步配置为对新的源代码中经过加密处理的功能模块进行解密处理,并解释执行包括解密处理后的功能模块的源代码。
5.根据权利要求1至4中任一项所述的保护代码的装置,其特征在于,所述保护部件还配置为在对所述功能模块执行编译处理之前还执行:在不改变所述源代码的功能的条件下,对所述源代码中除了所述功能模块之外的部分增加花指令。
6.根据权利要求1至4中任一项所述的保护代码的装置,其特征在于,所述装置还包括存储部件,其配置为将所述新的源代码存储到预设的目录下。
7.根据权利要求1至4中任一项所述的保护代码的装置,其特征在于,所述字节码包括二进制字节码。
8.一种保护代码的方法,其特征在于,包括以下步骤:
S10:从源代码中提取选择的功能模块,其中,所述功能模块是指所述源代码中的功能函数模块,根据预先设定的信息来选择所述功能模块;
S20:对所述功能模块进行编译,以将所述功能模块编译成字节码形式;
S30:将编译后的功能模块嵌入至源代码中,以形成新的源代码;
步骤S10或步骤S20之前还进一步包括:在不改变所述源代码的功能的条件下,对所述源代码中除了所述功能模块之外的部分改变参数逻辑关系。
9.根据权利要求8所述的方法,其特征在于,还包括步骤S40:解释执行所述新的源代码。
10.根据权利要求9所述的方法,其特征在于,步骤S20进一步配置为:将所述功能模块编译成字节码形式,并对编译后的功能模块进行加密处理;
步骤S30进一步配置为:将编译和加密处理后的功能模块嵌入至所述源代码中,以形成新的源代码。
11.根据权利要求10所述的方法,其特征在于,步骤S40进一步包括:
S41:解密所述新的源代码中经过加密处理的功能模块;
S42;解释执行经步骤S41处理后的新的源代码。
12.根据权利要求8所述的方法,其特征在于,步骤S10或步骤S20之前还进一步包括:在不改变所述源代码的功能的条件下,对所述源代码中除了所述功能模块之外的部分增加花指令。
13.根据权利要求8所述的方法,其特征在于,步骤S30还进一步包括将所述新的源代码存储到预设目录下。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610941870.8A CN106548046B (zh) | 2016-10-25 | 2016-10-25 | 一种保护代码的装置和方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610941870.8A CN106548046B (zh) | 2016-10-25 | 2016-10-25 | 一种保护代码的装置和方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106548046A CN106548046A (zh) | 2017-03-29 |
CN106548046B true CN106548046B (zh) | 2020-11-20 |
Family
ID=58392128
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610941870.8A Active CN106548046B (zh) | 2016-10-25 | 2016-10-25 | 一种保护代码的装置和方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106548046B (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108804880B (zh) * | 2017-04-28 | 2020-07-10 | 中移(杭州)信息技术有限公司 | 一种软件生成方法和装置 |
CN109101237A (zh) * | 2018-08-01 | 2018-12-28 | 北京顶象技术有限公司 | 代码的加密编译方法及装置 |
CN109711119A (zh) * | 2018-12-29 | 2019-05-03 | 360企业安全技术(珠海)有限公司 | 加密代码的运行方法及装置、存储介质、终端 |
CN110147238B (zh) * | 2019-05-29 | 2022-11-11 | 中国人民解放军战略支援部队信息工程大学 | 一种程序编译方法、装置及系统 |
CN112182513A (zh) * | 2019-07-05 | 2021-01-05 | 航天云网科技发展有限责任公司 | JavaScript代码处理方法及装置 |
CN112241519A (zh) * | 2020-11-05 | 2021-01-19 | 王志平 | 一种软件版权保护的实现方法 |
CN112613023B (zh) * | 2020-12-28 | 2023-04-28 | 厦门市美亚柏科信息股份有限公司 | 一种认证信息生成算法的保护方法和终端 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
DE102009004276A1 (de) * | 2009-01-05 | 2010-07-08 | Core Mountains Gmbh | Byte Coat: Nativer Bytcode Compiler für die Programmiersprache Python |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100346255C (zh) * | 2005-10-19 | 2007-10-31 | 北京飞天诚信科技有限公司 | 提取部分代码至加密装置中的软件版权保护方法 |
US8713546B2 (en) * | 2006-12-18 | 2014-04-29 | Oracle International Corporation | System and method for redundant array copy removal in a pointer-free language |
DE602007004587D1 (de) * | 2007-06-29 | 2010-03-18 | Ericsson Telefon Ab L M | Verschleierung von Ausführungsspuren eines Computerprogrammcodes |
CN103218549B (zh) * | 2012-01-19 | 2015-11-25 | 阿里巴巴集团控股有限公司 | 一种Java源代码加解密的方法及装置 |
CN103116489A (zh) * | 2012-11-15 | 2013-05-22 | 深圳中兴网信科技有限公司 | 注册码获取装置和注册码获取方法 |
WO2014087407A1 (en) * | 2012-12-06 | 2014-06-12 | Integrity Project Ltd | System and methods thereof for safe compilation of code into embedded processing systems |
CN104751024B (zh) * | 2013-12-27 | 2018-10-19 | 腾讯科技(深圳)有限公司 | 一种对核心源代码进行加密的方法及装置 |
CN104102860A (zh) * | 2014-08-11 | 2014-10-15 | 北京奇虎科技有限公司 | 安卓平台应用程序的保护方法、运行方法、装置及系统 |
CN105205359B (zh) * | 2015-10-12 | 2018-11-23 | 厦门飞信网络科技有限公司 | 一种JavaScript代码保护方法及装置 |
CN106548079A (zh) * | 2016-10-26 | 2017-03-29 | 安徽扬远信息科技有限公司 | 基于密码系统芯片的附加子系统集成方法 |
-
2016
- 2016-10-25 CN CN201610941870.8A patent/CN106548046B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
DE102009004276A1 (de) * | 2009-01-05 | 2010-07-08 | Core Mountains Gmbh | Byte Coat: Nativer Bytcode Compiler für die Programmiersprache Python |
Also Published As
Publication number | Publication date |
---|---|
CN106548046A (zh) | 2017-03-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106548046B (zh) | 一种保护代码的装置和方法 | |
JP5996809B2 (ja) | コード難読化装置及びその方法 | |
US9396313B2 (en) | Apparatus for tamper protection of application code and method thereof | |
CN106599628B (zh) | 一种基于模块钩子的Python字节码文件保护方法 | |
US20160203087A1 (en) | Method for providing security for common intermediate language-based program | |
KR101861341B1 (ko) | 애플리케이션 코드의 역난독화 장치 및 이를 이용한 애플리케이션 코드의 역난독화 방법 | |
CN106126981B (zh) | 基于虚拟函数表替换的软件安全防护方法 | |
CN104680039B (zh) | 一种应用程序安装包的数据保护方法及装置 | |
CN108399319B (zh) | 源代码保护方法、应用服务器及计算机可读存储介质 | |
CN109284585B (zh) | 一种脚本加密方法、脚本解密运行方法和相关装置 | |
CN102236757A (zh) | 一种适用于Android系统的软件保护方法及系统 | |
CN107273723B (zh) | 一种基于so文件加壳的Android平台应用软件保护方法 | |
CN106415491B (zh) | 一种应用保护方法、服务器以及终端 | |
JP2017513077A (ja) | 見分けが難解な識別子変換を用いたコード難読化装置及び方法 | |
US10380329B2 (en) | Method and apparatus for preventing application from being deciphered | |
CN110147653B (zh) | 应用程序安全加固方法及装置 | |
CN104657635A (zh) | 一种应用处理方法、装置和服务器 | |
CN108182358B (zh) | 文件保护方法、装置、计算设备及计算机存储介质 | |
CN107257282A (zh) | 一种基于rc4算法的代码全包加密方法 | |
CN106971111A (zh) | 数据加密方法、终端及服务器 | |
CN109992974B (zh) | 虚拟机字节码文件的保护方法、设备及可读存储介质 | |
KR20140139392A (ko) | 모바일 장치를 위한 애플리케이션 실행 파일 생성방법, 모바일 장치의 애플리케이션 실행 방법, 애플리케이션 실행 파일 생성 장치 및 모바일 장치 | |
CN117093964A (zh) | 一种源代码的加密方法、装置、存储介质及电子设备 | |
CN108021790B (zh) | 文件保护方法、装置、计算设备及计算机存储介质 | |
CN115964681A (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 | ||
TA01 | Transfer of patent application right | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20201019 Address after: Room 124, 1 / F, building 2, yard 9, jiaogezhuang street, Nanfaxin Town, Shunyi District, Beijing Applicant after: Beijing Wikipedia Technology Co.,Ltd. Address before: 100193, No. 5, building 5, east 10, East Hospital, No. 510 Wang Dong Road, Beijing, Haidian District Applicant before: BEIJING SENSE SHUDUN TECHNOLOGY Co.,Ltd. |
|
GR01 | Patent grant | ||
GR01 | Patent grant |