CN107977553A - 移动应用程序的安全加固的方法及装置 - Google Patents
移动应用程序的安全加固的方法及装置 Download PDFInfo
- Publication number
- CN107977553A CN107977553A CN201711422051.3A CN201711422051A CN107977553A CN 107977553 A CN107977553 A CN 107977553A CN 201711422051 A CN201711422051 A CN 201711422051A CN 107977553 A CN107977553 A CN 107977553A
- Authority
- CN
- China
- Prior art keywords
- files
- mobile applications
- code
- reinforced
- dex
- 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.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 90
- 230000008859 change Effects 0.000 claims abstract description 28
- 230000003014 reinforcing effect Effects 0.000 claims abstract description 16
- 230000007246 mechanism Effects 0.000 claims abstract description 12
- 230000006870 function Effects 0.000 claims description 22
- 239000007787 solid Substances 0.000 claims description 22
- 238000004590 computer program Methods 0.000 claims description 14
- 238000011084 recovery Methods 0.000 claims description 12
- 238000004422 calculation algorithm Methods 0.000 claims description 9
- 238000011068 loading method Methods 0.000 claims description 9
- 230000006837 decompression Effects 0.000 claims description 6
- 238000004364 calculation method Methods 0.000 claims 2
- 238000005516 engineering process Methods 0.000 abstract description 10
- 230000000694 effects Effects 0.000 abstract description 8
- 230000008569 process Effects 0.000 description 8
- 230000009467 reduction Effects 0.000 description 6
- 230000009286 beneficial effect Effects 0.000 description 4
- 230000008901 benefit Effects 0.000 description 4
- 230000004048 modification Effects 0.000 description 4
- 238000000926 separation method Methods 0.000 description 4
- 238000010586 diagram Methods 0.000 description 3
- 238000004806 packaging method and process Methods 0.000 description 3
- 238000001514 detection method Methods 0.000 description 2
- 238000000605 extraction Methods 0.000 description 2
- 238000003780 insertion Methods 0.000 description 2
- 230000037431 insertion Effects 0.000 description 2
- 238000012163 sequencing technique Methods 0.000 description 2
- 238000012795 verification Methods 0.000 description 2
- 241000208340 Araliaceae Species 0.000 description 1
- 206010049669 Dyscalculia Diseases 0.000 description 1
- 235000005035 Panax pseudoginseng ssp. pseudoginseng Nutrition 0.000 description 1
- 235000003140 Panax quinquefolius Nutrition 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 235000013399 edible fruits Nutrition 0.000 description 1
- 238000005265 energy consumption Methods 0.000 description 1
- 235000008434 ginseng Nutrition 0.000 description 1
- 230000000977 initiatory effect Effects 0.000 description 1
- 238000009434 installation Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 238000012856 packing Methods 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
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/14—Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Multimedia (AREA)
- Technology Law (AREA)
- Computer Hardware Design (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Storage Device Security (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种移动应用程序的安全加固的方法及装置,涉及计算机技术领域,该方法包括:对待加固的移动应用程序APK文件进行解压,获取待加固dex文件和Manifest文件;在待加固dex文件中,抽取待保护的类和方法的索引代码,并重写待保护的类和方法的程序入口代码;对索引代码进行加密,获取加密索引代码数据并进行单独存放;生成用于解密加密索引代码数据并动态还原索引代码的so库文件;在Manifest文件中更改用于读取程序入口代码的加载器的信息;对已加固dex文件、加密索引代码数据、so库文件和更改后Manifest文件重新打包,获得加固后APK文件;通过代码隐藏机制和数据加密技术,有效地防止攻击者进行反编译,从而达到防逆向效果,增加应用的安全性、机密性和可用性。
Description
技术领域
本发明涉及计算机技术领域,特别是涉及一种移动应用程序的安全加固方法及装置。
背景技术
目前,Android平台发展迅速,占据了当前移动智能终端的主流市场,由于Android系统开放源码的特性,由此带来的安全问题不可避免,其中Android应用程序基本使用Java语言进行开发,Java经过编译后生成dex文件,该文件经过反编译后,很容易可以看到程序的代码,该代码和源代码差异性很小,稍做修改就可以生成新的移动应用程序。因此攻击者将移动应用程序反编译后植入恶意代码,重新编译打包生成一个新的移动应用程序,上传到各大应用市场上供用户下载,则会形成一个盗版的移动应用程序或者是恶意的移动应用程序。
传统技术中的安全加固方法是基于代码混淆机制对Android应用的dex文件进行加固,以防止反编译。但是该安全加固方法难以得到上层函数和参数,很难提供良好的保护方式,并不能有效地保护应用在移动智能终端的应用程序中,导致操作系统性能缺乏可靠保障,提高了被攻击的风险。
发明内容
基于此,有必要针对移动应用程序的安全性、机密性和可用性的问题,本发明提供了一种移动应用程序的安全加固方法及装置。
本发明实施例中提供了一种移动应用程序的安全加固的方法,包括以下步骤:
对待加固的移动应用程序的APK文件进行解压,获取待加固dex文件和Manifest文件;
在所述待加固dex文件中,抽取待保护的类和方法的索引代码,并重写待保护的类和方法的程序入口代码,获得已加固dex文件;
对所述索引代码进行加密,获取加密索引代码数据并进行单独存放;
生成用于解密所述加密索引代码数据并动态还原所述索引代码的so库文件;
在所述Manifest文件中更改用于读取所述程序入口代码的加载器的信息;
利用签名工具对所述已加固dex文件、所述加密索引代码数据、所述so库文件和更改后的所述Manifest文件重新打包,获得加固后的所述APK文件。
相应地,本发明实施例中提供了一种移动应用程序的安全加固的装置,包括:
解压获取模块,用于对待加固的移动应用程序的APK文件进行解压,获取待加固dex文件和Manifest文件;
抽取重写模块,用于在所述待加固dex文件中,抽取待保护的类和方法的索引代码,并重写待保护的类和方法的程序入口代码,获得已加固dex文件;
加密模块,用于对所述索引代码进行加密,获取加密索引代码数据并进行单独存放;
生成模块,用于生成用于解密所述加密索引代码数据并动态还原所述索引代码的so库文件;
更改模块,用于在所述Manifest文件中更改用于读取所述程序入口代码的加载器的信息;
打包模块,用于利用签名工具对所述已加固dex文件、所述加密索引代码数据、所述so库文件和更改后的所述Manifest文件重新打包,获得加固后的所述APK文件。
相应地,本发明实施例中提供了一种可读存储介质,其上存储有计算机程序,该程序被处理器执行如上任意一项所述移动应用程序的安全加固方法的步骤。
相应地,本发明实施例中提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上任意一项所述移动应用程序的安全加固方法的步骤。
本发明实施例中还提供了一种移动应用程序的安全解固的方法,包括以下步骤:
在下载移动应用程序的APK文件之后,对所述APK文件进行解压,获取dex文件、加密索引代码数据、so库文件和Manifest文件;
运行所述so库文件,根据解密私钥调用解密库中的解密函数对所述加密索引代码数据进行解密,获得索引代码;
当所述Manifest文件中的加载器加载待保护的类和方法的程序入口代码时,根据安卓加载机制将所述索引代码动态恢复至所述dex文件中,并通过虚拟机执行恢复后的所述dex文件以运行所述移动应用程序。
相应地,本发明实施例中还提供了一种移动应用程序的安全解固的装置,包括:
解压模块,在下载移动应用程序的APK文件之后,对所述APK文件进行解压,获取dex文件、加密索引代码数据、so库文件和Manifest文件;
解密模块,用于运行所述so库文件,根据解密私钥调用解密库中的解密函数对所述加密索引代码数据进行解密,获得索引代码;
加载恢复模块,用于当所述Manifest文件中的加载器加载待保护的类和方法的程序入口代码时,根据安卓加载机制将所述索引代码动态恢复至所述dex文件中,并通过虚拟机执行恢复后的所述dex文件以运行所述移动应用程序。
相应地,本发明实施例中提供了一种可读存储介质,其上存储有计算机程序,该程序被处理器执行如上任意一项所述移动应用程序的安全解固方法的步骤。
相应地,本发明实施例中提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上任意一项所述移动应用程序的安全解固方法的步骤。
上述技术方案中的一个技术方案具有如下优点和有益效果:
本发明移动应用程序的安全加固的方法及装置,对待加固dex文件进行加固,并对索引代码进行加密,同时生成用于解密加密索引代码数据并动态还原索引代码的so库文件,且相应地更改Manifest文件中的加载器的信息;通过对代码进行隐藏以及数据加密处理,并通过动态还原索引代码有效地获得上层函数和参数,以保护源代码的运行逻辑,防止攻击者对二进制代码进行反编译,从而达到防逆向效果,增加移动应用程序的安全性、机密性和可用性。
附图说明
图1为本发明实施例中移动应用程序的安全加固的方法的第一流程图;
图2为本发明实施例中APK文件加固前后的对比示意图;
图3为本发明实施例中移动应用程序的安全加固的方法的第二流程图;
图4为本发明实施例中移动应用程序的安全加固的装置结构示意图;
图5为本发明实施例中移动应用程序的安全解固的方法的第一流程图;
图6为本发明实施例中移动应用程序的安全解固的方法的第二流程图;
图7为本发明实施例中移动应用程序的安全解固的装置结构示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下通过实施例,并结合附图,对本发明移动应用程序的安全加固的方法及装置进一步详细说明。
应当理解,除非另有定义,本文所使用的所有的技术和科学术语与属于本发明的技术领域的技术人员通常理解的含义相同。本文中在本发明的说明书中所使用的术语只是为了描述具体的实施例,并不是旨在限制本发明。
为此,本发明实施例中提供了一种移动应用程序的安全加固的方法,如图1和图2所示,包括以下步骤:
S110:对待加固的移动应用程序的APK文件进行解压,获取待加固dex文件和Manifest文件。
其中,APK(Android Package,安卓安装包)文件是安卓软件开发工具包编译的工程打包成用于安装应用程序的文件。
其中,待加固dex(DalvikVM executes,安卓Dalvik执行程序)文件是指通过虚拟机执行且用于运行应用程序的文件。
具体而言,通过对加固前的移动应用程序的APK文件进行解压后,可以获取待加固的dex文件和Manifest文件;其中,解压程序根据本发明各实施例中APK文件格式进行选择,如可使用zip压缩文件的解压缩程序(unzip)。
S120:在待加固dex文件中,抽取待保护的类和方法的索引代码,并重写待保护的类和方法的程序入口代码,获得已加固dex文件。
在本实施例中,对待保护的类和方法的索引代码进行抽取分离,由于索引代码的分离,防止攻击者通过反编译后找寻到索引代码;同时由于索引代码的分离改变了待保护的类和方法的加载逻辑,此时需要重写待保护的类和方法的程序入口代码,从而获得已加固dex文件。
S130:对索引代码进行加密,获取加密索引代码数据并进行单独存放。
如前所述,通过将索引代码抽取分离,对获得的索引代码进行加密,防止来自恶意攻击者的不法操作,包括非法复制、非授权使用、恶意修改软件代码逻辑或功能及通过逆向工程获取核心算法等。
同时,并获得的加密索引代码数据进行单独存放,使得攻击者无法在已加固dex文件找寻到索引代码,从而达到隐藏索引代码的目的。
S140:生成用于解密加密索引代码数据并动态还原索引代码的so库文件。
在本实施例中,由于对索引代码数据进行了加密,同时还将索引代码与待保护的类和方法进行抽取分离,因此生成用于解密加密索引代码数据并动态还原索引代码的so库文件。
S150:在Manifest文件中更改用于读取程序入口代码的加载器的信息。
在本实施例中,由于更改了加载逻辑,需要对应地更改用于读取程序入口代码的加载器的信息;根据更改后的加载器信息,获得更改后的专为移动应用程序定制的加载器,实现按需加载。
S160:利用签名工具对已加固dex文件、加密索引代码数据、so库文件和更改后的Manifest文件重新打包,获得加固后的APK文件。
传统技术中各个安全加固的方法是基于代码混淆机制对Android应用的dex文件进行加固,以防止反编译,但是该安全加固方法难以得到上层函数和参数,很难提供良好的保护方式;同时,当终端应用需调用系统级别的服务时,可能会使得应用无法正常启动;并不能有效地保护应用在移动智能终端的应用程序中,导致操作系统性能缺乏可靠保障,提高了被攻击的风险。
而本发明移动应用程序的安全加固的方法及装置各实施例,对待加固dex文件进行加固,并对索引代码进行加密,同时生成用于解密加密索引代码数据并动态还原索引代码的so库文件,且相应地更改Manifest文件中的加载器的信息;基于加密技术和代码隐藏机制,对移动应用程序实现高强度的安全加固,以保护源代码的运行逻辑,防止攻击者对二进制代码进行反编译,从而达到防逆向效果,增加移动应用程序的安全性、机密性和可用性。
在一个实施例中,通过椭圆曲线加密算法对索引代码进行加密。
其中,椭圆曲线加密算法(ECC算法)是一种公钥加密体制,其数学基础是利用椭圆曲线上的有理点构成Abel加法群上椭圆离散对数的计算困难性,具有安全性高、计算负载小、密钥长度小和占用带宽少等优点。
具体而言,为每一个移动应用程序生成唯一的密钥对,使用公钥对移动应用程序的索引代码进行快速、高强度加密,并把相应的解密私钥存放在云端。
具体地,应用椭圆曲线算法具体加密过程如下:
1、密钥生成
1.1、选择一条椭圆曲线T=(a,b,p,G,n),a,b,p值给定,选取一个基点G,n为点G的阶;
1.2、在区间[1,n-1]中随机选取一个整数d,生成公私钥对,私钥为d(d<n),公钥则为Q(Q=d*G)。
2、加密过程
2.1、获取公钥Q;将传输的索引代码m编码进椭圆曲线中;在区间[1,n-1]中随机选取一个整数k;计算出点C2=kG;
2.2、根据公钥计算点C1=m+kQ;得到加密数据(C1,C2)。
如上所述,由于ECC算法具有安全性高、计算负载小、密钥长度小和占用带宽少等优点,正好匹配移动智能终端的计算能力、能耗、内存容量和网络带宽,因此通过使用ECC算法对索引代码进行轻量级加密,可广泛应用在面向移动终端平台的应用程序上,能够提高dex文件的安全性。
此外,由于传统技术中的安全加固方法是针对PC机程序的基础上实现的,没有考虑到Android操作系统在移动互联网环境下的执行效率问题;而运用基于椭圆曲线加密算法的数据加密技术,针对移动应用软件的具体特征,是一种适合嵌入式智能终端平台的加密方案。
在一个实施例中,如图3所示,在利用签名工具对已加固dex文件、加密索引代码数据、so库文件和更改后的Manifest文件重新打包的步骤之前,还包括:
S310:在已加固dex文件中添加用于校验移动应用程序完整性和签名证书的防篡改功能代码。
在本实施例中,由于攻击者可以非法复制、非授权使用、恶意修改软件代码逻辑或功能及通过逆向工程获取核心算法和关键数据,但进行上述不法操作时,移动应用程序的代码和签名证书会发生改变,因此在已加固dex文件添加用于校验移动应用程序完整性和签名证书的防篡改功能代码。
需要说明的是,步骤S310应当处于在步骤S120之后,并在步骤S160之前,但与步骤S130、步骤S140和步骤S150的执行先后顺序不做限制。
如上所述,通过利用完整性保护和签名证书保护技术,对移动应用程序的完整性以及对应用开发者签名证书在应用程序运行过程中进行二次校验,增加软件或被篡改的难度,一旦被篡改能够即时感知并终止移动应用程序的运行,使盗版、插入恶意代码等行为难以为继。
在一个实施例中,如图3所示,在利用签名工具对已加固dex文件、加密索引代码数据、so库文件和更改后的Manifest文件重新打包的步骤之前,还包括:
S320:在so库文件中加入防调试代码,防调试代码用于防止恶意调试器对APK文件进行调试。
在本实施例中,由于修改了待保护的类和方法的加载逻辑,程序启动之前需要进行防调试检测,如果检测到恶意调试器的存在,则终止移动应用程序的运行。
需要说明的是,步骤S320应当处于在步骤S140之后,并在步骤S160之前,但与步骤S150的执行先后顺序不做限制。
如前所述,通过利用反调试技术,从调试器对抗和模拟器对抗两方面阻止移动应用程序在运行过程中被调试器跟踪;其中,调试器对抗是通过判断是否存在调试器来进行防调试保护,模拟器对抗是通过判断移动终端是否为模拟器来进行防调试保护。从而使攻击者无法调试APK文件的原生代码,具备抵御动态对抗的能力。
在一个实施例中,用于解密加密索引代码数据的解密私钥和用于验证移动应用程序完整性和签名证书的指纹信息保存在云端的加固服务器中。
具体而言,由于对索引代码进行加密,因此生成唯一的密钥对,使用公钥对移动应用程序索引代码进行快速、高强度加密,并把相应的解密私钥存放在云端的加固服务器中。
同理,用于验证移动应用程序完整性和签名证书的指纹信息也相应地存放在云端的加固服务器中,待进行安全解固时进行接收比对。
其中,指纹信息可以为MD5值,即移动应用程序和签名证书的MD5值具有唯一性,篡改文件其MD5值也相应变化,通过云端的加固服务器预先保持的MD5值与移动应用程序和签名证书的MD5值比对,可验证文件是否被篡改。
如上所述,将解密私钥和指纹信息存放在云端的加固服务器中,可有效地增加反编译的难度,增大移动应用程序的安全性。
相应地,本发明实施例中还提供了一种移动应用程序的安全加固的装置,如图4所示,包括:
解压获取模块410,用于对待加固的移动应用程序的APK文件进行解压,获取待加固dex文件和Manifest文件;
抽取重写模块420,用于在待加固dex文件中,抽取待保护的类和方法的索引代码,并重写待保护的类和方法的程序入口代码,获得已加固dex文件;
加密模块430,用于对索引代码进行加密,获取加密索引代码数据并进行单独存放;
生成模块440,用于生成用于解密加密索引代码数据并动态还原索引代码的so库文件;
更改模块450,用于在Manifest文件中更改用于读取程序入口代码的加载器的信息;
打包模块460,用于利用签名工具对已加固dex文件、加密索引代码数据、so库文件和更改后的Manifest文件重新打包,获得加固后的APK文件。
上述移动应用程序的安全加固的装置可执行本发明实施例所提供的移动应用程序的安全加固的方法,具备执行方法相应的功能模块和有益效果。
此外,本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一非易失性的计算机可读取存储介质中,如本发明实施例中,该程序可存储于计算机系统的存储介质中,并被该计算机系统中的至少一个处理器执行,以实现包括如上述各个移动应用程序的安全加固的方法的实施例的流程。
在一个实施例中,还提供一种存储介质,其上存储有计算机程序,其中,该程序被处理器执行时实现如上述各实施例中的任意一种移动应用程序的安全加固的方法。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random Access Memory,RAM)等。
该计算机存储介质,其存储的计算机程序,通过实现包括如上述各移动应用程序的安全加固的方法的实施例的流程,从而实现了通过对代码进行隐藏以及数据加密处理,并通过动态还原索引代码有效地获得上层函数和参数,以保护源代码的运行逻辑,防止攻击者对二进制代码进行反编译,从而达到防逆向效果,增加应用的安全性、机密性和可用性。。
本发明实施例中还提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行程序时实现上述任意一项方法的步骤。
计算机设备中的处理器执行程序时实现上述任意一项方法的步骤,从而实现了通过对代码进行隐藏以及数据加密处理,并通过动态还原索引代码有效地获得上层函数和参数,以保护源代码的运行逻辑,防止攻击者对二进制代码进行反编译,从而达到防逆向效果,增加移动应用程序的安全性、机密性和可用性。
相应地,本发明实施例中还提供了一种移动应用程序的安全解固的方法,如图5所示,包括以下步骤:
S510:在下载移动应用程序的APK文件之后,对APK文件进行解压,获取dex文件、加密索引代码数据、so库文件和Manifest文件。
具体而言,在下载如前所述的APK文件之后,对APK文件进行解压,可获得dex文件、加密索引代码数据、so库文件和Manifest文件。
S520:运行so库文件,根据解密私钥调用解密库中的解密函数对加密索引代码数据进行解密,获得索引代码。
具体而言,在移动应用程序运行时,根据相应的应用程序编程(ApplicationProgramming Interface,API)接口向云端的加固服务器发起请求,接收该移动应用程序对应的解密私钥,通过私钥把相应的索引代码进行动态解密并在内存中加载。
在一个具体实施例中,根据如前所述的椭圆曲线加密算法的加密过程,其解密过程如下:使用私钥d,计算C2-dC1,将加密索引数据恢复成索引编码m。
S530:当Manifest文件中的加载器加载待保护的类和方法的程序入口代码时,根据安卓加载机制将索引代码动态恢复至dex文件中,并通过虚拟机执行恢复后的dex文件以运行移动应用程序。
在本实施例中,采用代码隐藏机制对dex文件重写了程序入口代码,因此在移动应用程序运行之前,通过Manifest文件中的加载器加载待保护的类和方法的程序入口代码,将索引代码动态恢复至dex文件中,并通过虚拟机执行恢复后的dex文件,从而进行运行移动应用程序。
具体地,安卓加载机制分为Dalvik虚拟机和ART虚拟机两种,Dalvik虚拟机具体过程如下:通过动态修复method关键偏移地址code_offset,实现Dalvik虚拟机的正常加载;ART虚拟机具体过程如下:在动态修复method关键偏移地址code_offset后,通过对修复的method数据进行编译得到可执行的本地机器码,加载到ART虚拟机中运行。基于上述两种虚拟机的加载方法,使得代码隐藏技术能应用于安卓4.0-6.0的系统中。
如前所述,通过解压重新获得dex文件、加密索引代码数据、so库文件和Manifest文件,并进行解密和加载,使得使用者确保所下载的应用是原版合法应用,而不是被攻击者篡改过、包含恶意代码的不法应用;实现了防止攻击者对二进制代码进行反编译,从而达到防逆向效果,增加应用的安全性、机密性和可用性。
在一个实施例中,如图6所示,对APK文件进行解压,获取dex文件、加密索引代码数据、so库文件和Manifest文件的步骤之后,运行so库文件的步骤之前,还包括:
S610:运行so库文件中的防调试代码,以防止恶意调试器对APK文件进行调试。
如前所述,由于修改了待保护的类和方法的加载逻辑,程序启动之前需要进行防调试检测,如果检测到恶意调试器的存在,则终止移动应用程序的运行。
在本实施例中,通过利用反调试技术,从调试器对抗和模拟器对抗两方面阻止移动应用程序在运行过程中被调试器跟踪;其中,调试器对抗是通过判断是否存在调试器来进行防调试保护,模拟器对抗是通过判断移动终端是否为模拟器来进行防调试保护。从而使攻击者无法调试APK文件的原生代码,具备抵御动态对抗的能力。
在一个实施例中,如图6所示,在运行so库文件中的防调试代码的步骤之后,在运行so库文件的步骤之前,还包括:
S620:运行已加固dex文件的防篡改功能代码,根据移动应用程序的指纹信息对移动应用程序的完整性和签名证书进行验证。
如前所述,由于攻击者可以非法复制、非授权使用、恶意修改软件代码逻辑或功能及通过逆向工程获取核心算法和关键数据,但进行上述不法操作时,移动应用程序的代码和签名证书会发生改变,因此在dex文件中添加用于校验移动应用程序完整性和签名证书的防篡改功能代码。
在本实施例中,通过利用完整性保护和签名证书保护技术,对移动应用程序的完整性以及对应用开发者签名证书在应用程序运行过程中进行二次校验,增加软件或被篡改的难度,一旦被篡改能够即时感知并终止移动应用程序的运行,使盗版、插入恶意代码等行为难以为继。
相应地,本发明实施例中还提供了一种移动应用程序的安全解固的装置,如图7所示,包括:
解压模块710,在下载移动应用程序的APK文件之后,对APK文件进行解压,获取dex文件、加密索引代码数据、so库文件和Manifest文件;
解密模块720,用于运行so库文件,根据解密私钥调用解密库中的解密函数对加密索引代码数据进行解密,获得索引代码;
加载恢复模块730,用于当Manifest文件中的加载器加载待保护的类和方法的程序入口代码时,根据安卓加载机制将索引代码动态恢复至dex文件中,并通过虚拟机执行恢复后的dex文件以运行移动应用程序。
上述移动应用程序的安全解固的装置可执行本发明实施例所提供的移动应用程序的安全解固的方法,具备执行方法相应的功能模块和有益效果。
需要说明的是,本发明各个移动应用程序的安全加固的装置和安全解固的装置可划分为三个系统,分别为代码隐藏加密系统、动态加载系统和签名打包系统。
其中,代码隐藏加密系统包括抽取重写模块420、加密模块430和更改模块450。
其中,动态加载系统包括生成模块440、解密模块720和加载恢复模块730。
其中,签名打包系统包括解压获取模块410、打包模块460和解压模块710。
应当理解,上述代码隐藏加密系统、动态加载系统和签名打包系统可执行本发明实施例所提供的移动应用程序的安全加固及安全解固的方法,具备本发明实施例所提供的移动应用程序的安全加固及解固的装置的有益效果。
此外,本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一非易失性的计算机可读取存储介质中,如本发明实施例中,该程序可存储于计算机系统的存储介质中,并被该计算机系统中的至少一个处理器执行,以实现包括如上述各个移动应用程序的安全解固的方法的实施例的流程。
在一个实施例中,还提供一种存储介质,其上存储有计算机程序,其中,该程序被处理器执行时实现如上述各实施例中的任意一种移动应用程序的安全解固的方法。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random Access Memory,RAM)等。
该计算机存储介质,其存储的计算机程序,通过实现包括如上述各移动应用程序的安全解固的方法的实施例的流程,从而实现防止攻击者对二进制代码进行反编译,从而达到防逆向效果,增加应用的安全性、机密性和可用性。
本发明实施例中还提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行程序时实现上述任意一项方法的步骤。
计算机设备中的处理器执行程序时实现上述任意一项方法的步骤,从而实现了防止攻击者对二进制代码进行反编译,从而达到防逆向效果,增加应用的安全性、机密性和可用性。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。
Claims (14)
1.一种移动应用程序的安全加固的方法,其特征在于,包括以下步骤:
对待加固的移动应用程序的APK文件进行解压,获取待加固dex文件和Manifest文件;
在所述待加固dex文件中,抽取待保护的类和方法的索引代码,并重写待保护的类和方法的程序入口代码,获得已加固dex文件;
对所述索引代码进行加密,获取加密索引代码数据并进行单独存放;
生成用于解密所述加密索引代码数据并动态还原所述索引代码的so库文件;
在所述Manifest文件中更改用于读取所述程序入口代码的加载器的信息;
利用签名工具对所述已加固dex文件、所述加密索引代码数据、所述so库文件和更改后的所述Manifest文件重新打包,获得加固后的所述APK文件。
2.根据权利要求1所述的移动应用程序的安全加固的方法,其特征在于,通过椭圆曲线加密算法对所述索引代码进行加密。
3.根据权利要求1所述的移动应用程序的安全加固的方法,其特征在于,在利用签名工具对所述已加固dex文件、所述加密索引代码数据、所述so库文件和更改后的所述Manifest文件重新打包的步骤之前,还包括:
在所述已加固dex文件中添加用于校验所述移动应用程序完整性和签名证书的防篡改功能代码。
4.根据权利要求1-3中任意一项所述的移动应用程序的安全加固的方法,其特征在于,在利用签名工具对所述已加固dex文件、所述加密索引代码数据、所述so库文件和更改后的所述Manifest文件重新打包的步骤之前,还包括:
在所述so库文件中加入防调试代码,所述防调试代码用于防止恶意调试器对所述APK文件进行调试。
5.根据权利要求4所述的移动应用程序的安全加固的方法,其特征在于,用于解密所述加密索引代码数据的所述解密私钥和用于验证所述移动应用程序完整性和签名证书的指纹信息保存在云端的加固服务器中。
6.一种移动应用程序的安全加固的装置,其特征在于,包括:
解压获取模块,用于对待加固的移动应用程序的APK文件进行解压,获取待加固dex文件和Manifest文件;
抽取重写模块,用于在所述待加固dex文件中,抽取待保护的类和方法的索引代码,并重写待保护的类和方法的程序入口代码,获得已加固dex文件;
加密模块,用于对所述索引代码进行加密,获取加密索引代码数据并进行单独存放;
生成模块,用于生成用于解密所述加密索引代码数据并动态还原所述索引代码的so库文件;
更改模块,用于在所述Manifest文件中更改用于读取所述程序入口代码的加载器的信息;
打包模块,用于利用签名工具对所述已加固dex文件、所述加密索引代码数据、所述so库文件和更改后的所述Manifest文件重新打包,获得加固后的所述APK文件。
7.一种可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行权利要求1-6中任意一项所述方法的步骤。
8.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现权利要求1-6中任意一项所述方法的步骤。
9.一种移动应用程序的安全解固的方法,其特征在于,包括以下步骤:
在下载移动应用程序的APK文件之后,对所述APK文件进行解压,获取dex文件、加密索引代码数据、so库文件和Manifest文件;
运行所述so库文件,根据解密私钥调用解密库中的解密函数对所述加密索引代码数据进行解密,获得索引代码;
当所述Manifest文件中的加载器加载待保护的类和方法的程序入口代码时,根据安卓加载机制将所述索引代码动态恢复至所述dex文件中,并通过虚拟机执行恢复后的所述dex文件以运行所述移动应用程序。
10.根据权利要求9所述的移动应用程序的安全解固的方法,其特征在于,对所述APK文件进行解压,获取dex文件、加密索引代码数据、so库文件和Manifest文件的步骤之后,运行所述so库文件的步骤之前,还包括:
运行所述so库文件中的防调试代码,以防止恶意调试器对所述APK文件进行调试。
11.根据权利要求10所述的移动应用程序的安全解固的方法,其特征在于,在运行所述so库文件中的防调试代码的步骤之后,在运行所述so库文件的步骤之前,还包括:
运行所述已加固dex文件的防篡改功能代码,根据所述移动应用程序的指纹信息对所述移动应用程序的完整性和签名证书进行验证。
12.一种移动应用程序的安全解固的装置,其特征在于,包括:
解压模块,在下载移动应用程序的APK文件之后,对所述APK文件进行解压,获取dex文件、加密索引代码数据、so库文件和Manifest文件;
解密模块,用于运行所述so库文件,根据解密私钥调用解密库中的解密函数对所述加密索引代码数据进行解密,获得索引代码;
加载恢复模块,用于当所述Manifest文件中的加载器加载待保护的类和方法的程序入口代码时,根据安卓加载机制将所述索引代码动态恢复至所述dex文件中,并通过虚拟机执行恢复后的所述dex文件以运行所述移动应用程序。
13.一种可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行权利要求9-11中任意一项所述方法的步骤。
14.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现权利要求9-11中任意一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711422051.3A CN107977553B (zh) | 2017-12-25 | 2017-12-25 | 移动应用程序的安全加固的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711422051.3A CN107977553B (zh) | 2017-12-25 | 2017-12-25 | 移动应用程序的安全加固的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107977553A true CN107977553A (zh) | 2018-05-01 |
CN107977553B CN107977553B (zh) | 2020-07-10 |
Family
ID=62007752
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711422051.3A Active CN107977553B (zh) | 2017-12-25 | 2017-12-25 | 移动应用程序的安全加固的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107977553B (zh) |
Cited By (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108681457A (zh) * | 2018-05-11 | 2018-10-19 | 西北大学 | 基于代码下沉与残码解释的Android应用程序保护方法 |
CN108733379A (zh) * | 2018-05-28 | 2018-11-02 | 常熟理工学院 | 基于dex字节码抽离映射混淆的安卓应用加固方法 |
CN108985017A (zh) * | 2018-09-26 | 2018-12-11 | 北京京东金融科技控股有限公司 | 应用程序的加固方法和装置 |
CN109598107A (zh) * | 2018-11-20 | 2019-04-09 | 江苏通付盾信息安全技术有限公司 | 一种基于应用安装包文件的代码转换方法及装置 |
CN109740305A (zh) * | 2018-12-26 | 2019-05-10 | 深圳市优博讯科技股份有限公司 | 一种应用程序安装包签名方法、安装方法及电子设备 |
CN109740311A (zh) * | 2019-01-07 | 2019-05-10 | 广州小鹏汽车科技有限公司 | 安卓应用的安全加固方法及装置 |
CN109840425A (zh) * | 2019-01-22 | 2019-06-04 | 北京数科网维技术有限责任公司 | 一种文件加密的方法和装置 |
CN109918872A (zh) * | 2019-01-28 | 2019-06-21 | 中国科学院数据与通信保护研究教育中心 | Android应用加固方法 |
CN109960509A (zh) * | 2019-03-06 | 2019-07-02 | 江苏通付盾信息安全技术有限公司 | 应用加固的方法、装置、计算设备及计算机存储介质 |
CN110119601A (zh) * | 2019-03-28 | 2019-08-13 | 江苏通付盾信息安全技术有限公司 | 基于应用程序安装包的程序加固方法及装置 |
CN110175067A (zh) * | 2019-03-05 | 2019-08-27 | 广东电网有限责任公司信息中心 | 一种移动应用立体防御方法和系统 |
CN110233734A (zh) * | 2019-06-13 | 2019-09-13 | Oppo广东移动通信有限公司 | 签名校验方法及相关产品 |
CN110610097A (zh) * | 2019-09-09 | 2019-12-24 | 杭州天宽科技有限公司 | 一种基于安卓应用的文件传输保密系统 |
CN110933028A (zh) * | 2019-10-24 | 2020-03-27 | 中移(杭州)信息技术有限公司 | 报文传输方法、装置、网络设备及存储介质 |
CN112084469A (zh) * | 2020-08-06 | 2020-12-15 | 华帝股份有限公司 | 防止应用程序被逆向工程的加密方法 |
CN112468446A (zh) * | 2020-11-02 | 2021-03-09 | 上海绊糖信息科技有限公司 | 一种保护用户隐私的移动运行环境安全检测系统 |
CN112507292A (zh) * | 2020-12-09 | 2021-03-16 | 重庆邮电大学 | 一种支持运行环境检测及完整性检测的加壳保护方法 |
CN113127812A (zh) * | 2019-12-30 | 2021-07-16 | Oppo广东移动通信有限公司 | 文件检测方法、装置、终端及存储介质 |
CN115525879A (zh) * | 2022-11-25 | 2022-12-27 | 易方信息科技股份有限公司 | 一种针对iOS的SDK内部敏感数据的保护方法 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102760219A (zh) * | 2011-12-20 | 2012-10-31 | 北京安天电子设备有限公司 | 一种Android平台软件保护系统、方法及设备 |
CN105046116A (zh) * | 2015-06-25 | 2015-11-11 | 上海斐讯数据通信技术有限公司 | Android系统中保护dex文件不被反编译的方法 |
CN105426708A (zh) * | 2016-01-19 | 2016-03-23 | 北京鼎源科技有限公司 | 一种Android系统的应用程序的加固方法 |
US20160239671A1 (en) * | 2015-02-13 | 2016-08-18 | Thomson Licensing | Method and device for protecting an application and method and device for executing a protected application thus protected |
CN106203006A (zh) * | 2016-08-31 | 2016-12-07 | 北京鼎源科技有限公司 | 基于dex与so文件动态执行的Android应用加固方法 |
CN106412102A (zh) * | 2016-10-28 | 2017-02-15 | 努比亚技术有限公司 | 一种防止应用被反编译的装置和方法 |
CN106650330A (zh) * | 2016-12-22 | 2017-05-10 | 合肥国信车联网研究院有限公司 | 一种基于Dex加载器的Android应用软件加固保护方法 |
CN106778103A (zh) * | 2016-12-30 | 2017-05-31 | 上海掌门科技有限公司 | 一种安卓应用程序防逆向破解的加固方法、系统及解密方法 |
CN107169324A (zh) * | 2017-05-12 | 2017-09-15 | 北京理工大学 | 一种基于动态加解密的Android应用加固方法 |
-
2017
- 2017-12-25 CN CN201711422051.3A patent/CN107977553B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102760219A (zh) * | 2011-12-20 | 2012-10-31 | 北京安天电子设备有限公司 | 一种Android平台软件保护系统、方法及设备 |
US20160239671A1 (en) * | 2015-02-13 | 2016-08-18 | Thomson Licensing | Method and device for protecting an application and method and device for executing a protected application thus protected |
CN105046116A (zh) * | 2015-06-25 | 2015-11-11 | 上海斐讯数据通信技术有限公司 | Android系统中保护dex文件不被反编译的方法 |
CN105426708A (zh) * | 2016-01-19 | 2016-03-23 | 北京鼎源科技有限公司 | 一种Android系统的应用程序的加固方法 |
CN106203006A (zh) * | 2016-08-31 | 2016-12-07 | 北京鼎源科技有限公司 | 基于dex与so文件动态执行的Android应用加固方法 |
CN106412102A (zh) * | 2016-10-28 | 2017-02-15 | 努比亚技术有限公司 | 一种防止应用被反编译的装置和方法 |
CN106650330A (zh) * | 2016-12-22 | 2017-05-10 | 合肥国信车联网研究院有限公司 | 一种基于Dex加载器的Android应用软件加固保护方法 |
CN106778103A (zh) * | 2016-12-30 | 2017-05-31 | 上海掌门科技有限公司 | 一种安卓应用程序防逆向破解的加固方法、系统及解密方法 |
CN107169324A (zh) * | 2017-05-12 | 2017-09-15 | 北京理工大学 | 一种基于动态加解密的Android应用加固方法 |
Cited By (28)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108681457A (zh) * | 2018-05-11 | 2018-10-19 | 西北大学 | 基于代码下沉与残码解释的Android应用程序保护方法 |
CN108681457B (zh) * | 2018-05-11 | 2020-09-01 | 西北大学 | 基于代码下沉与残码解释的Android应用程序保护方法 |
CN108733379A (zh) * | 2018-05-28 | 2018-11-02 | 常熟理工学院 | 基于dex字节码抽离映射混淆的安卓应用加固方法 |
CN108985017A (zh) * | 2018-09-26 | 2018-12-11 | 北京京东金融科技控股有限公司 | 应用程序的加固方法和装置 |
CN109598107A (zh) * | 2018-11-20 | 2019-04-09 | 江苏通付盾信息安全技术有限公司 | 一种基于应用安装包文件的代码转换方法及装置 |
CN109598107B (zh) * | 2018-11-20 | 2021-02-02 | 江苏通付盾信息安全技术有限公司 | 一种基于应用安装包文件的代码转换方法及装置 |
CN109740305A (zh) * | 2018-12-26 | 2019-05-10 | 深圳市优博讯科技股份有限公司 | 一种应用程序安装包签名方法、安装方法及电子设备 |
CN109740311A (zh) * | 2019-01-07 | 2019-05-10 | 广州小鹏汽车科技有限公司 | 安卓应用的安全加固方法及装置 |
CN109840425B (zh) * | 2019-01-22 | 2020-07-31 | 北京数科网维技术有限责任公司 | 一种文件加密的方法和装置 |
CN109840425A (zh) * | 2019-01-22 | 2019-06-04 | 北京数科网维技术有限责任公司 | 一种文件加密的方法和装置 |
CN109918872A (zh) * | 2019-01-28 | 2019-06-21 | 中国科学院数据与通信保护研究教育中心 | Android应用加固方法 |
CN110175067A (zh) * | 2019-03-05 | 2019-08-27 | 广东电网有限责任公司信息中心 | 一种移动应用立体防御方法和系统 |
CN109960509A (zh) * | 2019-03-06 | 2019-07-02 | 江苏通付盾信息安全技术有限公司 | 应用加固的方法、装置、计算设备及计算机存储介质 |
WO2020177430A1 (zh) * | 2019-03-06 | 2020-09-10 | 江苏通付盾信息安全技术有限公司 | 应用加固的方法、装置、计算设备及计算机存储介质 |
CN110119601B (zh) * | 2019-03-28 | 2022-07-12 | 江苏通付盾信息安全技术有限公司 | 基于应用程序安装包的程序加固方法及装置 |
CN110119601A (zh) * | 2019-03-28 | 2019-08-13 | 江苏通付盾信息安全技术有限公司 | 基于应用程序安装包的程序加固方法及装置 |
CN110233734A (zh) * | 2019-06-13 | 2019-09-13 | Oppo广东移动通信有限公司 | 签名校验方法及相关产品 |
CN110233734B (zh) * | 2019-06-13 | 2022-03-11 | Oppo广东移动通信有限公司 | 签名校验方法及相关产品 |
CN110610097A (zh) * | 2019-09-09 | 2019-12-24 | 杭州天宽科技有限公司 | 一种基于安卓应用的文件传输保密系统 |
CN110933028A (zh) * | 2019-10-24 | 2020-03-27 | 中移(杭州)信息技术有限公司 | 报文传输方法、装置、网络设备及存储介质 |
CN113127812A (zh) * | 2019-12-30 | 2021-07-16 | Oppo广东移动通信有限公司 | 文件检测方法、装置、终端及存储介质 |
CN112084469A (zh) * | 2020-08-06 | 2020-12-15 | 华帝股份有限公司 | 防止应用程序被逆向工程的加密方法 |
CN112468446A (zh) * | 2020-11-02 | 2021-03-09 | 上海绊糖信息科技有限公司 | 一种保护用户隐私的移动运行环境安全检测系统 |
CN112468446B (zh) * | 2020-11-02 | 2023-04-07 | 上海绊糖信息科技有限公司 | 一种保护用户隐私的移动运行环境安全检测系统 |
CN112507292A (zh) * | 2020-12-09 | 2021-03-16 | 重庆邮电大学 | 一种支持运行环境检测及完整性检测的加壳保护方法 |
CN112507292B (zh) * | 2020-12-09 | 2024-01-26 | 重庆邮电大学 | 一种支持运行环境检测及完整性检测的加壳保护方法 |
CN115525879A (zh) * | 2022-11-25 | 2022-12-27 | 易方信息科技股份有限公司 | 一种针对iOS的SDK内部敏感数据的保护方法 |
CN115525879B (zh) * | 2022-11-25 | 2023-04-07 | 易方信息科技股份有限公司 | 一种针对iOS的SDK内部敏感数据的保护方法 |
Also Published As
Publication number | Publication date |
---|---|
CN107977553B (zh) | 2020-07-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107977553A (zh) | 移动应用程序的安全加固的方法及装置 | |
Banescu et al. | A tutorial on software obfuscation | |
JP5808019B2 (ja) | ホワイトボックス暗号化技術を用いるインターロックされたバイナリ保護 | |
EP2398182B1 (en) | A device and a method for generating software code | |
US20200065480A1 (en) | Software Integrity Verification | |
CN107273723B (zh) | 一种基于so文件加壳的Android平台应用软件保护方法 | |
CN104268444A (zh) | 一种云OS Java源代码保护方法 | |
CN101814124A (zh) | 一种基于Java的软件安全性加强的方法 | |
US10296728B2 (en) | Method and system for providing cloud-based application security service | |
WO2015150391A1 (en) | Software protection | |
US20120144208A1 (en) | Indexed table based code encrypting/decrypting device and method thereof | |
US7970133B2 (en) | System and method for secure and flexible key schedule generation | |
CN106650330A (zh) | 一种基于Dex加载器的Android应用软件加固保护方法 | |
CN108134673A (zh) | 一种生成白盒库文件的方法及装置 | |
CN107122629B (zh) | 一种基于随机混淆的Android软件协同加固方法 | |
US10331896B2 (en) | Method of protecting secret data when used in a cryptographic algorithm | |
KR20140139392A (ko) | 모바일 장치를 위한 애플리케이션 실행 파일 생성방법, 모바일 장치의 애플리케이션 실행 방법, 애플리케이션 실행 파일 생성 장치 및 모바일 장치 | |
CN111967032A (zh) | 基于混淆处理的文件加密方法及解密方法 | |
Suk et al. | VCF: Virtual code folding to enhance virtualization obfuscation | |
Wang et al. | Tamper resistant software through dynamic integrity checking | |
CN106650342B (zh) | 一种Jar包加固方法及系统 | |
US9223945B2 (en) | Code diversity method and system | |
US20170134379A1 (en) | Method for securing an application and data | |
Chen et al. | Cloud licensing model for. NET software protection | |
KR101883997B1 (ko) | 의존 관계형 위변조 무결성 체크를 이용한 암호화 처리장치 및 방법 |
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 | ||
CB02 | Change of applicant information | ||
CB02 | Change of applicant information |
Address after: 511300 No.78, west of Zhucun Avenue, Zhucun street, Zengcheng District, Guangzhou City, Guangdong Province Applicant after: CHINA ELECTRONIC PRODUCT RELIABILITY AND ENVIRONMENTAL TESTING Research Institute Address before: 510610 No. 110 Zhuang Road, Tianhe District, Guangdong, Guangzhou, Dongguan Applicant before: CHINA ELECTRONIC PRODUCT RELIABILITY AND ENVIRONMENTAL TESTING Research Institute |
|
GR01 | Patent grant | ||
GR01 | Patent grant |