CN111143787B - 提高Java软件破解难度的方法及装置、验证方法及验证装置 - Google Patents

提高Java软件破解难度的方法及装置、验证方法及验证装置 Download PDF

Info

Publication number
CN111143787B
CN111143787B CN201911423655.9A CN201911423655A CN111143787B CN 111143787 B CN111143787 B CN 111143787B CN 201911423655 A CN201911423655 A CN 201911423655A CN 111143787 B CN111143787 B CN 111143787B
Authority
CN
China
Prior art keywords
class
jar file
software
java
code
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
Application number
CN201911423655.9A
Other languages
English (en)
Other versions
CN111143787A (zh
Inventor
乐以长
李薇薇
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Founder International Beijing Co Ltd
Original Assignee
Founder International Beijing Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Founder International Beijing Co Ltd filed Critical Founder International Beijing Co Ltd
Priority to CN201911423655.9A priority Critical patent/CN111143787B/zh
Publication of CN111143787A publication Critical patent/CN111143787A/zh
Application granted granted Critical
Publication of CN111143787B publication Critical patent/CN111143787B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/12Protecting executable software
    • G06F21/121Restricting unauthorised execution of programs
    • G06F21/125Restricting 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)
  • Computer Security & Cryptography (AREA)
  • Theoretical Computer Science (AREA)
  • Multimedia (AREA)
  • Technology Law (AREA)
  • Computer Hardware Design (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

本发明涉及一种提高Java软件破解难度的方法及装置、验证方法及验证装置,包括在Java软件的源代码中新增AOP切面类,得到Java软件新增后的源代码;对源代码进行编译并将编译结果打包成第一Jar文件;对第一Jar文件进行代码混淆并将混淆结果打包成第二Jar文件,获取第一摘要信息并将第一摘要信息硬编码到切面类中;再次对源代码进行编译并将编译结果打包成第三Jar文件;对第三Jar文件进行代码混淆并打包成最终发布的Jar文件。本申请可以通过编译器将防篡改模块的代码自动织入大量业务处理类的方法中,在Java软件多处识别软件发布后是否有人篡改软件版权保护模块,结合代码混淆技术,将大幅增大Java软件破解的工作量和破解难度,加大了Java软件的版权保护力度。

Description

提高Java软件破解难度的方法及装置、验证方法及验证装置
技术领域
本发明属于软件版权保护技术领域,具体涉及一种提高Java软件破解难度的方法及装置、验证方法及验证装置。
背景技术
Java程序编译后的二进类文件很容易被反编译获得源代码,通过源代码进行反向工程,或者在获得源代码后,对软件版权保护部分进行修改再进行编译,就能够对软件进行破解,这就对Java程序的软件版权保护提出挑战,迫切需要保护Java软件的更加有效的方法。
目前很多软件开发商提供的软件版权保护模块往往会依据计算机唯一的特征码信息如网卡号、硬盘号或者CPU的ID号等一项或多项信息得到计算机指纹信息,将软件许可和计算机硬件进行绑定。软件开发商也经常将授权许可信息保存在硬件加密狗中,程序在运行时读取加密狗的信息来判断软件是否被授权。
软件破解者通常通过对Java程序进行反编译,再编写一段代码伪造计算机指纹信息,或者编写一段绕过版权验证的代码,即可对Java软件进行破解。目前最简便实用的解决方法就是对Java程序进行代码混淆,代码混淆技术就是在不改变程序运行逻辑的情况下,使得混淆后的程序被反编译后程序可读性很差,难以再次进行修改,从而达到保护Java软件的目的。
在对Java软件进行破解时,破解者一般会从代码量小、逻辑简单的类入手;如果将业务处理代码和版权保护代码混在一起,混淆后再发布软件也很难被破解。但是为了便于维护以及业务处理模块开发人员和版权保护模块开发人员的工作分工,软件开发商会将业务处理代码和读取授权信息本身的代码尽量分离,减少耦合。由于这种业务处理代码和软件版权保护代码的分离,对混淆后的软件版权保护代码进行反编译然后进行篡改还是可能的。
针对上述问题,专利号为ZL201110322930.5,名称为《提高Java软件破解难度的方法及装置、版权验证方法》的发明专利中公开了一种通过在核心业务类提取软件版权保护模块的数字摘要信息并将其与开发阶段硬编码到核心业务类的软件版权保护模块的数字摘要信息进行比较,来识别软件是否被破解。
采用该发明所公开的方法选择代码量大、业务逻辑复杂的一个或多个核心业务类作为版权验证类,能够解决业务较为单一的Java软件的版权保护难题。但是对存在大量业务且业务相对独立的应用场景如现在流行的微服务架构,这种方法就有明显的缺陷。基于微服务架构的应用系统提供了大量的微服务,每一个微服务通过一个或多个Java类对外提供服务,每一个Java类本身就是一个业务处理类,一个系统存在少则几十个多则成百上千个业务处理类。采用该发明的方法将对大量的业务处理类的源代码进行手工修改,将第一摘要信息写入其中,将会把业务无关的防篡改验证代码写入业务处理类中,不利于业务处理模块开发人员和版权保护模块开发人员的工作分工,这种方式也会污染代码,造成处理业务逻辑的源代码可读性差,难以维护;并且这种方式工作量巨大、容易出现遗漏,在程序出现变化时,混淆后的软件版权保护模块的数字摘要信息可能会出现变化,此时就要重复这些枯燥又容易出错的工作。
发明内容
有鉴于此,本发明的目的在于克服现有技术的不足,提供一种提高Java软件破解难度的方法、装置及版权验证方法、装置,以解决现有技术中难以对存在大量业务且业务相对独立应用场景的软件版权进行保护和验证的问题。
为实现以上目的,本发明采用如下技术方案:一种提高Java软件破解难度的方法,包括:
在Java软件的源代码中新增AOP切面类,得到Java软件的新增AOP切面类后的源代码,所述新增AOP切面类后的源代码包括:业务处理类的代码、软件版权保护代码以及所述AOP切面类的代码,所述AOP切面类用于指定切点并提供软件防篡改验证处理代码,所述切点为执行软件防篡改验证操作的位置;
编译所述Java软件的新增AOP切面类后的源代码并将编译结果打包成第一Jar文件;
采用预设的Jar文件的代码混淆选项对所述第一Jar文件的非程序入口类及非程序入口方法进行代码混淆并将混淆结果打包成第二Jar文件;
根据预设的提取对象,提取所述第二Jar文件中的第一摘要信息,所述预设的提取对象为软件版权保护模块涉及的Java类和/或非Java程序,所述第一摘要信息为混淆过的Java类和/或非Java程序的数字摘要信息;
将所述第一摘要信息作为常量信息硬编码到所述AOP切面类中,得到修改后的Java软件的源代码;
编译所述修改后的Java软件的源代码,并将编译结果打包成第三Jar文件;
采用所述预设的Jar文件的代码混淆选项对所述第三Jar文件的非程序入口类及非程序入口方法进行代码混淆并打包成第四Jar文件,将所述第四Jar文件作为最终发布的Jar文件;
其中,所述Jar文件的代码混淆选项包括Jar文件中的程序入口类及程序入口方法。
进一步的,所述AOP切面类,包括:
一个或多个切面,所述切面由切点和通知组成;
其中,所述切点根据预设的规则选自业务处理类的方法;所述通知在编译时被织入所述业务处理类的切点位置,用于执行软件防篡改验证操作。
进一步的,根据预设的规则选择所述切点,所述规则基于Java类的包名、类的修饰符、类方法的修饰符、类方法的形式参数、类方法的返回值类型选择所述业务处理类的方法。
进一步的,所述编译Java软件的源代码,和/或,所述编译所述修改后的Java软件的源代码,采用预设的编译器进行编译,所述预设的编译器支持织入,以将AOP切面类中和切点匹配的通知代码编译进目标二进制类中,所述目标二进制类物理上包含所述AOP切面类的通知代码。
进一步的,所述目标二进制类是将源代码转换为二进制的目标代码。
进一步的,还包括:
设置所述AOP切面类,具体包括:
定义所述AOP切面类的切点和通知;
所述AOP切面类在业务处理类的方法之前执行所述软件防篡改验证。
本申请实施例提供一种提高Java软件破解难度的版权验证方法,包括:
加载最终发布的Jar文件,所述最终发布的Jar文件采用上述一种提高Java软件破解难度的方法生成;
运行所述最终发布的Jar文件时,提取所述最终发布的Jar文件的第二摘要信息,获取硬编码到切面类并被编译器织入到业务处理类中的所述第一摘要信息,以及比对所述第一摘要信息和所述第二摘要信息是否相同得到验证结果。
进一步的,所述提取所述最终发布的Jar文件的第二摘要信息,获取硬编码到切面类并被编译器织入到业务处理类中的所述第一摘要信息,以及比对所述第一摘要信息和所述第二摘要信息是否相同得到验证结果,包括:
在所述最终发布的Jar文件运行到被编译器织入了所述AOP切面类中的通知代码的业务处理类的切点位置,通知代码将解析所述最终发布的Jar文件,提取第二摘要信息;获取硬编码到切面类并被编译器织入到业务处理类中的第一摘要信息;比对所述第二摘要信息与所述第一摘要信息是否相同,如果相同,则说明Java软件版权保护模块未被篡改;如果不同,则说明Java软件版权保护模块被篡改。
本申请实施例提供一种提高Java软件破解难度的装置,包括:
AOP切面类,用于指定切点并提供软件防篡改验证处理代码,所述切点为执行软件防篡改验证操作的位置;
第一打包模块,用于编译所述Java软件的新增AOP切面类后的源代码并将编译结果打包成第一Jar文件;
第二打包模块,用于采用预设的Jar文件的代码混淆选项对所述第一Jar文件的非程序入口类及非程序入口方法进行代码混淆并将混淆结果打包成第二Jar文件;
提取模块,用于根据预设的提取对象,提取所述第二Jar文件中的第一摘要信息,所述预设的提取对象为软件版权保护模块涉及的Java类和/或非Java程序,所述第一摘要信息为混淆过的Java类和/或非Java程序的数字摘要信息;
第三打包模块,用于编译所述修改后的Java软件的源代码,并将编译结果打包成第三Jar文件;
第四打包模块,采用所述预设的Jar文件的代码混淆选项对所述第三Jar文件的非程序入口类及非程序入口方法进行代码混淆并打包成第四Jar文件,将所述第四Jar文件作为最终发布的Jar文件;
其中,所述Jar文件的代码混淆选项包括Jar文件的程序入口类及程序入口方法。
本申请实施例提供一种提高Java软件破解难度的验证装置,包括:
加载模块,用于加载最终发布的Jar文件,所述最终发布的Jar文件采用上述提到的提高Java软件破解难度的方法生成;
软件防篡改验证模块,用于运行所述最终发布的Jar文件时,提取所述最终发布的Jar文件的第二摘要信息,获取硬编码到切面类并被编译器织入到业务处理类中的所述第一摘要信息,以及比对所述第一摘要信息和所述第二摘要信息是否相同得到验证结果。
本发明采用以上技术方案,能够达到的有益效果包括:
通过采用本发明通过特殊编译器将软件防篡改验证的代码以及版权保护模块的数字摘要信息编译进多个业务处理类中的多个方法,并进行代码混淆,将大幅增大Java软件破解的工作量和破解难度,提高Java软件的版权保护强度,更好的保护知识产权。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明一种提高Java软件破解难度的方法的步骤示意图;
图2为本发明一种提高Java软件破解难度的方法的原理示意图;
图3为本发明一种提高Java软件破解难度的验证方法的步骤示意图;
图4为本发明一种提高Java软件破解难度的装置的结构示意图;
图5为本发明一种提高Java软件破解难度的验证装置的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将对本发明的技术方案进行详细的描述。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所得到的所有其它实施方式,都属于本发明所保护的范围。
下面结合附图介绍本申请实施例中提供的一个具体的提高Java软件破解难度的方法及装置、验证方法及验证装置。
如图1所示,本申请实施例中提供的一种提高Java软件破解难度的方法,包括:
S101,在Java软件的源代码中新增AOP切面类,得到Java软件的新增AOP切面类后的源代码,所述新增AOP切面类后的源代码包括:业务处理类的代码、软件版权保护代码以及所述AOP切面类的代码,所述AOP切面类用于指定切点并提供软件防篡改验证处理代码,所述切点为执行软件防篡改验证操作的位置;
S102,编译所述Java软件的新增AOP切面类后的源代码并将编译结果打包成第一Jar文件;
S103,采用预设的Jar文件的代码混淆选项对所述第一Jar文件的非程序入口类及非程序入口方法进行代码混淆并将混淆结果打包成第二Jar文件;
S104,根据预设的提取对象,提取所述第二Jar文件中的第一摘要信息,所述预设的提取对象为软件版权保护模块涉及的Java类和/或非Java程序,所述第一摘要信息为混淆过的Java类和/或非Java程序的数字摘要信息;
S105,将所述第一摘要信息作为常量信息硬编码到所述AOP切面类中,得到修改后的Java软件的源代码;
S106,编译所述修改后的Java软件的源代码,并将编译结果打包成第三Jar文件;
S107,采用所述预设的Jar文件的代码混淆选项对所述第三Jar文件的非程序入口类及非程序入口方法进行代码混淆并打包成第四Jar文件,将所述第四Jar文件作为最终发布的Jar文件;
其中,所述Jar文件的代码混淆选项包括Jar文件中的程序入口类及程序入口方法。
如图2所示,一种提高Java软件破解难度的方法的工作原理为:
本发明通过将防篡改验证代码织入业务处理类的切点位置,然后对代码进行混淆从而提高Java软件版权保护力度功能的处理过程。包括以下方式:
增加一个用于指定执行软件防篡改验证操作的位置并提供软件防篡改验证处理代码的AOP切面类,此处为名为AuthAspect切面类,使用aspectj语言描述切点:
Figure GDA0003348819350000081
Figure GDA0003348819350000091
上述代码提供了一个切面,该切面表示在com.easymap.ezserver7包及其子包下所有类中第一个参数为ServletContext类型,第二个参数为HttpServletRequest类型的公有方法的前面织入防篡改验证代码,before()表示前置通知,在业务逻辑处理的方法之前检查软件是否被破解或被授权。
AOP(Aspect Oriented Programming,面向切面编程)是一种新的程序设计方法,它的目标是将代码各个部分进行分离,从而获得程序逻辑中各部分代码低耦合性的隔离效果,利用AOP,可以不改变程序字节码或者汇编代码文件,而是将代码插入AOP切面,然后再将代码进行执行。通过AOP,不对用户程序有任何侵入性,也即不需要用户修改自己的代码,不需要用户提供程序源代码给服务商,不对用户依赖的程序语言核心有任何修改,可以避免侵犯第三方库和语言标准库函数的知识产权,也不需要修改查看和修改云租户程序的源代码。
将软件版权保护模块涉及的Java类LicenseInfoContext、LicenseContext和ServerSetupListener预先设置为提取对象;
编译软件的源代码并将编译结果打包成第一Jar文件,源代码包括业务处理代码、软件版权保护代码以及上述实施例中所说的AOP切面类的代码;
本申请实施例依赖JavaEE应用服务器运行,运行时应用服务器将会加载的所有监听器类Listener、所有服务端程序类Servlet类等,这些类不能混淆;另外第一摘要信息输出装置对应的Sign类,提取第一摘要信息输出装置需要,也不能混淆;在代码混淆装置中将这些类设置为程序入口类,其他类为非程序入口;
采用预设的Jar文件的代码混淆选项对第一Jar文件的非程序入口类及非程序入口方法进行混淆并打包成第二Jar文件;
根据预设的提取对象,提取所述第二Jar文件中的第一摘要信息,提取上述实施例中设置的Java类LicenseInfoContext、LicenseContext和ServerSetupListener混淆后对应类的数字摘要信息,此处为CRC码,为16进制的整数“0xed66eb81L”,并在屏幕打印该信息。
修改软件源代码,将所述第一摘要信息作为常量信息硬编码到步骤S101创建的AuthAspect切面类中,作为其常量信息;
private final int FLAG=0xed66eb81L;
重新编译修改后的软件的源代码并将编译结果打包成第三Jar文件;
采用所述预设的Jar文件的代码混淆选项对第三Jar文件的非程序入口类及非程序入口方法进行混淆并打包成第四Jar文件,将第四Jar文件作为最终发布的Jar文件。
需要说明的是,本申请上述实施例中提到的两次代码混淆没有出现类的变化,即没有追加新类,没有删除类并且没有修改过类名,因此两次混淆前后类的对应关系是固定的。
一些实施例中,所述AOP切面类,包括:
一个或多个切面,所述切面由切点和通知组成;
其中,所述切点根据预设的规则选自业务处理类的方法;所述通知在编译时被织入所述业务处理类的切点位置,用于执行软件防篡改验证操作。
具体的,AuthAspect切面,包含一个或多个由切点(PointCut)和通知(Advice)组成的切面,其中切点(PointCut)选自业务处理类的方法,通知(Advice)将被编译器织入业务处理类的切点位置,在程序运行时通知将在所述切点处执行软件防篡改验证代码验证软件是否被破解和被授权。
优选的,根据预设的规则选择所述切点,此处采用aspectj描述语言来描述所述规则,aspectj语言基于Java类的包名、类的修饰符、类方法的修饰符、类方法的形式参数、类方法的返回值类型等选择所述业务处理类的方法。
具体的,本实施例定义的切点
public*com.easymap.ezserver7..*.*(ServletContext,HttpServletRequest,..))
表示在com.easymap.ezserver7包及其子包下所有类中第一个参数为ServletContext类型,第二个参数为HttpServletRequest类型的公有方法之前织入版权验证代码,before()表示前置通知,在业务逻辑处理的方法之前检查软件是否被破解或被授权,,还可以定义其它多种切点,在此不再赘述。
一些实施例中,所述编译Java软件的源代码,和/或,所述编译所述修改后的Java软件的源代码,采用预设的编译器进行编译,所述预设的编译器支持织入,以将AOP切面类中和切点匹配的通知代码编译进目标二进制类中,所述目标二进制类物理上包含所述AOP切面类的通知代码。
优选的,所述目标二进制类是将源代码转换为二进制的目标代码。
需要说明的是,本申请上述实施例中提到的采用支持编译时织入的特殊编译器进行编译,将切面中和切点匹配的通知代码编译进目标二进制类中,目标二进制类物理上包含切面的通知代码。
一些实施例中,本申请提供的提高Java软件破解难度的方法,还包括:
设置所述AOP切面类,具体包括:
定义所述AOP切面类的切点和通知;
所述AOP切面类在业务处理类的方法之前执行所述防篡改验证。
本申请中提供了一个AOP切面类,在切面类中提供一个或多个由切点(PointCut)和通知(Advice)组成的切面,其中切点(PointCut)选自业务处理类的方法,通知(Advice)用于程序执行时在所述切点处验证软件是否被篡改。本发明实施例提供了一种基于AOP技术提高Java软件破解难度的方法,通过该方法可以通过编译器将软件防篡改验证代码自动织入大量业务处理类的方法中,Java软件在多处识别软件发布后是否有人篡改软件版权保护模块,结合代码混淆技术,将大幅增大Java软件破解的工作量和破解难度,加大了Java软件的版权保护力度。
本申请实施例还提供一种提高Java软件破解难度的验证方法,如图3所示,包括:
S301,加载最终发布的Jar文件,所述最终发布的Jar文件采用上述实施例提供的提高Java软件破解难度的方法生成;
S302,运行所述最终发布的Jar文件时,提取所述最终发布的Jar文件的第二摘要信息,获取硬编码到切面类并被编译器织入到业务处理类中的所述第一摘要信息,以及比对所述第一摘要信息和所述第二摘要信息是否相同得到验证结果。
优选的,所述提取所述最终发布的Jar文件的第二摘要信息,获取硬编码到切面类并被编译器织入到业务处理类中的所述第一摘要信息,以及比对所述第一摘要信息和所述第二摘要信息是否相同得到验证结果,包括:
在所述最终发布的Jar文件运行到被编译器织入了所述AOP切面类中的通知代码的业务处理类的的切点位置,通知代码将解析所述最终发布的Jar文件,提取第二摘要信息;获取硬编码到切面类并被编译器织入到业务处理类中的第一摘要信息;比对所述第二摘要信息与所述第一摘要信息是否相同,如果相同,则说明Java软件版权保护模块未被篡改;如果不同,则说明Java软件版权保护模块被篡改。
具体的,本发明软件未被破解正常运行时软件防篡改验证的过程,具体如下:
用户启动应用服务器加载第四Jar文件;
应用系统在执行到切面指定的切点方法时调用摘要信息得到第二摘要信息“0xed66eb81L”;
将第二摘要信息“0xed66eb81L”和硬编码进切面类AuthAspect并织入到业务处理类中的第一摘要信息“0xed66eb81L”进行比较,发现第二摘要信息和第一摘要信息相同,说明版权保护模块在发布后没有被篡改,软件合法。
本发明软件版权保护模块被篡改后运行时软件防篡改验证的过程,只要对LicenseInfoContext、LicenseContext和ServerSetupListener任何一个类做过修改,混淆后对应的类的二进制码也会出现变化,就不能通过防篡改验证。具体如下:
用户启动应用服务器加载第四Jar文件,应用系统在执行到切面指定的切点方法时提取摘要信息得到第二摘要信息“0x9339b91cL”;将第二摘要信息“0x9339b91cL”和硬编码进切面类AuthAspect并织入到业务处理类中的第一摘要信息“0xed66eb81L”进行比较,发现第二摘要信息和第一摘要信息不相同,说明版权保护模块在发布后被篡改,软件非法。
如图4所示,本申请实施例提供一种提高Java软件破解难度的装置,包括:
AOP切面类401,用于指定切点并提供软件防篡改验证处理代码,所述切点为执行软件防篡改验证操作的位置;
第一打包模块402,用于编译所述Java软件的新增AOP切面类后的源代码并将编译结果打包成第一Jar文件;
第二打包模块403,用于采用预设的Jar文件的代码混淆选项对所述第一Jar文件的非程序入口类及非程序入口方法进行代码混淆并将混淆结果打包成第二Jar文件;
提取模块404,用于根据预设的提取对象,提取所述第二Jar文件中的第一摘要信息,所述预设的提取对象为软件版权保护模块涉及的Java类和/或非Java程序,所述第一摘要信息为混淆过的Java类和/或非Java程序的数字摘要信息;
第三打包模块405,用于编译所述修改后的Java软件的源代码,并将编译结果打包成第三Jar文件;
第四打包模块406,采用所述预设的Jar文件的代码混淆选项对所述第三Jar文件的非程序入口类及非程序入口方法进行代码混淆并打包成第四Jar文件,将所述第四Jar文件作为最终发布的Jar文件;
其中,所述Jar文件的代码混淆选项包括Jar文件的程序入口类及程序入口方法。
本申请提供的提高Java软件破解难度的装置的原理是,AOP切面类401用于指定切点并提供防篡改验证处理代码,所述切点为执行软件防篡改验证操作的位置;第一打包模块402编译所述Java软件的新增AOP切面类后的源代码并将编译结果打包成第一Jar文件;第二打包模块403采用预设的Jar文件的代码混淆选项对所述第一Jar文件的非程序入口类及非程序入口方法进行代码混淆并将混淆结果打包成第二Jar文件;提取模块404根据预设的提取对象,提取所述第二Jar文件中的第一摘要信息,所述预设的提取对象为软件版权保护模块涉及的Java类和/或非Java程序,所述第一摘要信息为混淆过的Java类和/或非Java程序的数字摘要信息;第三打包模块405,用于编译所述修改后的Java软件的源代码,并将编译结果打包成第三Jar文件;第四打包模块406采用所述预设的Jar文件的代码混淆选项对所述第三Jar文件的非程序入口类及非程序入口方法进行代码混淆并打包成第四Jar文件,将所述第四Jar文件作为最终发布的Jar文件。
如图5所示,本申请提供的提高Java软件破解难度的版权验证装置,包括:
加载模块501,用于加载最终发布的Jar文件,所述最终发布的Jar文件采用上述实施例提供的所述提高Java软件破解难度的的方法生成;
软件防篡改验证模块502,用于运行所述最终发布的Jar文件时,提取所述最终发布的Jar文件的第二摘要信息,获取硬编码到切面类并被编译器织入到业务处理类中的所述第一摘要信息,以及比对所述第一摘要信息和所述第二摘要信息是否相同得到验证结果。
需要说明的是,本申请由三个Java类组成,由LicenseInfoContext类、LicenseContext类以及ServerSetupListener类组成。LicenseInfoContext类是一个抽象类,提供了用于对软件许可进行验证和分析的实现方法,另外该类还提供了一个getLicenseInputStream()抽象方法,用于读取不同加密方式的软件许可信息;LicenseContext类是LicenseInfoContext的实现类,实现了getLicenseInputStream()方法,用于从许可文件读取软件许可信息;ServerSetupListener类用于在Web应用启动时调用LicenseContext的方法读取软件许可信息。
本申请提供的提高Java软件破解难度的验证装置的工作原理为,加载模块501加载最终发布的Jar文件,所述最终发布的Jar文件为采用上述实施例提供的所述提高Java软件破解难度的的方法生成;验证模块502运行所述最终发布的Jar文件时,提取所述最终发布的Jar文件的第二摘要信息,获取硬编码到切面类并被编译器织入到业务处理类中的所述第一摘要信息,以及比对所述第一摘要信息和所述第二摘要信息是否相同得到验证结果。
综上所述,本发明提供一种提高Java软件破解难度的方法及装置、验证方法及验证装置,本申请可以通过编译器将版权保护模块的代码自动织入大量业务处理类的方法中,Java软件在多处识别软件发布后是否有人篡改软件版权保护模块,结合代码混淆技术,将大幅增大Java软件破解的工作量和破解难度,加大了Java软件的版权保护力度。
可以理解的是,上述提供的方法实施例与上述的方法实施例对应,相应的具体内容可以相互参考,在此不再赘述。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的查找犯罪嫌疑人的方法。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令的制造品,该指令的方法实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。

Claims (10)

1.一种提高Java软件破解难度的方法,其特征在于,包括:
在Java软件的源代码中新增AOP切面类,得到Java软件的新增AOP切面类后的源代码,所述新增AOP切面类后的源代码包括:业务处理类的代码、软件版权保护代码以及所述AOP切面类的代码,所述AOP切面类用于指定切点并提供软件防篡改验证处理代码,所述切点为执行防篡改验证操作的位置;
编译所述Java软件的新增AOP切面类后的源代码并将编译结果打包成第一Jar文件;
采用预设的Jar文件的代码混淆选项对所述第一Jar文件的非程序入口类及非程序入口方法进行代码混淆并将混淆结果打包成第二Jar文件;
根据预设的提取对象,提取所述第二Jar文件中的第一摘要信息,所述预设的提取对象为软件版权保护模块涉及的Java类和/或非Java程序,所述第一摘要信息为混淆过的Java类和/或非Java程序的数字摘要信息;
将所述第一摘要信息作为常量信息硬编码到所述AOP切面类中,得到修改后的Java软件的源代码;
编译所述修改后的Java软件的源代码,并将编译结果打包成第三Jar文件;
采用所述预设的Jar文件的代码混淆选项对所述第三Jar文件的非程序入口类及非程序入口方法进行代码混淆并打包成第四Jar文件,将所述第四Jar文件作为最终发布的Jar文件;
其中,所述Jar文件的代码混淆选项包括Jar文件中的程序入口类及程序入口方法。
2.根据权利要求1所述的方法,其特征在于,所述AOP切面类,包括:
一个或多个切面,所述切面由切点和通知组成;
其中,所述切点根据预设的规则选自业务处理类的方法;所述通知在编译时被织入所述业务处理类的切点位置,用于执行软件防篡改验证操作。
3.根据权利要求2所述的方法,其特征在于,
根据预设的规则选择所述切点,所述规则基于Java类的包名、类的修饰符、类方法的修饰符、类方法的形式参数、类方法的返回值类型选择所述业务处理类的方法。
4.根据权利要求1所述的方法,其特征在于,
所述编译Java软件的源代码,和/或,所述编译所述修改后的Java软件的源代码,采用预设的编译器进行编译,所述预设的编译器支持织入,以将AOP切面类中和切点匹配的通知代码编译进目标二进制类中,所述目标二进制类物理上包含所述AOP切面类的通知代码。
5.根据权利要求4所述的方法,其特征在于,
所述目标二进制类是将源代码转换为二进制的目标代码。
6.根据权利要求1所述的方法,其特征在于,还包括:
设置所述AOP切面类,具体包括:
定义所述AOP切面类的切点和通知;
所述AOP切面类在业务处理类的方法之前执行所述软件防篡改验证。
7.一种提高Java软件破解难度的验证方法,其特征在于,包括:
加载最终发布的Jar文件,所述最终发布的Jar文件采用如权利要求1-6所述的方法生成;
运行所述最终发布的Jar文件时,提取所述最终发布的Jar文件的第二摘要信息,获取硬编码到切面类并被编译器织入到业务处理类中的所述第一摘要信息,以及比对所述第一摘要信息和所述第二摘要信息是否相同得到验证结果。
8.根据权利要求7所述的验证方法,其特征在于,所述提取所述最终发布的Jar文件的第二摘要信息,获取硬编码到切面类并被编译器织入到业务处理类中的所述第一摘要信息,以及比对所述第一摘要信息和所述第二摘要信息是否相同得到验证结果,包括:
在所述最终发布的Jar文件运行到被编译器织入了所述AOP切面类中的通知代码的业务处理类的切点位置,通知代码将解析所述最终发布的Jar文件,提取第二摘要信息;获取硬编码到切面类并被编译器织入到业务处理类中的第一摘要信息;比对所述第二摘要信息与所述第一摘要信息是否相同,如果相同,则说明Java软件版权保护模块未被篡改;如果不同,则说明Java软件版权保护模块被篡改。
9.一种提高Java软件破解难度的装置,其特征在于,包括:
AOP切面类,用于指定切点并提供软件防篡改验证处理代码,所述切点为执行软件防篡改验证操作的位置;
第一打包模块,用于编译所述Java软件的新增AOP切面类后的源代码并将编译结果打包成第一Jar文件;
第二打包模块,用于采用预设的Jar文件的代码混淆选项对所述第一Jar文件的非程序入口类及非程序入口方法进行代码混淆并将混淆结果打包成第二Jar文件;
提取模块,用于根据预设的提取对象,提取所述第二Jar文件中的第一摘要信息,所述预设的提取对象为软件版权保护模块涉及的Java类和/或非Java程序,所述第一摘要信息为混淆过的Java类和/或非Java程序的数字摘要信息;
第三打包模块,用于编译修改后的Java软件的源代码,并将编译结果打包成第三Jar文件;
第四打包模块,采用所述预设的Jar文件的代码混淆选项对所述第三Jar文件的非程序入口类及非程序入口方法进行代码混淆并打包成第四Jar文件,将所述第四Jar文件作为最终发布的Jar文件;
其中,所述Jar文件的代码混淆选项包括Jar文件的程序入口类及程序入口方法。
10.一种提高Java软件破解难度的验证装置,其特征在于,包括:
加载模块,用于加载最终发布的Jar文件,所述最终发布的Jar文件采用如权利要求1-6所述的方法生成;
软件防篡改验证模块,用于运行所述最终发布的Jar文件时,提取所述最终发布的Jar文件的第二摘要信息,获取硬编码到切面类并被编译器织入到业务处理类中的所述第一摘要信息,以及比对所述第一摘要信息和所述第二摘要信息是否相同得到验证结果。
CN201911423655.9A 2019-12-31 2019-12-31 提高Java软件破解难度的方法及装置、验证方法及验证装置 Active CN111143787B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201911423655.9A CN111143787B (zh) 2019-12-31 2019-12-31 提高Java软件破解难度的方法及装置、验证方法及验证装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201911423655.9A CN111143787B (zh) 2019-12-31 2019-12-31 提高Java软件破解难度的方法及装置、验证方法及验证装置

Publications (2)

Publication Number Publication Date
CN111143787A CN111143787A (zh) 2020-05-12
CN111143787B true CN111143787B (zh) 2022-02-18

Family

ID=70522983

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201911423655.9A Active CN111143787B (zh) 2019-12-31 2019-12-31 提高Java软件破解难度的方法及装置、验证方法及验证装置

Country Status (1)

Country Link
CN (1) CN111143787B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112417380B (zh) * 2020-11-24 2024-05-17 广州华资软件技术有限公司 一种基于编译技术的Licence管理系统
CN116137575A (zh) * 2023-02-17 2023-05-19 支付宝(杭州)信息技术有限公司 一种基于线上环境的风险控制策略验证方法及装置

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP2264639A2 (en) * 2009-06-19 2010-12-22 Uniloc Usa, Inc. Securing executable code integrity using auto-derivative key
CN101944042A (zh) * 2010-09-01 2011-01-12 深圳市拜特科技股份有限公司 一种Java程序的运行方法及电子终端
CN103065072A (zh) * 2011-10-21 2013-04-24 北京大学 提高Java软件破解难度的方法及装置、版权验证方法
CN104318163A (zh) * 2014-10-27 2015-01-28 北京工业大学 一种第三方软件可信构建方法
CN107480478A (zh) * 2017-08-14 2017-12-15 钟尚亮 一种java应用程序的加密方法及运行方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9111108B2 (en) * 2008-02-25 2015-08-18 Telefonaktiebolaget L M Ericsson (Publ) System, method and program for controlling access rights

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP2264639A2 (en) * 2009-06-19 2010-12-22 Uniloc Usa, Inc. Securing executable code integrity using auto-derivative key
CN101944042A (zh) * 2010-09-01 2011-01-12 深圳市拜特科技股份有限公司 一种Java程序的运行方法及电子终端
CN103065072A (zh) * 2011-10-21 2013-04-24 北京大学 提高Java软件破解难度的方法及装置、版权验证方法
CN104318163A (zh) * 2014-10-27 2015-01-28 北京工业大学 一种第三方软件可信构建方法
CN107480478A (zh) * 2017-08-14 2017-12-15 钟尚亮 一种java应用程序的加密方法及运行方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
《AOP-Based Attack on obfuscated Java Code》;Yuan-Yuan Li;《2009 International conference on Computational intelligence and Security》;20100112;第238-241页 *
《AOP技术及其在软件安全中的应用》;张秀峰;《万方数据》;20100201;全文 *

Also Published As

Publication number Publication date
CN111143787A (zh) 2020-05-12

Similar Documents

Publication Publication Date Title
KR101503785B1 (ko) 동적 라이브러리를 보호하는 방법 및 장치
Tamada et al. Java Birthmarks--Detecting the Software Theft--
KR101518420B1 (ko) 안드로이드 플랫폼에서의 apk 파일 관리 장치 및 방법
US10586026B2 (en) Simple obfuscation of text data in binary files
CN103065072B (zh) 提高Java软件破解难度的方法及装置、版权验证方法
EP3296906A1 (en) Method for protecting dex file from being decompiled in android system
US20160357530A1 (en) Method and apparatus for intermediate representation of applications
JP2012526310A (ja) ホワイトボックス暗号化技術を用いるインターロックされたバイナリ保護
EP2854070A1 (en) Method and apparatus of creating application package, method and apparatus of executing application package, and recording medium storing application package
CN103827880A (zh) 保护非本机代码安全的方法
CN111143787B (zh) 提高Java软件破解难度的方法及装置、验证方法及验证装置
CN104866739A (zh) 安卓系统中应用程序加密方法及系统
US11269988B2 (en) Automated software application verification system
CN109241707A (zh) 应用程序的混淆方法、装置和服务器
WO2022078366A1 (zh) 应用保护方法、装置、设备及介质
CN112115473A (zh) 一种用于Java开源组件安全检测的方法
Pasquier et al. FlowR: aspect oriented programming for information flow control in ruby
CN108733990B (zh) 一种基于区块链的文件保护方法及终端设备
KR102380434B1 (ko) 도커 파일 분석을 수행하는 도커 이미지 취약점 검사 장치 및 방법
CN111159712B (zh) 检测方法、设备及存储介质
CN112559980A (zh) 一种可内嵌众多任意app的小程序运行时
KR101436741B1 (ko) 프로그램 보안 솔루션 적용 방법 및 시스템
CN113419734B (zh) 应用程序加固的方法、装置及电子设备
CN110597496A (zh) 应用程序的字节码文件获取方法及装置
CN106778270B (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
GR01 Patent grant
GR01 Patent grant