CN117828580A - 一种应用程序认证方法及装置 - Google Patents
一种应用程序认证方法及装置 Download PDFInfo
- Publication number
- CN117828580A CN117828580A CN202311516814.6A CN202311516814A CN117828580A CN 117828580 A CN117828580 A CN 117828580A CN 202311516814 A CN202311516814 A CN 202311516814A CN 117828580 A CN117828580 A CN 117828580A
- Authority
- CN
- China
- Prior art keywords
- information
- class
- application program
- loader
- verification
- 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 80
- 238000012795 verification Methods 0.000 claims abstract description 163
- 238000013475 authorization Methods 0.000 claims abstract description 57
- 230000008569 process Effects 0.000 claims abstract description 19
- 238000004891 communication Methods 0.000 claims description 18
- 238000004590 computer program Methods 0.000 claims description 10
- 230000011218 segmentation Effects 0.000 claims description 8
- 238000004806 packaging method and process Methods 0.000 claims description 5
- 238000012545 processing Methods 0.000 abstract description 5
- 238000010586 diagram Methods 0.000 description 7
- 238000013478 data encryption standard Methods 0.000 description 6
- 230000006870 function Effects 0.000 description 4
- 230000009471 action Effects 0.000 description 3
- 230000002708 enhancing effect Effects 0.000 description 3
- 238000004458 analytical method Methods 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 2
- 230000001010 compromised effect Effects 0.000 description 2
- 238000002513 implantation Methods 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 238000003491 array Methods 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000000802 evaporation-induced self-assembly Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
Landscapes
- Storage Device Security (AREA)
Abstract
本发明实施例提供了一种应用程序认证方法及装置,涉及数据处理技术领域,上述方法包括:在应用程序启动过程中,通过运行第一类加载器,解密程序包内的第二类加载器;通过运行第二类加载器,解密程序包内程序文件中的验证类,并加载解密后的验证类,得到验证类中记录的公共密钥;通过运行验证类中定义的验证方法,以公共密钥为解密密钥,对应用程序的认证证书中记录的加密认证信息进行解密,得到应用程序的授权设备信息和应用程序的属性信息;采集应用程序所在设备的当前设备信息和应用程序的运行信息;基于授权设备信息、属性信息以及所采集运行信息,对应用程序进行认证。应用本发明实施例提供的方案能够区别真实授权用户和虚假授权用户。
Description
技术领域
本发明涉及数据处理技术领域,特别是涉及一种应用程序认证方法及装置。
背景技术
应用程序认证是指对使用应用程序的用户进行身份认证,通过应用程序认证可以确定用户是否具有应用程序的合法使用权限。例如,对于付费应用程序而言,购买该应用程序的用户为授权用户,具有该应用程序的合法使用权限,未购买该应用程序的用户即未授权用户,不具有该应用程序的合法使用权限。
现有技术中,一般采用授权码机制对应用程序进行认证。简言之,若用户输入了正确的授权码,则通过认证,允许用户使用应用程序。
然而,授权码易被泄露及传播,未授权用户取得授权码后,即可通过输入授权码使用应用程序,使得应用程序开发方的合法权益被侵害。可见,上述认证方法难以区别真实授权用户和虚假授权用户。
发明内容
本发明实施例的目的在于提供一种应用程序认证方法及装置,以区别真实授权用户和虚假授权用户。具体技术方案如下:
第一方面,本发明实施例提供了一种应用程序认证方法,上述方法包括:
在应用程序启动过程中,加载所述应用程序的程序包内默认的第一类加载器,通过运行所述第一类加载器,解密所述程序包内的第二类加载器,并加载解密后的所述第二类加载器;
通过运行所述第二类加载器,解密所述程序包内程序文件中的验证类,并加载解密后的所述验证类,得到所述验证类中记录的公共密钥;
通过运行所述验证类中定义的验证方法,以所述公共密钥为解密密钥,对所述程序包内所述应用程序的认证证书中记录的加密认证信息进行解密,得到所述应用程序的授权设备信息和所述应用程序的属性信息;
采集所述应用程序所在设备的当前设备信息和所述应用程序的运行信息;
基于所述授权设备信息、属性信息、当前设备信息以及运行信息,对所述应用程序进行认证。
第二方面,本发明实施例提供了一种应用程序认证装置,所述装置包括:
第一加载与解密模块,用于在应用程序启动过程中,加载所述应用程序的程序包内默认的第一类加载器,通过运行所述第一类加载器,解密所述程序包内的第二类加载器,并加载解密后的所述第二类加载器;
第二加载与解密模块,用于通过运行所述第二类加载器,解密所述程序包内程序文件中的验证类,并加载解密后的所述验证类,得到所述验证类中记录的公共密钥;
认证信息解密模块,用于通过运行所述验证类中定义的验证装置,以所述公共密钥为解密密钥,对所述程序包内所述应用程序的认证证书中记录的加密认证信息进行解密,得到所述应用程序的授权设备信息和所述应用程序的属性信息;
信息采集模块,用于采集所述应用程序所在设备的当前设备信息和所述应用程序的运行信息;
认证模块,用于基于所述授权设备信息、属性信息、当前设备信息以及运行信息,对所述应用程序进行认证。
第三方面,本发明实施例提供了一种电子设备,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;
存储器,用于存放计算机程序;
处理器,用于执行存储器上所存放的程序时,实现第一方面所述的方法步骤。
第四方面,本发明实施例提供了一种计算机可读存储介质,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现第一方面所述的方法步骤。
第五方面,本发明实施例提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行第一方面所述的方法步骤。
由以上可见,应用本发明实施例提供的方案进行应用程序认证时,通过运行第一类加载器,解密第二类加载器,并加载解密后的第二类加载器;通过运行第二类加载器,解密验证类,并加载解密后的验证类,得到验证类中记录的公共密钥;通过运行验证类中定义的验证方法,以公共密钥为解密密钥,对应用程序的认证证书中记录的加密认证信息进行解密,得到应用程序的授权设备信息和应用程序的属性信息;再采集应用程序所在设备的当前设备信息和应用程序的运行信息,最终基于授权设备信息、属性信息、当前设备信息以及运行信息,成功对应用程序进行认证。
其中,一方面,认证证书中记录的信息是采用公共密钥对应私有密钥加密的,上述私有密钥不公开,这样即便未授权用户非法篡改了认证证书中记录的信息,由于其难以获取私有密钥进行加密,因此,后续也难以通过上述公共密钥进行解密,从而导致认证失败,有效增强了认证证书中记录的信息被篡改的难度;第二方面,上述公共密钥本身也是在预先加密的验证类中记录的,这样增大了未授权用户通过反编译的方式获取上述公共密钥的难度,进而降低了未授权用户根据公共密钥解密获取认证证书中记录的信息的几率,进一步保障了认证证书中记录的信息的安全性。可见,由于保障了认证证书中记录的信息的完整性和安全性,因此,后续通过对应用程序所在设备的当前设备信息、应用程序的运行信息与认证证书中记录的信息进行对比,能够准确的根据对比结果确定用户是否为真实授权的用户,也即能够准确的区别真实授权用户和虚假授权用户。
当然,实施本发明的任一产品或方法并不一定需要同时达到以上所述的所有优点。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的实施例。
图1为本发明实施例提供的第一种应用程序认证方法的流程示意图;
图2为本发明实施例提供的一种解密流程的示意图;
图3为本发明实施例提供的第二种应用程序认证方法的流程示意图;
图4为本发明实施例提供的一种应用程序认证流程的示意图;
图5为本发明实施例提供的一种应用程序认证装置的结构示意图;
图6为本发明实施例提供的一种电子设备的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员基于本发明所获得的所有其他实施例,都属于本发明保护的范围。
首先对本发明实施例所提供方案的执行主体进行说明。
本发明实施例所提供方案的执行主体为任意一台具有数据处理、存储等功能的电子设备。例如,可以是企业中部署的终端设备等。
具体的,从硬件层面上来说,本发明实施例所提供方案的执行主体为上述电子设备中的CPU;从软件层面上来说,本发明实施例所提供方案的执行主体为上述CPU在启动应用程序过程中创建的进程。
下面对本发明实施例提供的应用程序认证方案进行详细说明。
参见图1,为本发明实施例提供的第一种应用程序认证方法的流程示意图,上述方法包括以下步骤S101-步骤S105。
步骤S101:在应用程序启动过程中,加载应用程序的程序包内默认的第一类加载器,通过运行第一类加载器,解密程序包内的第二类加载器,并加载解密后的第二类加载器。
上述应用程序为安装在电子设备中的应用程序,可以是任意类型、具有任意功能的应用程序,本发明实施例对此不作限定。如,对于企业而言,其部署的终端设备中安装的应用程序可以是用于执行各项业务的应用程序等。
上述程序包是通过对应用程序文件和应用程序相关资源进行打包得到的包。
例如,对于Java应用程序而言,其程序包就是对Java应用程序的各个功能模块的源代码进行打包得到的JAR(Java Archive,Java归档)包。
本发明的一个实施例中,上述应用程序的程序包文件为:对应用程序的源代码进行代码混淆后打包得到的文件。
这样,应用程序的程序包文件也是通过对应用程序的源代码进行代码混淆后加密的文件,从而增加了未授权用户基于应用程序的程序包文件非法反编译得到应用程序的源代码的难度,进一步提高了应用程序的安全性,有利于后续通过运行应用程序准确区别真实授权用户和虚假授权用户。
下面对上述第一类加载器和第二类加载器进行介绍。
1、第一类加载器。
默认类加载器是在运行应用程序过程中,默认的、用于加载类文件的加载器,可以被理解为一个程序包,或者一个代码模块。
例如,对于采用Java开发得到的应用程序而言,该应用程序被运行时,程序包内的默认类加载器可以将Java类文件加载到内存中。具体的,默认类加载器可以将Java类文件以二进制字节码的形式加载到JVM(Java Virtual Machine,Java虚拟机)中,以便进程从JVM中读取并基于上述字节码执行各项任务。
本发明实施例中,第一类加载器为:对上述默认类加载器进行部分重写后得到的类加载器,用于对第二类加载器进行解密,并加载解密后的第二类加载器。
其中,通过第一类加载器解密第二类加载器时,可以按照第二类加载器的加密规则,反向解密得到第二类加载器。第二类加载器的加密规则详见后文介绍。
2、第二类加载器。
上述第二类加载器也可以称为自定义类加载器,也就是,自定义的、用于加载类文件的加载器,同样可以被理解为一个程序包,或者一个代码模块。并且,第二类加载器可以为1个,可以为多个,详见后续说明。
第二类加载器预先采用加密规则进行加密,需要解密之后才能被加载。
具体的,上述第二类加载器可以采用多种代码加密方法进行加密,例如,可以采用字节码混淆、代码植入等加密方式加密,本发明实施例对此不作限定。
一种情况下,可以将应用程序的源代码中未加密加载器对应的代码编译为二进制代码,然后对编译得到的二进制代码进行取反操作、前后翻转操作、分段移位操作中的至少一种操作,得到第二类加载器。
其中,
上述取反操作是指将编译得到的二进制代码的每一比特位取反,如,将二进制代码“11011000”取反后得到“00100111”;
上述前后翻转操作是指将编译得到的二进制代码的比特位整体上前后翻转,如,将二进制代码“11011000”前后翻转后得到“00011011”;
上述分段移位操作是指将编译得到的二进制代码的比特位分段,再对得到的分段进行移位。如,将二进制代码“11011000”分段后得到“1101”和“1000”,将得到的2个分段进行位置移动,得到“10001101”。
上述三种操作可以仅执行一种,也可以叠加执行多种,当叠加执行多种时,还可以按照不同的次序叠加执行。如,先执行前后翻转操作、再执行取反操作、最后进行分段移位操作。
可见,这样可以采用多种代码加密操作便捷、高效的对第二类加载器进行加密。另外,工作人员可以依据实际需求仅采用其中一种加密操作对第二类加载器进行加密,或者采用多种加密操作的叠加对第二类加载器进行加密,也就是,可以根据实际需求确定对第二类加载器加密时的复杂度,提高了对第二类加载器加密时的灵活性。
由前文可知,第二类加载器可以为一个,也可以为多个,鉴于此,下面分情况对解密第二类加载器的方式进行介绍。
在第二类加载为一个的情况下,通过运行第一类加载器,可以直接按照第二类加载器的加密规则,反向解密得到第二类加载器。
在第二类加载器的数量为多个的情况下,各第二类加载器的执行次序可以是不同的,此时,可以通过运行第一类加载器,解密程序包内执行次序为第一的第二类加载器。这样,通过运行第一类加载器,可以解密执行次序为第一的第二类加载器,从而后续可以按照第二类加载器的执行次数,通过逐个运行各个第二类加载器来解密验证类。
步骤S102:通过运行第二类加载器,解密程序包内程序文件中的验证类,并加载解密后的验证类,得到验证类中记录的公共密钥。
上述验证类可以理解为程序文件中定义的结构体,验证类中定义有用于验证应用程序的认证证书的验证方法,并记录有公共密钥。
与第二类加载器类似的,验证类可以采用多种代码加密方法进行加密,例如,可以采用字节码混淆、代码植入等加密方式加密,本发明实施例对此不作限定。
一种情况下,可以将应用程序的源代码中未加密验证类对应的代码编译为二进制代码,然后对编译得到的二进制代码进行取反操作、前后翻转操作、分段移位操作中的至少一种操作,得到验证类。
上述各项操作的执行具体方法已在前述介绍第二类加载器的加密方法部分说明,这里不再赘述。
可见,这样可以采用多种代码加密操作便捷、高效的对验证类进行加密。另外,工作人员可以依据实际需求仅采用其中一种加密操作对验证类进行加密,或者采用多种加密操作的叠加对验证类进行加密,也就是,可以根据实际需求确定对验证类加密时的复杂度,提高了对验证类加密时的灵活性。
由前文可知,第二类加载器可以为一个,也可以为多个,鉴于此,下面分情况对解密验证类的方式进行介绍。
在第二类加载为一个的情况下,通过运行第二类加载器,可以直接按照验证类的加密规则,反向解密得到验证类。
在第二类加载器的数量为多个的情况下,可以采用以下步骤A-步骤C解密验证类。
步骤A:通过运行目标类加载器,解密执行次序在目标类加载器之后的下一个第二类加载器,加载解密后的目标类加载器。
其中,初始时目标类加载器为执行次序为第一的第二类加载器。
具体的,步骤A首次执行时,通过运行执行次序为第一第二类加载器,可以按照执行次序在该第二类加载器之后的下一个第二类加载器的加密规则,反向解密下一个第二类加载器。
步骤B:将目标类加载器更新为在目标类加载器之后执行的下一个第二类加载器,返回执行步骤A,直至更新后的目标类加载器为执行次序为最后的第二类加载器。
这样,最新被解密的第二类加载器会被运行,通过运行可以解密执行次序在最新被解密的第二类加载器之后的下一个第二类加载器,依次类推。
步骤C:通过运行更新后的目标类加载器,解密程序包内程序文件中的验证类。
上述更新后的目标类加载器也就是执行次序为最后的第二类加载器,通过运行执行次序为最后的第二类加载器,可以按照验证类的加密规则,反向解密验证类。
下面结合图2,对上述解密流程进行更加直观的说明。
参见图2,为本发明实施例提供的一种解密流程的示意图。
图2中,第二类加载器X表示执行次序为第X的第二类加载器。
可以看出,首先通过运行第二类加载器1,解密第二类加载器2,加载第二类加载器2后,可以通过运行第二类加载器2,解密第二类加载器3,依次类推,直至通过运行第二类加载器N-1,解密第二类加载器N,加载第二类加载器N后,可以通过运行第二类加载器N,解密验证类。
可见,当第二类加载器的数量大于1时,可以按照第二类加载器的执行次序逐个解密各个各个第二类加载器,直到解密得到执行次序为最后的第二类加载器,通过运行执行次序为最后的第二类加载器解密得到验证类。这样采用逐层解密的方式,提高了解密验证类时的复杂度,保障了验证类的安全性。
解密得到验证类后,加载验证类即可获取验证类中记录的公共密钥,上述公共密钥用于解密应用程序的认证证书中记录的加密认证信息。
步骤S103:通过运行验证类中定义的验证方法,以公共密钥为解密密钥,对程序包内应用程序的认证证书中记录的加密认证信息进行解密,得到应用程序的授权设备信息和应用程序的属性信息。
上述授权设备信息可以包括:应用程序所授权设备的CPU ID(Identification,标识)、BIOS(Basic Input Output System,基本输入输出系统)号码、设备SerialNumber(序列号)、IP(Internet Protocol,网际互连协议)地址、MAC(Media Access ControlAddress,媒体存取控制)地址等。
上述应用程序的属性信息可以包括:应用程序名称、有效期、包名校验值、启动类名称、版本号等。
其中,以公共密钥为解密密钥,成功解密得到应用程序的授权设备信息和应用程序的属性信息,也就说明了加密认证信息是采用公共密钥对应的私有密钥进行加密的。
上述公共密钥和私有密钥可以是任意非对称加密算法所采用的密钥,上述非对称加密算法可以是RSA算法、DSA(Digital Signature Algorithm,数字签名算法)、ECC(Elliptic curve cryptography,椭圆曲线加密算法)等算法。
步骤S104:采集应用程序所在设备的当前设备信息和应用程序的运行信息。
本步骤中,所采集的当前设备信息可以与上述授权设备信息相对应,如,若授权设备信息包括CPU ID、BIOS号码、设备SerialNumber,则所采集的当前设备信息可以是CPUID、BIOS号码、设备SerialNumber。
类似的,所采集的应用程序的运行信息可以与上述应用程序的属性信息相对应。
步骤S105:基于授权设备信息、属性信息、当前设备信息以及运行信息,对应用程序进行认证。
对应用程序进行认证可以理解为对用户针对当前应用程序的使用权限进行认证,以区分用户是否为应用程序的真实授权用户。如,若认证通过,则用户可以正常使用上述应用程序,否则无法使用。
一种情况下,对应用程序进行认证也可以理解为对其他应用程序针对上述应用程序的程序包的调用权限进行认证,以区分其他应用程序是否具有上述程序包的调用权限。如,若认证通过,则其他应用程序可以直接调用或引入上述应用程序的程序包,否则无法调用或引入。
可以通过对比授权设备信息与当前设备信息是否相同,并对比属性信息与运行信息是否相同,若均相同,则确定应用程序认证成功,否则确定应用程序认证失败。
具体的,可以采用以下方式对比授权设备信息与当前设备信息是否相同。
一种实施方式中,可以直接对比授权设备信息与当前设备信息的字符串是否完全一致,若为是,确定授权设备信息与当前设备信息相同。
另一种实施方式中,可以提取授权设备信息与当前设备信息的特征值,并对比所提取的特征值是否相同,若为是,确定授权设备信息与当前设备信息相同。
其中,可以采用HASH(哈希)算法、MD(Message Digest,消息摘要)算法、SHA-1(Secure Hash Algorithm 1,安全散列算法1)等信息摘要算法提取授权设备信息与当前设备信息的特征值,本发明实施例对此不作限定。
由以上可见,应用本发明实施例提供的方案进行应用程序认证时,通过运行第一类加载器,解密第二类加载器,并加载解密后的第二类加载器;通过运行第二类加载器,解密验证类,并加载解密后的验证类,得到验证类中记录的公共密钥;通过运行验证类中定义的验证方法,以公共密钥为解密密钥,对应用程序的认证证书中记录的加密认证信息进行解密,得到应用程序的授权设备信息和应用程序的属性信息;再采集应用程序所在设备的当前设备信息和应用程序的运行信息,最终基于授权设备信息、属性信息、当前设备信息以及运行信息,成功对应用程序进行认证。
其中,一方面,认证证书中记录的信息是采用公共密钥对应私有密钥加密的,上述私有密钥不公开,这样即便未授权用户非法篡改了认证证书中记录的信息,由于其难以获取私有密钥进行加密,因此,后续也难以通过上述公共密钥进行解密,从而导致认证失败,有效增强了认证证书中记录的信息被篡改的难度;第二方面,上述公共密钥本身也是在预先加密的验证类中记录的,这样增大了未授权用户通过反编译的方式获取上述公共密钥的难度,进而降低了未授权用户根据公共密钥解密获取认证证书中记录的信息的几率,进一步保障了认证证书中记录的信息的安全性。可见,由于保障了认证证书中记录的信息的完整性和安全性,因此,后续通过对应用程序所在设备的当前设备信息、应用程序的运行信息与认证证书中记录的信息进行对比,能够准确的根据对比结果确定用户是否为真实授权的用户,也即能够准确的区别真实授权用户和虚假授权用户。
另外,可以看出,应用程序的程序包内的第二类加载器以及程序包内程序文件中的验证类均是预先加密的,这样提高了未授权用户通过反编译的方式获得上述类加载器和验证类的源代码时的难度,也即从整体上提高了应用程序被未授权用户非法反编译的难度,进一步有利于准确区别真实授权用户和虚假授权用户。
在图1所示实施例的基础上,在步骤S104采集应用程序所在设备的当前设备信息和应用程序的运行信息之前,还可以通过解密获得认证证书的篡改校验信息,在基于篡改校验信息确定认证证书未被篡改的情况下,再执行步骤S104。鉴于上述情况,本发明实施例提供了第二种应用程序认证方法。
参见图3,为本发明实施例提供的第二种应用程序认证方法的流程示意图,上述方法包括以下步骤S301-步骤S308。
步骤S301:在应用程序启动过程中,加载应用程序的程序包内默认的第一类加载器,通过运行第一类加载器,解密程序包内的第二类加载器,并加载解密后的第二类加载器。
步骤S302:通过运行第二类加载器,解密程序包内程序文件中的验证类,并加载解密后的验证类,得到验证类中记录的公共密钥。
步骤S303:通过运行验证类中定义的验证方法,以公共密钥为解密密钥,对程序包内应用程序的认证证书中记录的加密认证信息进行解密,得到应用程序的授权设备信息和应用程序的属性信息。
上述步骤S301-步骤S303与前述图1所示实施例中步骤S101-步骤S103相同,这里不再赘述。
步骤S304:以公共密钥为解密密钥,对加密认证信息进行解密,得到认证证书的篡改校验信息。
上述篡改校验信息可以是任何用于校验认证证书是否被篡改的信息,本发明实施例对此不作限定。
例如,上述篡改校验信息可以是初始为目标值、且每次认证证书被修改并保存后自增的检验值。
一种情况下,可以以公共密钥为解密密钥,对加密认证信息进行解密,得到应用程序的授权设备信息和应用程序的属性信息的第一特征值,作为认证证书的篡改校验信息。
上述第一特征值可以采用是通过HASH算法、MD算法、SHA-1等信息摘要算法提取授权设备信息与属性信息得到的特征值,本发明实施例对此不作限定。
显然,确定的授权设备信息和属性信息对应一个唯一的第一特征值,那么,若从认证证书中解密出的授权设备信息和属性信息发生变化,则解密出的授权设备信息和属性信息的特征值一定与上述第一特征值不相同。
步骤S305:基于篡改校验信息对认证证书进行篡改校验,得到校验结果。
由前述步骤S304可知,解密得到的篡改校验信息可以有多种情况,下面分情况介绍基于篡改校验信息进行篡改校验的方式。
一种情况下,若篡改校验信息为初始为目标值、且每次认证证书被修改并保存后自增的检验值,那么,若解密得到的篡改校验信息不是上述初始的目标值,则确定校验结果为校验失败,反之,确定校验结果为校验成功。
另一种情况下,若篡改校验信息为初始为上述第一特征值,则可以提取解密得到的授权设备信息和属性信息的第二特征值,并判断第一特征值与第二特征值是否相同,基于判断结果得到校验结果。
其中,确定的授权设备信息和属性信息对应一个唯一的第一特征值,而第一特征值是授权设备信息和属性信息的特征值,那么,若从认证证书中解密出的授权设备信息和属性信息未发生变化,则提取得到的第二特征值应该与第一特征值相同;若从认证证书中解密出的授权设备信息和属性信息发生了变化,则提取得到的第二特征值与第一特征值不同。
因此,若提取得到的第二特征值应该与第一特征值相同,则确定校验结果为校验成功,反之,则确定校验结果为校验失败。
这样,应用程序的授权设备信息和应用程序的属性信息的第一特征值直接保存在认证证书中,进而后续可以从认证证书中解密出的授权设备信息和属性信息,并提取上述信息的第二特征值,根据相同信息的特征值相同、不同信息的特征值不同的原理,便捷、高效的验证认证证书中记录的授权设备信息和属性信息是否被篡改。
步骤S306:判断校验结果是否表征认证证书被篡改,若为否,执行步骤S307。
若认证证书已被篡改,说明认证证书中记录的信息已被非法改动,则后续的信息对比也没有意义,因此,可以直接确定应用程序认证失败。
因此,可以确定校验结果表征认证证书未被篡改时,才执行后续的认证步骤。
步骤S307:采集应用程序所在设备的当前设备信息和应用程序的运行信息。
步骤S308:基于授权设备信息、属性信息、当前设备信息以及运行信息,对应用程序进行认证。
上述步骤S307-步骤S308与前述图1所示实施例中步骤S104-步骤S105相同,这里不再赘述。
本实施例中,在采集应用程序所在设备的当前设备信息和应用程序的运行信息、根据所采集信息和从认证认证中解密得到的信息对应用程序进行认证之前,还基于认证证书的篡改校验信息,对认证证书是否被篡改进行了验证,从而可以保证在认证证书未被篡改的情况下再执行后续的认证步骤,进一步保障了认证方案的完善性和合理性,从而进一步提高了区别真实授权用户和虚假授权用户的准确度。
本发明的一个实施例中,在上述步骤S305采用特征值对比的方式校验认证证书是否被的篡改的情况下,上述步骤S303还可以通过以下方式实现:
通过运行验证类中定义的验证方法,以公共密钥为解密密钥,对加密认证信息进行解密,得到加解密密钥,以加解密密钥为解密密钥,对加密认证信息进行解密,得到应用程序的授权设备信息和应用程序的属性信息。
上述加解密密钥为加密授权设备信息和属性信息所采用的对称加密算法的密钥,上述对称加密算法可以是DES(Data Encryption Standard,数据加密标准算法)、AES(Advanced Encryption Standard,高级加密标准算法)、3DES(Triple Data EncryptionAlgorithm,三重数据加密算法)等。
可见,认证证书中记录的授权设备信息和属性信息是通过加解密密钥加密的,并且加解密密钥自身也是通过公共密钥对应的私有密钥加密的,也就是,认证证书中记录的授权设备信息和属性信息是采用双重加密的方式加密的。
这样,即便私有密钥被泄露,由于未得知公共密钥,未授权用户难以解密得到加解密密钥,进而难以基于加解密密钥篡改认证证书中记录的授权设备信息和属性信息。可见,通过上述双重加密的方式,进一步确保了认证证书中记录的授权设备信息和属性信息的安全性,从而进一步提高了后续基于认证证书中记录的授权设备信息和属性信息区别真实授权用户和虚假授权用户的准确度。
下面再对本发明实施例提供的一种具体的应用程序认证流程进行介绍。
参见图4,为本发明实施例提供的一种应用程序认证流程的示意图。
图4所示的应用程序认证流程可以通过以下步骤S401-步骤S410描述:
步骤S401:启动应用程序。
上述应用程序的JAR包可以预先采用代码混淆的方式打包得到。
步骤S402:加载Java默认类加载器,通过运行Java默认类加载器,解密第一自定义类加载器ClassLoaderTemp,并加载解密后的ClassLoaderTemp。
上述Java默认类加载器对应前文介绍的默认的第一类加载器,第一自定义类加载器ClassLoaderTemp对应前文介绍的执行次序为第一的第二类加载器,被加密存储在JAR包中。
通过运行Java默认类加载器,可以按照ClassLoaderTemp的加密规则,反向解密ClassLoaderTemp。
其中,ClassLoaderTemp的加密规则已在前文第二类加载器的加密规则介绍部分说明,这里不再赘述。
步骤S403:通过运行ClassLoaderTemp,解密第二自定义类加载器ClassLoaderCore,并加载解密后的ClassLoaderCore。
上述第二自定义类加载器ClassLoaderCore为执行次序在ClassLoaderTemp之后的类加载器。
本实施例中,一共采用了2个加密的自定义类加载器ClassLoaderTemp和ClassLoaderCore,通过运行ClassLoaderTemp,可以按照ClassLoaderCore的加密规则,反向解密ClassLoaderCore。
其中,ClassLoaderCore的加密规则已在前文第二类加载器的加密规则介绍部分说明,这里不再赘述。
步骤S404:判断程序代码中的类是否为关键类,若为否,执行步骤S405,若为是,执行步骤S406。
上述关键类可以包括程序代码中预先定义的关键业务类和验证类,程序代码中除关键类之外的类可以称为普通类。
步骤S405:通过运行Java默认类加载器,加载普通类。
针对普通类,由于其与应用程序的核心业务以及应用程序认证没有关联或关联性极弱,不是本实施例的重点保护对象,因此,普通类可以不经过预先加密,直接采用Java默认类加载器加载。
步骤S406:通过运行ClassLoaderCore,解密关键类,并加载关键类。
针对关键类,由于其用于实现应用程序的核心业务以及应用程序的认证,是本实施例的重点保护对象,因此,关键类可以预先采用加密规则加密。
通过运行ClassLoaderCore,可以按照关键类的加密规则,反向解密关键类。
其中,关键类的加密规则与前文介绍的验证类的加密规则类似,这里不再赘述。
并且,关键类的加密规则可以与ClassLoaderTemp及ClassLoaderCore的加密规则不同。
步骤S407:从已加载的类中确定验证类,通过运行验证类中定义的验证方法,从认证证书中解密第一类信息、第二类信息以及第三类信息。
上述第一类信息为采用RSA私钥对AES密钥(AESkey)加密后得到的信息,采用RSA公钥对第一类信息进行解密可以得到AES密钥;
上述第三类信息为采用上述AES密钥对软件授权信息进行加密后得到的信息,采用AES密钥对第三类信息进行解密可以得到软件授权信息;
上述第二类信息为认证证书生成时,第三类信息的SHA-1信息,也即采用SHA-1算法对第三类信息进行信息摘要后得到的信息。
其中,上述RSA私钥由应用程序版权方保存,RSA公钥记录在验证类中,上述软件授权信息对应前文提及的应用程序的授权设备信息和应用程序的属性信息。
步骤S408:基于解密得到的信息确定认证证书是否被篡改,若为是,结束流程,若为否,执行步骤S409。
具体的,可以提取解析得到的第三类信息的SHA-1信息,判断提取得到的SHA-1信息与解析得到的第二类信息是否相同,若为是,则确定认证证书未被篡改,若为否,则确定认证证书已被篡改。
在前文介绍的基础上可知,确定的信息对应一个唯一的SHA-1信息,相同信息对应的SHA-1信息一定相同,不同信息对应的SHA-1信息一定不相同。
因此,若第三类信息被篡改,则针对第三类信息提取得到的SHA-1信息一定发生变化,由于第二类信息是原始的、未被篡改的第三类信息的SHA-1信息,从而所提取SHA-1信息与第二类信息一定不同,从而可以确定认证证书被篡改。
同理,若第二类信息被篡改,由于第三类信息未被篡改,则针对第三类信息提取得到的SHA-1信息一定保持不变,由于第二类信息已发生改变,从而所提取SHA-1信息与第二类信息一定不同,从而也可以确定认证证书被篡改。
可见,只要不是第二类信息和第三类信息被同时篡改,本实施例均可准确的判定认证认证是否被篡改。
而本实施例恰恰可以保证第二类信息和第三类信息难以被同时篡改,原因详见后续说明。
步骤S409:采集应用程序所在设备的当前设备信息和应用程序的运行信息。
步骤S410:基于所采集信息和解析第三类信息得到的软件授权信息,对应用程序进行认证。
具体的,若所采集信息和解析第三类信息得到的软件授权信息相同,则确定应用程序认证成功,反之,确定应用程序认证失败。
本发明的一个实施例中,在确定所采集信息和解析第三类信息得到的软件授权信息相同后,还可以对启动的JVM参数进行校验,防止从未授权用户从JVM虚拟机中获取字节码进行反编译得出应用程序源码。
下面对本实施例可以保证第二类信息和第三类信息难以被同时篡改的原因进行说明:
首先,第三类信息是采用DES密钥加密得到的,获取DES密钥又需要RSA公钥对第一类信息进行解密,因此,未授权用户篡改第三类信息需要获知RSA公钥。
再者,第二类信息是采用RSA私钥加密得到的,因此,未授权用户篡改第二类信息需要获知RSA私钥。
由此可知,未授权用户想要同时篡改第二类信息和第三类信息,需要获知RSA公钥和RSA私钥,缺一不可。
一方面,上述RSA公钥记录在预先加密的验证类中,且验证类又需要通过预先加密的多层级类加载器加载得到,这样使得未授权用户很难通过反编译的方式获知上述RSA公钥。
另一方面,上述RSA私钥由应用程序版权方保存,是非公开的,在不泄密的情况下,未授权用户难以获知RSA私钥。
可见,未授权用户获取RSA公钥和RSA私钥中任一密钥的难度均极大,从而获取RSA公钥和RSA私钥这两者的难度会更大。
综上,未授权用户既获取RSA公钥、又获取RSA私钥的难度巨大,从而基于上述RSA公钥和RSA私钥同时篡改第二类信息和第三类信息的难度巨大,进而难以采用同时篡改认证证书中记录的第二类信息和第三类信息的方式进行虚假认证,大大提高了应用程序认证时区别真实授权用户和虚假授权用户的准确度,保护了应用程序的版权。
另外,本发明实施例执行的整个流程中,不涉及与其他电子设备的交互,也即,本发明实施例提供的方案可以在离线模式下执行,从而实现了在离线状态下保护软件的版权,在不能通过在线认证应用程序的场景(如企业内网场景)下具有较好的应用前景。
可以看出,本发明实施例采用代码混淆、多层级类加载器、证书认证、证书自校验等手段,解决了在企业内网的情况下,不能通过在线认证的方式保护软件版权,实现了在离线状态下保护软件的版权,且提高了虚假认证的难度,保障了应用程序的安全性。
与上述应用程序认证方法相对应的,本发明实施例还提供了一种应用程序认证装置。
参见图5,为本发明实施例提供的一种应用程序认证装置的结构示意图,上述装置包括以下模块:
第一加载与解密模块501,用于在应用程序启动过程中,加载所述应用程序的程序包内默认的第一类加载器,通过运行所述第一类加载器,解密所述程序包内的第二类加载器,并加载解密后的所述第二类加载器;
第二加载与解密模块502,用于通过运行所述第二类加载器,解密所述程序包内程序文件中的验证类,并加载解密后的所述验证类,得到所述验证类中记录的公共密钥;
认证信息解密模块503,用于通过运行所述验证类中定义的验证装置,以所述公共密钥为解密密钥,对所述程序包内所述应用程序的认证证书中记录的加密认证信息进行解密,得到所述应用程序的授权设备信息和所述应用程序的属性信息;
信息采集模块504,用于采集所述应用程序所在设备的当前设备信息和所述应用程序的运行信息;
认证模块505,用于基于所述授权设备信息、属性信息、当前设备信息以及运行信息,对所述应用程序进行认证。
由以上可见,应用本发明实施例提供的方案进行应用程序认证时,通过运行第一类加载器,解密第二类加载器,并加载解密后的第二类加载器;通过运行第二类加载器,解密验证类,并加载解密后的验证类,得到验证类中记录的公共密钥;通过运行验证类中定义的验证方法,以公共密钥为解密密钥,对应用程序的认证证书中记录的加密认证信息进行解密,得到应用程序的授权设备信息和应用程序的属性信息;再采集应用程序所在设备的当前设备信息和应用程序的运行信息,最终基于授权设备信息、属性信息、当前设备信息以及运行信息,成功对应用程序进行认证。
其中,一方面,认证证书中记录的信息是采用公共密钥对应私有密钥加密的,上述私有密钥不公开,这样即便未授权用户非法篡改了认证证书中记录的信息,由于其难以获取私有密钥进行加密,因此,后续也难以通过上述公共密钥进行解密,从而导致认证失败,有效增强了认证证书中记录的信息被篡改的难度;第二方面,上述公共密钥本身也是在预先加密的验证类中记录的,这样增大了未授权用户通过反编译的方式获取上述公共密钥的难度,进而降低了未授权用户根据公共密钥解密获取认证证书中记录的信息的几率,进一步保障了认证证书中记录的信息的安全性。可见,由于保障了认证证书中记录的信息的完整性和安全性,因此,后续通过对应用程序所在设备的当前设备信息、应用程序的运行信息与认证证书中记录的信息进行对比,能够准确的根据对比结果确定用户是否为真实授权的用户,也即能够准确的区别真实授权用户和虚假授权用户。
另外,可以看出,应用程序的程序包内的第二类加载器以及程序包内程序文件中的验证类均是预先加密的,这样提高了未授权用户通过反编译的方式获得上述类加载器和验证类的源代码时的难度,也即从整体上提高了应用程序被未授权用户非法反编译的难度,进一步有利于准确区别真实授权用户和虚假授权用户。
本发明的一个实施例中,所述第二类加载器的数量大于1;
所述第一加载与解密模块501,具体用于在应用程序启动过程中,加载所述应用程序的程序包内默认的第一类加载器,通过运行所述第一类加载器,解密所述程序包内执行次序为第一的第二类加载器,并加载解密后的所述第二类加载器;
所述第二加载与解密模块502,具体用于通过运行目标类加载器,解密执行次序在所述目标类加载器之后的下一个第二类加载器,加载解密后的目标类加载器,其中,初始时所述目标类加载器为执行次序为第一的第二类加载器;将所述目标类加载器更新为在所述目标类加载器之后执行的下一个第二类加载器,返回执行所述通过运行目标类加载器,解密执行次序在所述目标类加载器之后的下一个第二类加载器的步骤,直至更新后的目标类加载器为执行次序为最后的第二类加载器;通过运行更新后的目标类加载器,解密所述程序包内程序文件中的验证类,并加载解密后的所述验证类,得到所述验证类中记录的公共密钥。
可见,当第二类加载器的数量大于1时,可以按照第二类加载器的执行次序逐个解密各个各个第二类加载器,直到解密得到执行次序为最后的第二类加载器,通过运行执行次序为最后的第二类加载器解密得到验证类。这样采用逐层解密的方式,提高了解密验证类时的复杂度,保障了验证类的安全性。
本发明的一个实施例中,所述装置还包括:
校验信息获得模块,用于以所述公共密钥为解密密钥,对所述加密认证信息进行解密,得到所述认证证书的篡改校验信息;
校验结果获得模块,用于基于所述篡改校验信息对所述认证证书进行篡改校验,得到校验结果;
判断模块,用于在所述校验结果表征所述认证证书未被篡改的情况下,触发所述信息采集模块504。
本实施例中,在采集应用程序所在设备的当前设备信息和应用程序的运行信息、根据所采集信息和从认证认证中解密得到的信息对应用程序进行认证之前,还基于认证证书的篡改校验信息,对认证证书是否被篡改进行了验证,从而可以保证在认证证书未被篡改的情况下再执行后续的认证步骤,进一步保障了认证方案的完善性和合理性,从而进一步提高了区别真实授权用户和虚假授权用户的准确度。
本发明的一个实施例中,所述校验信息获得模块,具体用于以所述公共密钥为解密密钥,对所述加密认证信息进行解密,得到所述应用程序的授权设备信息和所述应用程序的属性信息的第一特征值,作为所述认证证书的篡改校验信息;
所述校验结果获得模块,具体用于提取解密得到的所述应用程序的授权设备信息和所述应用程序的属性信息的第二特征值;判断所述第一特征值与所述第二特征值是否相同,基于判断结果得到校验结果。
这样,应用程序的授权设备信息和应用程序的属性信息的第一特征值直接保存在认证证书中,进而后续可以从认证证书中解密出的授权设备信息和属性信息,并提取上述信息的第二特征值,根据相同信息的特征值相同、不同信息的特征值不同的原理,便捷、高效的验证认证证书中记录的授权设备信息和属性信息是否被篡改。
本发明的一个实施例中,所述认证信息解密模块503,具体用于以所述公共密钥为解密密钥,对所述加密认证信息进行解密,得到加解密密钥;以所述加解密密钥为解密密钥,对所述加密认证信息进行解密,得到所述应用程序的授权设备信息和所述应用程序的属性信息。
这样,即便私有密钥被泄露,由于未得知公共密钥,未授权用户难以解密得到加解密密钥,进而难以基于加解密密钥篡改认证证书中记录的授权设备信息和属性信息。可见,通过上述双重加密的方式,进一步确保了认证证书中记录的授权设备信息和属性信息的安全性,从而进一步提高了后续基于认证证书中记录的授权设备信息和属性信息区别真实授权用户和虚假授权用户的准确度。
本发明的一个实施例中,所述应用程序的程序包文件为:对所述应用程序的源代码进行代码混淆后打包得到的文件。
这样,应用程序的程序包文件也是通过对应用程序的源代码进行代码混淆后加密的文件,从而增加了未授权用户基于应用程序的程序包文件非法反编译得到应用程序的源代码的难度,进一步提高了应用程序的安全性,有利于后续通过运行应用程序准确区别真实授权用户和虚假授权用户。
本发明的一个实施例中,所述第二类加载器按照以下方式加密得到:
将所述应用程序的源代码中未加密加载器对应的代码编译为二进制代码;对编译得到的二进制代码进行取反操作、前后翻转操作、分段移位操作中的至少一种操作,得到所述第二类加载器;和/或所述验证类按照以下方式加密得到:将所述应用程序的源代码中未加密验证类对应的代码编译为二进制代码;对编译得到的二进制代码进行取反操作、前后翻转操作、分段移位操作中的至少一种操作,得到所述验证类。
可见,这样可以采用多种代码加密操作便捷、高效的对第二类加载器和/或验证类进行加密。另外,工作人员可以依据实际需求仅采用其中一种加密操作对第二类加载器和/或验证类进行加密,或者采用多种加密操作的叠加对第二类加载器和/或验证类进行加密,也就是,可以根据实际需求确定对第二类加载器和/或验证类加密时的复杂度,提高了对第二类加载器和/或验证类加密时的灵活性。
本发明实施例还提供了一种电子设备,如图6所示,包括处理器601、通信接口602、存储器603和通信总线604,其中,处理器601,通信接口602,存储器603通过通信总线604完成相互间的通信,
存储器603,用于存放计算机程序;
处理器601,用于执行存储器603上所存放的程序时,实现前述应用程序认证方法。
上述电子设备提到的通信总线可以是外设部件互连标准(Peripheral ComponentInterconnect,PCI)总线或扩展工业标准结构(Extended Industry StandardArchitecture,EISA)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
通信接口用于上述电子设备与其他设备之间的通信。
存储器可以包括随机存取存储器(Random Access Memory,RAM),也可以包括非易失性存储器(Non-Volatile Memory,NVM),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。
上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,CPU)、网络处理器(Network Processor,NP)等;还可以是数字信号处理器(Digital SignalProcessor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
在本发明提供的又一实施例中,还提供了一种计算机可读存储介质,该计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述任一应用程序认证方法。
在本发明提供的又一实施例中,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述实施例中任一应用程序认证方法。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘Solid State Disk(SSD))等。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置、电子设备及存储介质实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本发明的较佳实施例,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。
Claims (16)
1.一种应用程序认证方法,其特征在于,所述方法包括:
在应用程序启动过程中,加载所述应用程序的程序包内默认的第一类加载器,通过运行所述第一类加载器,解密所述程序包内的第二类加载器,并加载解密后的所述第二类加载器;
通过运行所述第二类加载器,解密所述程序包内程序文件中的验证类,并加载解密后的所述验证类,得到所述验证类中记录的公共密钥;
通过运行所述验证类中定义的验证方法,以所述公共密钥为解密密钥,对所述程序包内所述应用程序的认证证书中记录的加密认证信息进行解密,得到所述应用程序的授权设备信息和所述应用程序的属性信息;
采集所述应用程序所在设备的当前设备信息和所述应用程序的运行信息;
基于所述授权设备信息、属性信息、当前设备信息以及运行信息,对所述应用程序进行认证。
2.根据权利要求1所述的方法,其特征在于,所述第二类加载器的数量大于1;
所述通过运行所述第一类加载器,解密所述程序包内的第二类加载器,包括:
通过运行所述第一类加载器,解密所述程序包内执行次序为第一的第二类加载器;
所述通过运行所述第二类加载器,解密所述程序包内程序文件中的验证类,包括:
通过运行目标类加载器,解密执行次序在所述目标类加载器之后的下一个第二类加载器,加载解密后的目标类加载器,其中,初始时所述目标类加载器为执行次序为第一的第二类加载器;
将所述目标类加载器更新为在所述目标类加载器之后执行的下一个第二类加载器,返回执行所述通过运行目标类加载器,解密执行次序在所述目标类加载器之后的下一个第二类加载器的步骤,直至更新后的目标类加载器为执行次序为最后的第二类加载器;
通过运行更新后的目标类加载器,解密所述程序包内程序文件中的验证类。
3.根据权利要求1所述的方法,其特征在于,在所述采集所述应用程序所在设备的当前设备信息和所述应用程序的运行信息之前,还包括:
以所述公共密钥为解密密钥,对所述加密认证信息进行解密,得到所述认证证书的篡改校验信息;
基于所述篡改校验信息对所述认证证书进行篡改校验,得到校验结果;
在所述校验结果表征所述认证证书未被篡改的情况下,执行所述采集所述应用程序所在设备的当前设备信息和所述应用程序的运行信息的步骤。
4.根据权利要求3所述的方法,其特征在于,所述以所述公共密钥为解密密钥,对所述加密认证信息进行解密,得到所述认证证书的篡改校验信息,包括:
以所述公共密钥为解密密钥,对所述加密认证信息进行解密,得到所述应用程序的授权设备信息和所述应用程序的属性信息的第一特征值,作为所述认证证书的篡改校验信息;
所述基于所述篡改校验信息对所述认证证书进行篡改校验,得到校验结果,包括:
提取解密得到的所述应用程序的授权设备信息和所述应用程序的属性信息的第二特征值;
判断所述第一特征值与所述第二特征值是否相同,基于判断结果得到校验结果。
5.根据权利要求4所述的方法,其特征在于,所述以所述公共密钥为解密密钥,对所述程序包内所述应用程序的认证证书中记录的加密认证信息进行解密,得到所述应用程序的授权设备信息和所述应用程序的属性信息,包括:
以所述公共密钥为解密密钥,对所述加密认证信息进行解密,得到加解密密钥;
以所述加解密密钥为解密密钥,对所述加密认证信息进行解密,得到所述应用程序的授权设备信息和所述应用程序的属性信息。
6.根据权利要求1-5中任一项所述的方法,其特征在于,所述应用程序的程序包文件为:对所述应用程序的源代码进行代码混淆后打包得到的文件。
7.根据权利要求1-5中任一项所述的方法,其特征在于,
所述第二类加载器按照以下方式加密得到:
将所述应用程序的源代码中未加密加载器对应的代码编译为二进制代码;对编译得到的二进制代码进行取反操作、前后翻转操作、分段移位操作中的至少一种操作,得到所述第二类加载器;
和/或
所述验证类按照以下方式加密得到:
将所述应用程序的源代码中未加密验证类对应的代码编译为二进制代码;对编译得到的二进制代码进行取反操作、前后翻转操作、分段移位操作中的至少一种操作,得到所述验证类。
8.一种应用程序认证装置,其特征在于,所述装置包括:
第一加载与解密模块,用于在应用程序启动过程中,加载所述应用程序的程序包内默认的第一类加载器,通过运行所述第一类加载器,解密所述程序包内的第二类加载器,并加载解密后的所述第二类加载器;
第二加载与解密模块,用于通过运行所述第二类加载器,解密所述程序包内程序文件中的验证类,并加载解密后的所述验证类,得到所述验证类中记录的公共密钥;
认证信息解密模块,用于通过运行所述验证类中定义的验证装置,以所述公共密钥为解密密钥,对所述程序包内所述应用程序的认证证书中记录的加密认证信息进行解密,得到所述应用程序的授权设备信息和所述应用程序的属性信息;
信息采集模块,用于采集所述应用程序所在设备的当前设备信息和所述应用程序的运行信息;
认证模块,用于基于所述授权设备信息、属性信息、当前设备信息以及运行信息,对所述应用程序进行认证。
9.根据权利要求8所述的装置,其特征在于,所述第二类加载器的数量大于1;
所述第一加载与解密模块,具体用于在应用程序启动过程中,加载所述应用程序的程序包内默认的第一类加载器,通过运行所述第一类加载器,解密所述程序包内执行次序为第一的第二类加载器,并加载解密后的所述第二类加载器;
所述第二加载与解密模块,具体用于通过运行目标类加载器,解密执行次序在所述目标类加载器之后的下一个第二类加载器,加载解密后的目标类加载器,其中,初始时所述目标类加载器为执行次序为第一的第二类加载器;将所述目标类加载器更新为在所述目标类加载器之后执行的下一个第二类加载器,返回执行所述通过运行目标类加载器,解密执行次序在所述目标类加载器之后的下一个第二类加载器的步骤,直至更新后的目标类加载器为执行次序为最后的第二类加载器;通过运行更新后的目标类加载器,解密所述程序包内程序文件中的验证类,并加载解密后的所述验证类,得到所述验证类中记录的公共密钥。
10.根据权利要求8所述的装置,其特征在于,所述装置还包括:
校验信息获得模块,用于以所述公共密钥为解密密钥,对所述加密认证信息进行解密,得到所述认证证书的篡改校验信息;
校验结果获得模块,用于基于所述篡改校验信息对所述认证证书进行篡改校验,得到校验结果;
判断模块,用于在所述校验结果表征所述认证证书未被篡改的情况下,触发所述信息采集模块。
11.根据权利要求10所述的装置,其特征在于,
所述校验信息获得模块,具体用于以所述公共密钥为解密密钥,对所述加密认证信息进行解密,得到所述应用程序的授权设备信息和所述应用程序的属性信息的第一特征值,作为所述认证证书的篡改校验信息;
所述校验结果获得模块,具体用于提取解密得到的所述应用程序的授权设备信息和所述应用程序的属性信息的第二特征值;判断所述第一特征值与所述第二特征值是否相同,基于判断结果得到校验结果。
12.根据权利要求11所述的装置,其特征在于,
所述认证信息解密模块,具体用于采用所述公共密钥对所述加密认证信息进行解密,得到加解密密钥;采用所述加解密密钥,对所述加密认证信息进行解密,得到所述应用程序的授权设备信息和所述应用程序的属性信息。
13.根据权利要求8-12中任一项所述的装置,其特征在于,所述应用程序的程序包文件为:对所述应用程序的源代码进行代码混淆后打包得到的文件。
14.根据权利要求8-12中任一项所述的装置,其特征在于,
所述第二类加载器按照以下方式加密得到:
将所述应用程序的源代码中未加密加载器对应的代码编译为二进制代码;对编译得到的二进制代码进行取反操作、前后翻转操作、分段移位操作中的至少一种操作,得到所述第二类加载器;和/或所述验证类按照以下方式加密得到:将所述应用程序的源代码中未加密验证类对应的代码编译为二进制代码;对编译得到的二进制代码进行取反操作、前后翻转操作、分段移位操作中的至少一种操作,得到所述验证类。
15.一种电子设备,其特征在于,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;
存储器,用于存放计算机程序;
处理器,用于执行存储器上所存放的程序时,实现权利要求1-7中任一所述的方法步骤。
16.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现权利要求1-7中任一所述的方法步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311516814.6A CN117828580A (zh) | 2023-11-14 | 2023-11-14 | 一种应用程序认证方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311516814.6A CN117828580A (zh) | 2023-11-14 | 2023-11-14 | 一种应用程序认证方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117828580A true CN117828580A (zh) | 2024-04-05 |
Family
ID=90519696
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311516814.6A Pending CN117828580A (zh) | 2023-11-14 | 2023-11-14 | 一种应用程序认证方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117828580A (zh) |
-
2023
- 2023-11-14 CN CN202311516814.6A patent/CN117828580A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11126754B2 (en) | Personalized and cryptographically secure access control in operating systems | |
KR100996784B1 (ko) | 공개 키 암호화에 기초한 데이터의 저장 및 검색을 위한, 컴퓨팅 장치에서 구현되는 방법, 시스템 및 복수의 명령어를 저장하는 하나 이상의 컴퓨터 판독가능 매체 | |
JP4689946B2 (ja) | 安全なデータを使用して情報処理を実行するシステム | |
AU2005201995B2 (en) | System and method for protected operating system boot using state validation | |
CN101755269B (zh) | 具有安全虚拟机的设备 | |
US20050060568A1 (en) | Controlling access to data | |
US9064129B2 (en) | Managing data | |
US20030196096A1 (en) | Microcode patch authentication | |
GB2404536A (en) | Protection of data using software wrappers | |
EP2051181A1 (en) | Information terminal, security device, data protection method, and data protection program | |
CN106055936A (zh) | 可执行程序数据包加密/解密方法及装置 | |
JP6387908B2 (ja) | 認証システム | |
JP4664055B2 (ja) | プログラム分割装置、プログラム実行装置、プログラム分割方法及びプログラム実行方法 | |
WO2006046484A1 (ja) | 認証方法 | |
CN115795438A (zh) | 应用程序授权的方法、系统及可读存储介质 | |
US20080155690A1 (en) | System and Method for Authenticating and Validating the Linkage Between Input Files and Output Files in a Computational Process | |
CN117828580A (zh) | 一种应用程序认证方法及装置 | |
CN111639353B (zh) | 一种数据管理方法、装置、嵌入式设备及存储介质 | |
CN112825093B (zh) | 安全基线检查方法、主机、服务器、电子设备及存储介质 | |
Murti et al. | Security in embedded systems | |
CN117892268A (zh) | 一种分布式的水印嵌入软件保护方法 | |
CN114329564A (zh) | 私有化格式文件的处理方法、电子设备及介质 | |
Maña et al. | Protected computing vs. trusted computing | |
Ramírez López et al. | Guidelines towards secure SSL pinning in mobile applicationsand | |
CN116263815A (zh) | 一种基于jwt的软件授权方法 |
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 |