CN114117363A - 一种动态生成License验证方式的授权方法及存储介质 - Google Patents
一种动态生成License验证方式的授权方法及存储介质 Download PDFInfo
- Publication number
- CN114117363A CN114117363A CN202111455546.2A CN202111455546A CN114117363A CN 114117363 A CN114117363 A CN 114117363A CN 202111455546 A CN202111455546 A CN 202111455546A CN 114117363 A CN114117363 A CN 114117363A
- Authority
- CN
- China
- Prior art keywords
- authorization
- license
- class
- information
- generating
- 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
- 238000013475 authorization Methods 0.000 title claims abstract description 125
- 238000012795 verification Methods 0.000 title claims abstract description 104
- 238000000034 method Methods 0.000 title claims abstract description 30
- 238000004590 computer program Methods 0.000 claims description 5
- 238000005457 optimization Methods 0.000 description 6
- 238000010586 diagram Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 230000003340 mental effect Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 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/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
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/30—Authentication, i.e. establishing the identity or authorisation of security principals
- G06F21/44—Program or device authentication
-
- 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)
- Software Systems (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Health & Medical Sciences (AREA)
- Bioethics (AREA)
- General Health & Medical Sciences (AREA)
- Multimedia (AREA)
- Technology Law (AREA)
- Storage Device Security (AREA)
Abstract
本发明涉及一种动态生成License验证方式的授权方法及存储介质,所述方法包括以下步骤:获取机器上的特征码,通过加密得到License文件;Java应用启动时,读取License文件中的License信息,将读取的信息中的key信息作为成员变量名及值信息作为成员变量值存储在字节码动态生成的类中;通过字节码技术,生成验证License信息的授权验证类;将生成的授权验证类实例化,传入Java应用生成验证任务,验证License文件中的信息,若授权失败,则终止当前程序。验证License文件的代码是通过字节码方式生成的,即使Java项目的class文件被拿到了,通过反编译class文件,也无法通过全文搜索到License验证的代码。
Description
技术领域
本发明涉及Java应用安全技术领域,特别涉及一种动态生成License验证方式的授权方法及存储介质。
背景技术
Java语言是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。
Java软件主流的授权是生成一个license文件,在该文件中记录授权需要的字段及加密签名字段。Java应用在启动、运行中时去读取license文件,根据license文件中的数据,判断授权的真假。Java是一种易于被反编译的语言,用户拿到Java语言编写的软件后,通过class字节码文件可反编译代码,结合授权不通过给出的提示,通过全文搜索的方式,很容易就找到授权验证的相关代码,修改代码后可绕过授权。而现有的Java应用程序保护方法中,如公开号为CN112733094A的一种Java应用程序的安全保护方法,通过使用Go语音给加密后的应用加壳,并将解密秘钥、授权校验算法写进Go编写的程序里面,但Go语言写的壳程序仍然可能被破解,最终通过Go破解到Java应用;如公开号为CN109460674A的一种JAVA应用程序保护方法,通过加解密链接库,基于加密秘钥对目标应用程序进行加密处理,生成加密应用程序,然而Java语言是一种跨平台的语言,但是编写链接库的语言不是,在不同的机器上很可能需要重新编译,在有些版本的机器上可能编译不通过。
发明内容
为此,需要提供一种动态生成License验证方式的授权方法及存储介质,解决现有Java易于被反编译,容易被找到授权验证的相关代码的问题。
为实现上述目的,发明人提供了一种动态生成License验证方式的授权方法,包括以下步骤:
获取机器上的特征码,通过加密得到License文件;
Java应用启动时,读取License文件中的License信息,将读取的信息中的key信息作为成员变量名及值信息作为成员变量值存储在字节码动态生成的类中;
通过字节码技术,生成验证License信息的授权验证类;
将生成的授权验证类实例化,传入Java应用生成验证任务,验证License文件中的信息,若授权失败,则终止当前程序。
进一步优化,所述特征码包括MAC地址、硬盘编号和CPU编号中的一种或者多种。
进一步优化,所述步骤“获取机器上的特征码,通过加密得到License文件”具体包括以下步骤:
获取机器上的特征码以及明文字段,通过加密技术及签名技术生成密文及签名,将明文字段、密文及签名放置到License文件中。
进一步优化,所述步骤“生成验证License信息的授权验证类”具体包括以下步骤:
随机生成验证License信息的授权验证类。
进一步优化,所述步骤“将生成的授权验证类实例化,传入Java应用生成验证任务,验证License文件中的License信息,若授权失败,则终止当前程序”具体包括以下步骤:
将生成的授权验证类实例化,传入Java应用中的由字节码动态生成TimerTask定时任务中;
定时任务根据定时时间验证License文件中的License信息,检查授权;
若检查授权失败,则终止当前应用。
还提供了另一个技术方案:一种存储介质,所述存储介质存储有计算机程序,所述计算机程序被处理器运行时执行以下步骤:
获取机器上的特征码,通过加密得到License文件;
Java应用启动时,读取License文件中的License信息,将读取的信息中的key信息作为成员变量名及值信息作为成员变量值存储在字节码动态生成的类中;
通过字节码技术,生成验证License信息的授权验证类;
将生成的授权验证类实例化,传入Java应用生成验证任务,验证License文件中的信息,若授权失败,则终止当前程序。
进一步优化,所述特征码包括MAC地址、硬盘编号和CPU编号中的一种或者多种。
进一步优化,所述步骤“获取机器上的特征码,通过加密得到License文件”具体包括以下步骤:
获取机器上的特征码以及明文字段,通过加密技术及签名技术生成密文及签名,将明文字段、密文及签名放置到License文件中。
进一步优化,所述步骤“生成验证License信息的授权验证类”具体包括以下步骤:
随机生成验证License信息的授权验证类。
进一步优化,所述步骤“将生成的授权验证类实例化,传入Java应用生成验证任务,验证License文件中的License信息,若授权失败,则终止当前程序”具体包括以下步骤:
将生成的授权验证类实例化,传入Java应用中的由字节码动态生成TimerTask定时任务中;
定时任务根据定时时间验证License文件中的License信息,检查授权;
若检查授权失败,则终止当前应用。
区别于现有技术,上述技术方案,通过获取机器上的特征码,通过加密得到License文件,当Java应用启动,读取License文件中的信息时,将读取到的key信息作为成员变量名及值信息作为成员变量值存储在字节码动态生成的类中,再通过字节码技术,生成验证License文件的授权验证类,将生成的授权验证类实例化,传入Java应用生成相应的验证任务,验证License文件中的License信息,若授权失败,则终止当前程序。其中,验证License文件的代码是通过字节码方式生成的,即使Java项目的class文件被拿到了,通过反编译class文件,也无法通过全文搜索到License验证的代码。
附图说明
图1为具体实施方式所述动态生成License验证方式的授权方法的一种流程示意图;
图2为具体实施方式所述存储介质的一种结构示意图。
具体实施方式
为详细说明技术方案的技术内容、构造特征、所实现目的及效果,以下结合具体实施例并配合附图详予说明。
请参阅图1,本实施例提供了一种动态生成License验证方式的授权方法,包括以下步骤:
S110:获取机器上的特征码,通过加密得到License文件;其中机器的特征码包括MAC地址、硬盘编号和CPU编号,当获取机器上的特征码时,可以从机器的MAC地址、硬盘编号和CPU编号中获取一种或者多种,如只获取MAC地址作为特征码,或者同时获取硬盘编号和CPU编号作为特征码。
S120:Java应用启动时,读取License文件中的License信息,将读取的信息中的key信息作为成员变量名及值信息作为成员变量值存储在字节码动态生成的类中;其中,动态生成的类的包名与类名通过特殊处理,即便反编译,也无法通过全文搜索找到。
S130:通过字节码技术,生成验证License信息的授权验证类;字节码技术加载的代码字符串为通过特殊处理的代码字符串,即便被反编译了也无法通过类名、提示信息等全文搜索查询到相应的代码。
S140:将生成的授权验证类实例化,传入Java应用生成验证任务,验证License文件中的信息,若授权失败,则终止当前程序。
通过获取机器上的特征码,通过加密得到License文件,当Java应用启动,读取License文件中的信息时,将读取到的key信息作为成员变量名及值信息作为成员变量值存储在字节码动态生成的类中,再通过字节码技术,生成验证License文件的授权验证类,将生成的授权验证类实例化,传入Java应用生成相应的验证任务,验证License文件中的License信息,若授权失败,则终止当前程序。其中,验证License文件的代码是通过字节码方式生成的,即使Java项目的class文件被拿到了,通过反编译class文件,也无法通过全文搜索到License验证的代码。同时将所有可能暴露验证代码的文字信息都通过特殊处理,在反编译出来的代码里面是一串无意义字符串。
在本实施例中,步骤“获取机器上的特征码,通过加密得到License文件”具体包括以下步骤:
获取机器上的特征码以及明文字段,通过加密技术及签名技术生成密文及签名,将明文字段、密文及签名放置到License文件中。
在获取机器上的特征码时,同时获取一些明文字段,通过加密签名等特有手段生成密文、签名等,将获取的明文、密文、签名等放置到License文件中。通过采用加密和签名双重保证,保证License文件的安全性。
在本实施例中,步骤“生成验证License信息的授权验证类”具体包括以下步骤:
随机生成验证License信息的授权验证类。
由于验证的代码是通过字节码随机生成的,每次生成的包名和类名都不一样,即使通过报错信息或者debug抓取到本次运行的类,通过类名称依然无法从反编译的文件中找到源码。
在本实施例中,步骤“将生成的授权验证类实例化,传入Java应用生成验证任务,验证License文件中的License信息,若授权失败,则终止当前程序”具体包括以下步骤:
将生成的授权验证类实例化,传入Java应用中的由字节码动态生成TimerTask定时任务中;
定时任务根据定时时间验证License文件中的License信息,检查授权;
若检查授权失败,则终止当前应用。
通过将生成的授权验证类实例化,传入Java应用的中由字节码动态生成TimerTask定时任务中,定时任务根据定时时间验证License文件中的License信息,验证机器的特征码和License信息,若授权通过,则继续运行当前应用,等待下一次校验任务,而当检查授权失败,则终止当前应用,通过定时校验避免程序运行过程中被反编译。在其他实施例中,也可以在Java应用启动时,生成校验任务进行验证License文件中的License信息,检查授权,而校验通过后,不再进行校验。
以上的存储License信息的类、验证License信息的授权验证类、以及启动验证任务的类,皆是通过动态字节码的方式生成,生成这些类的特点在于:存储License信息类的成员变量名是动态生成的,无法通过搜索反编译代码定位;用于生成存储License信息类的全限定类名通过编码处理,无法通过搜索反编译代码定位;授权验证类与启动验证任务类的全限定类名是动态生成的,无法通过搜索反编译代码定位;用于生成授权验证类与启动验证任务类的相关方法、成员变量名、构造函数代码都是通过编码处理,无法通过搜索反编译代码获取。
请参阅图2,另一实施例中,一种存储介质,所述存储介质存储有计算机程序,所述计算机程序被处理器运行时执行以下步骤:
获取机器上的特征码,通过加密得到License文件;其中机器的特征码包括MAC地址、硬盘编号和CPU编号,当获取机器上的特征码时,可以从机器的MAC地址、硬盘编号和CPU编号中获取一种或者多种,如只获取MAC地址作为特征码,或者同时获取硬盘编号和CPU编号作为特征码。
Java应用启动时,读取License文件中的License信息,将读取的信息中的key信息作为成员变量名及值信息作为成员变量值存储在字节码动态生成的类中;其中,动态生成的类的包名与类名通过特殊处理,即便反编译,也无法通过全文搜索找到。
通过字节码技术,生成验证License信息的授权验证类;字节码技术加载的代码字符串为通过特殊处理的代码字符串,即便被反编译了也无法通过类名、提示信息等全文搜索查询到相应的代码。
将生成的授权验证类实例化,传入Java应用生成验证任务,验证License文件中的信息,若授权失败,则终止当前程序。
通过获取机器上的特征码,通过加密得到License文件,当Java应用启动,读取License文件中的信息时,将读取到的key信息作为成员变量名及值信息作为成员变量值存储在字节码动态生成的类中,再通过字节码技术,生成验证License文件的授权验证类,将生成的授权验证类实例化,传入Java应用生成相应的验证任务,验证License文件中的License信息,若授权失败,则终止当前程序。其中,验证License文件的代码是通过字节码方式生成的,即使Java项目的class文件被拿到了,通过反编译class文件,也无法通过全文搜索到License验证的代码。同时将所有可能暴露验证代码的文字信息都通过特殊处理,在反编译出来的代码里面是一串无意义字符串。
在本实施例中,步骤“获取机器上的特征码,通过加密得到License文件”具体包括以下步骤:
获取机器上的特征码以及明文字段,通过加密技术及签名技术生成密文及签名,将明文字段、密文及签名放置到License文件中。
在获取机器上的特征码时,同时获取一些明文字段,通过加密签名等特有手段生成密文、签名等,将获取的明文、密文、签名等放置到License文件中。通过采用加密和签名双重保证,保证License文件的安全性。
在本实施例中,步骤“生成验证License信息的授权验证类”具体包括以下步骤:
随机生成验证License信息的授权验证类。
由于验证的代码是通过字节码随机生成的,每次生成的包名和类名都不一样,即使通过报错信息或者debug抓取到本次运行的类,通过类名称依然无法从反编译的文件中找到源码。
在本实施例中,所述步骤“将生成的授权验证类实例化,传入Java应用生成验证任务,验证License文件中的License信息,若授权失败,则终止当前程序”具体包括以下步骤:
将生成的授权验证类实例化,传入Java应用中的由字节码动态生成TimerTask定时任务中;
定时任务根据定时时间验证License文件中的License信息,检查授权;
若检查授权失败,则终止当前应用。
通过将生成的授权验证类实例化,传入Java应用的中由字节码动态生成TimerTask定时任务中,定时任务根据定时时间验证License文件中的License信息,验证机器的特征码和License信息,若授权通过,则继续运行当前应用,等待下一次校验任务,而当检查授权失败,则终止当前应用,通过定时校验避免程序运行过程中被反编译。在其他实施例中,也可以在Java应用启动时,生成校验任务进行验证License文件中的License信息,检查授权,而校验通过后,不再进行校验。
以上的存储License信息的类、验证License信息的授权验证类、以及启动验证任务的类,皆是通过动态字节码的方式生成,生成这些类的特点在于:存储License信息类的成员变量名是动态生成的,无法通过搜索反编译代码定位;用于生成存储License信息类的全限定类名通过编码处理,无法通过搜索反编译代码定位;授权验证类与启动验证任务类的全限定类名是动态生成的,无法通过搜索反编译代码定位;用于生成授权验证类与启动验证任务类的相关方法、成员变量名、构造函数代码都是通过编码处理,无法通过搜索反编译代码获取。
需要说明的是,尽管在本文中已经对上述各实施例进行了描述,但并非因此限制本发明的专利保护范围。因此,基于本发明的创新理念,对本文所述实施例进行的变更和修改,或利用本发明说明书及附图内容所作的等效结构或等效流程变换,直接或间接地将以上技术方案运用在其他相关的技术领域,均包括在本发明的专利保护范围之内。
Claims (10)
1.一种动态生成License验证方式的授权方法,其特征在于,包括以下步骤:
获取机器上的特征码,通过加密得到License文件;
Java应用启动时,读取License文件中的License信息,将读取的信息中的key信息作为成员变量名及值信息作为成员变量值存储在字节码动态生成的类中;
通过字节码技术,生成验证License信息的授权验证类;
将生成的授权验证类实例化,传入Java应用生成验证任务,验证License文件中的信息,若授权失败,则终止当前程序。
2.根据权利要求1所述动态生成License验证方式的授权方法,其特征在于,所述特征码包括MAC地址、硬盘编号和CPU编号中的一种或者多种。
3.根据权利要求1所述动态生成License验证方式的授权方法,其特征在于,所述步骤“获取机器上的特征码,通过加密得到License文件”具体包括以下步骤:
获取机器上的特征码以及明文字段,通过加密技术及签名技术生成密文及签名,将明文字段、密文及签名放置到License文件中。
4.根据权利要求1所述动态生成License验证方式的授权方法,其特征在于,所述步骤“生成验证License信息的授权验证类”具体包括以下步骤:
随机生成验证License信息的授权验证类。
5.根据权利要求1所述动态生成License验证方式的授权方法,其特征在于,所述步骤“将生成的授权验证类实例化,传入Java应用生成验证任务,验证License文件中的License信息,若授权失败,则终止当前程序”具体包括以下步骤:
将生成的授权验证类实例化,传入Java应用中由字节码动态生成的TimerTask定时任务中;
定时任务根据定时时间验证License文件中的License信息,检查授权;
若检查授权失败,则终止当前应用。
6.一种存储介质,所述存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器运行时执行以下步骤:
获取机器上的特征码,通过加密得到License文件;
Java应用启动时,读取License文件中的License信息,将读取的信息中的key信息作为成员变量名及值信息作为成员变量值存储在字节码动态生成的类中;
通过字节码技术,生成验证License信息的授权验证类;
将生成的授权验证类实例化,传入Java应用生成验证任务,验证License文件中的信息,若授权失败,则终止当前程序。
7.根据权利要求6所述存储介质,其特征在于,所述特征码包括MAC地址、硬盘编号和CPU编号中的一种或者多种。
8.根据权利要求6所述存储介质,其特征在于,所述步骤“获取机器上的特征码,通过加密得到License文件”具体包括以下步骤:
获取机器上的特征码以及明文字段,通过加密技术及签名技术生成密文及签名,将明文字段、密文及签名放置到License文件中。
9.根据权利要求6所述存储介质,其特征在于,所述步骤“生成验证License信息的授权验证类”具体包括以下步骤:
随机生成验证License信息的授权验证类。
10.根据权利要求6所述存储介质,其特征在于,所述步骤“将生成的授权验证类实例化,传入Java应用生成验证任务,验证License文件中的License信息,若授权失败,则终止当前程序”具体包括以下步骤:
将生成的授权验证类实例化,传入Java应用中的由字节码动态生成TimerTask定时任务中;
定时任务根据定时时间验证License文件中的License信息,检查授权;
若检查授权失败,则终止当前应用。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111455546.2A CN114117363A (zh) | 2021-12-01 | 2021-12-01 | 一种动态生成License验证方式的授权方法及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111455546.2A CN114117363A (zh) | 2021-12-01 | 2021-12-01 | 一种动态生成License验证方式的授权方法及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114117363A true CN114117363A (zh) | 2022-03-01 |
Family
ID=80369349
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111455546.2A Pending CN114117363A (zh) | 2021-12-01 | 2021-12-01 | 一种动态生成License验证方式的授权方法及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114117363A (zh) |
-
2021
- 2021-12-01 CN CN202111455546.2A patent/CN114117363A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110069905B (zh) | 一种Springboot程序加密和解密的装置及方法 | |
KR101597251B1 (ko) | 소프트웨어 애플리케이션들의 화이트박스 구현들을 생성하는 시스템 및 방법 | |
US9602289B2 (en) | Steganographic embedding of executable code | |
US8892893B2 (en) | Systems and methods for watermarking software and other media | |
US7254586B2 (en) | Secure and opaque type library providing secure data protection of variables | |
KR101490047B1 (ko) | 자가변환 기반 애플리케이션 코드 난독화 장치 및 그 방법 | |
US20160203087A1 (en) | Method for providing security for common intermediate language-based program | |
KR101054318B1 (ko) | 정보 처리 시스템 및 프로그램을 기록한 컴퓨터로 읽을 수 있는 매체 | |
US9892661B2 (en) | Steganographic embedding of hidden payload | |
US20080263366A1 (en) | Self-verifying software to prevent reverse engineering and piracy | |
US20110271350A1 (en) | method for protecting software | |
CN107092816B (zh) | 一种Android应用程序加固方法 | |
CN107430650B (zh) | 保护计算机程序以抵御逆向工程 | |
CN111475824A (zh) | 数据访问方法、装置、设备和存储介质 | |
US20120173497A1 (en) | Defense-in-depth security for bytecode executables | |
JP2001118034A (ja) | Icカード利用装置、icカード及び記憶媒体 | |
CN112115430A (zh) | 一种apk的加固方法、电子设备及存储介质 | |
CN114117363A (zh) | 一种动态生成License验证方式的授权方法及存储介质 | |
CN108376212B (zh) | 执行代码安全保护方法、装置及电子装置 | |
CN114357391A (zh) | 数据加、解密方法及计算机存储介质 | |
CN114637985A (zh) | 一种基于多环境参数的Android应用登录伪造识别方法 | |
CN116089983B (zh) | 一种py文件的加固编译方法及装置 | |
CN112685697B (zh) | 一种防止安卓应用被破解篡改的方法及终端 | |
CN112329035B (zh) | 一种基于jar程序解析加密解密的方法、系统及存储介质 | |
Otsuki et al. | Overcoming the obfuscation method of the dynamic name resolution |
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 |