CN115510402A - 一种基于加密和代码混淆的License控制方法及系统 - Google Patents
一种基于加密和代码混淆的License控制方法及系统 Download PDFInfo
- Publication number
- CN115510402A CN115510402A CN202211200442.1A CN202211200442A CN115510402A CN 115510402 A CN115510402 A CN 115510402A CN 202211200442 A CN202211200442 A CN 202211200442A CN 115510402 A CN115510402 A CN 115510402A
- Authority
- CN
- China
- Prior art keywords
- license
- ciphertext
- software
- character string
- encryption
- 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 75
- 238000013475 authorization Methods 0.000 claims abstract description 19
- 238000004590 computer program Methods 0.000 claims description 15
- 238000003860 storage Methods 0.000 claims description 9
- 230000004048 modification Effects 0.000 claims description 5
- 238000012986 modification Methods 0.000 claims description 5
- 238000004422 calculation algorithm Methods 0.000 claims description 3
- 230000001934 delay Effects 0.000 claims 1
- 238000012545 processing Methods 0.000 description 12
- 238000010586 diagram Methods 0.000 description 9
- 230000006870 function Effects 0.000 description 7
- 238000005336 cracking Methods 0.000 description 6
- 230000008569 process Effects 0.000 description 6
- 238000011161 development Methods 0.000 description 4
- 230000006399 behavior Effects 0.000 description 3
- 238000003491 array Methods 0.000 description 2
- 230000008901 benefit Effects 0.000 description 2
- 229910002056 binary alloy Inorganic materials 0.000 description 2
- 230000001276 controlling effect Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 239000010749 BS 2869 Class C1 Substances 0.000 description 1
- 235000007688 Lycopersicon esculentum Nutrition 0.000 description 1
- 240000003768 Solanum lycopersicum Species 0.000 description 1
- 230000005856 abnormality Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000000875 corresponding effect Effects 0.000 description 1
- 230000003111 delayed effect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000004806 packaging method and process Methods 0.000 description 1
- 230000000630 rising effect Effects 0.000 description 1
- 238000013515 script Methods 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
-
- 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
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Technology Law (AREA)
- Multimedia (AREA)
- Health & Medical Sciences (AREA)
- Bioethics (AREA)
- General Health & Medical Sciences (AREA)
- Storage Device Security (AREA)
Abstract
本发明涉及软件授权控制技术领域,提供了一种基于加密和代码混淆的License控制方法及系统,包括:获取授权信息,并使用私钥加密,得到第一密文;提取软件逻辑运行类,并混淆后使用私钥加密,得到第二密文;随机生成一个数字,将第一密文和第二密文进行字节打乱混合,得到字节数组,将数字和第一密文的若干字节插入,得到License文件;将公钥序列化为第一字符串,将第一字符串拆分为若干个子串,并修改软件逻辑,使不同方法根据入口参数不同,返回不同子串;将类加载器中的License加载代码转化为第二字符串,写入ASM字节码编辑逻辑中,并对第二字符串做字符串混淆;生成软件包,将软件包和License文件一起发送。降低了License被破解的可能。
Description
技术领域
本发明属于软件授权控制技术领域,尤其涉及一种基于加密和代码混淆的License控制方法及系统。
背景技术
本部分的陈述仅仅是提供了与本发明相关的背景技术信息,不必然构成在先技术。
随着计算机科技发展,软件和信息技术服务业运行态势良好,行业各细分市场发展形势呈现出全部上涨的局面,即软件产品、信息技术服务、信息安全产品和嵌入式系统软件收入和效益保持较快增长,吸纳就业人数稳步增加;产业向高质量方向发展步伐加快,结构持续调整优化,新的增长点不断涌现。
软件作为软件公司的重要资产,是公司的技术核心竞争力;为了保护软件资产,同时也为了服务各行各业、不同规模的客户群体,软件公司引入License控制系统实现这一目的。
如图2所示,现在常用的License控制系统多使用RSA签名方式保护软件系统不被未授权用户使用,但这一方法存在诸多弱点,如RSA密钥长度不够导致加密强度较低,License加载逻辑透明,容易被破解者通过反编译手段绕过License加载机制,当License被破解,软件被滥用,公司的知识资产也将遭受重大损失。
发明内容
为了解决上述背景技术中存在的技术问题,本发明提供一种基于加密和代码混淆的License控制方法及系统,不仅将软件逻辑运行类和License绑定,避免通过剥离License加载逻辑实现破解;而且引入名称混淆、字符串混淆、花指令、字节码编辑等混淆方法,有效提升反编译难度,降低了License被破解的可能。
为了实现上述目的,本发明采用如下技术方案:
本发明的第一个方面提供一种基于加密和代码混淆的License控制方法,其包括:
获取授权信息,并使用私钥加密,得到第一密文;
提取软件逻辑运行类,并在添加花指令、进行名称混淆和字符串混淆后,使用私钥加密,得到第二密文;
随机生成一个数字,将第一密文和第二密文按照随机生成的数字的二进制的排列进行字节打乱混合,得到字节数组,将数字和第一密文的若干字节插入字节数组开头,得到License文件;
将公钥序列化为第一字符串,将第一字符串拆分为若干个子串,并修改软件逻辑,使不同方法根据入口参数不同,返回不同子串;
将类加载器中的License加载代码转化为第二字符串,写入ASM字节码编辑逻辑中,并对第二字符串做字符串混淆;
基于混淆后的类加载器和修改后的软件,生成软件包,将软件包和License文件一起发送。
进一步地,所述花指令包括空循环、不可达条件分支和return语句执行运算。
进一步地,所述名称混淆的具体方法为:将软件逻辑运行类中的私有方法名和变量名替换为无语义的字母或字符串。
进一步地,所述字符串混淆的具体方法为:将软件逻辑运行类中的字符串与随机生成字符串进行异或运算,将运算结果保存为字符数组和字节数组。
进一步地,所述类加载器可以延迟从指定的密文数据中加载类。
进一步地,所述软件包和License文件在客户端被加载,具体步骤为:
依次调用若干方法,获取到一组子串,组装为第一字符串,并反序列化为公钥;
查找License文件,如果不存在则停止启动;
拆分License文件,获取到第一密文和第二密文,并使用公钥解密,获得授权信息和软件逻辑运行类;
类加载器加载软件逻辑运行类;
检查授权信息,根据授权信息控制软件。
进一步地,所述私钥和公钥通过SM2加密算法得到。
本发明的第二个方面提供一种基于加密和代码混淆的License控制系统,其包括:
第一密文生成模块,其被配置为:获取授权信息,并使用私钥加密,得到第一密文;
第二密文生成模块,其被配置为:提取软件逻辑运行类,并在添加花指令、进行名称混淆和字符串混淆后,使用私钥加密,得到第二密文;
License文件生成模块,其被配置为:随机生成一个数字,将第一密文和第二密文按照随机生成的数字的二进制的排列进行字节打乱混合,得到字节数组,将数字和第一密文的若干字节插入字节数组开头,得到License文件;
软件逻辑修改模块,其被配置为:将公钥序列化为第一字符串,将第一字符串拆分为若干个子串,并修改软件逻辑,使不同方法根据入口参数不同,返回不同子串;
类加载器混淆模块,其被配置为:将类加载器中的License加载代码转化为第二字符串,写入ASM字节码编辑逻辑中,并对第二字符串做字符串混淆;
软件包生成模块,其被配置为:基于混淆后的类加载器和修改后的软件,生成软件包,将软件包和License文件一起发送。
本发明的第三个方面提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如上述所述的一种基于加密和代码混淆的License控制方法中的步骤。
本发明的第四个方面提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述所述的一种基于加密和代码混淆的License控制方法中的步骤。
与现有技术相比,本发明的有益效果是:
本发明提供了一种基于加密和代码混淆的License控制方法,其软件核心逻辑和License绑定,避免通过剥离License加载逻辑实现破解。
本发明提供了一种基于加密和代码混淆的License控制方法,其引入名称混淆、字符串混淆、花指令、字节码编辑等混淆方法,有效提升反编译难度,降低了License被破解的可能。
本发明提供了一种基于加密和代码混淆的License控制方法,其得益于国密SM2算法的先进性,在签名效率和安全性上得到提高。
附图说明
构成本发明的一部分的说明书附图用来提供对本发明的进一步理解,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。
图1是本发明实施例一的一种基于加密和代码混淆的License控制方法下的License加载流程图;
图2是常规License加载流程图。
具体实施方式
下面结合附图与实施例对本发明作进一步说明。
应该指出,以下详细说明都是例示性的,旨在对本发明提供进一步的说明。除非另有指明,本文使用的所有技术和科学术语具有与本发明所属技术领域的普通技术人员通常理解的相同含义。
实施例一
本实施例提供了一种基于加密和代码混淆的License控制方法,首先获取授权信息,并使用私钥加密,得到第一密文;然后提取软件逻辑运行类,并在添加花指令、进行名称混淆和字符串混淆后,使用私钥加密,得到第二密文;然后随机生成一个数字,将第一密文和第二密文按照随机生成的数字的二进制的排列进行字节打乱混合,得到字节数组,将数字和第一密文的长度的若干字节插入字节数组开头(插入字节数组开头的字节数与数字的字节数组的长度以及第一密文的长度的的字节数组的长度相关),得到License文件;将公钥序列化为第一字符串,将第一字符串拆分为若干个子串,并修改软件逻辑,使不同方法根据入口参数不同,返回不同子串;将类加载器中的License加载代码转化为第二字符串,写入ASM字节码编辑逻辑中,并对第二字符串做字符串混淆;最后基于混淆后的类加载器和修改后的软件,生成软件包,将软件包和License文件一起发送。其具体包括如下步骤:
步骤1、生成SM2密钥对K。
步骤2:根据客户类型,配置授权信息,包括客户名称(companyName)、授权类型(licenseType)、过期时间(expireTime)等等,生成一份数据文件L。
根据授权信息生成的数据文件L是便于程序解析的数据格式。
数据文件L通常使用json格式化数据,举例为:
数据文件L也有使用xml格式的,举例为:
<?xml version="1.0"?>
<License>
<Data>
<companyName>某某公司</companyName>
<licenseType>v1</licenseType>
<expireTime>9999</expireTime>
</Data>
</License>。
步骤3:使用SM2私钥KP加密数据文件L,得到第一密文LA。
步骤4:提取(选择)软件关键核心逻辑运行类C1,在原有逻辑基础做如下处理:
步骤4_1:在C1代码中添加不影响原有运行逻辑的花指令,防止被jd-gui反编译。主要使用的花指令有空循环(会进行运算,但对运行结果无影响)、不可达条件分支(包括if和switch两种分支控制语句)、return语句执行运算。
步骤4_2:将C1代码内部私有方法名、变量名替换为无语义的字母或字符串,如“a”、“kki”、“tomato”,使其难以被破解者通过名称推断功能实现逻辑。
步骤4_2:将C1代码中的字符串与随机生成字符串进行异或运算,将运算结果保存为字符(char)数组和字节(byte)数组,实现字符串混淆,防止破解者通过字符串直接推断代码逻辑。
需要说明的是:核心逻辑运行类为软件正常运转的基础,软件离开核心逻辑运行类就无法正常运行,例如,核心逻辑运行类是用于操作数据库读写的,当核心逻辑运行类没有加载时,软件就无法正常读写数据库,甚至无法启动。
在本实施例中,核心逻辑运行类选择数据库读写运行类和权限认证运行类。
步骤5:使用SM2私钥KP加密步骤4生成的类文件C1,得到第二密文B。
步骤6:随机生成一个long类型数字n,将第一密文LA和第二密文B按照数字n的二进制0和1的排列打乱混合字节,得到字节数组arr,将数字n的8个字节以及第一密文LA的字节数组的长度的4个字节插入arr开头,获得密文C并写入文件,写入密文C的文件为License文件。
对将第一密文LA和第二密文B按照数字n的二进制0和1的排列打乱混合字节的说明如下:long类型二进制有32位,不便在此处展开举例,此处以数字147为例,其二进制为10010011;假设第一密文LA为字节数组[121,121],第二密文B为字节数组[122,108];假设约定,数字147的二进制表示下,为1时取第一密文LA的1个字节,为0时取第二密文B的1个字节,按照顺序依次选择,最终组成字节数组arr为[121,122,108,121]。
数字147的字节数组为[0,0,0,0,0,0,0,-109],第一密文LA的字节数组长度为2,数字2的字节数组为[0,0,0,2],将三个字节数组组装后可以获得字节数组[0,0,0,0,0,0,0,-109,0,0,0,2,121,122,108,121],此为密文C。
步骤7:将SM2公钥序列化为第一字符串S,并作如下处理:
步骤7_1:第一字符串S按顺序均匀拆分为若干个子串S1,S2…Sn,所有子串用S[]表示。
步骤7_2:在软件代码中,选定运行类Ci的方法Mi,i=1,2…n,n为选定的运行类的数量,修改代码逻辑,要求在原有逻辑基础上,根据入口参数不同,返回7_1生成的各个子串Si。
通过步骤7_2,子串Si已经嵌入到Ci的方法Mi中,会直接打包进软件包中。License加载逻辑会逐一调用这些方法Mi,从而获取n个子串,然后按顺序组合为第一字符串S,进而反序列化为公钥,对应license加载步骤中的步骤(2),也就是步骤7的逆操作。
在java中,类可以理解为是对现实世界客观实体的一种抽象,他包含了相应的属性和行为。举例来说,假设一个类是汽车的抽象,命名为Car,那么品牌、型号就是车的属性,而鸣笛、行驶等就是车的行为。这种行为在类(class)中叫做方法(method)。再比如说,有一个计算器类
可以看到其中有一个方法plus,接收两个整数,相加求和后,将结果返回(return)。举个例子:原本有一个方法M1作用是输入一个用户ID,返回数据库中的用户详情,如果用户ID无效,就会抛出异常。那么这时候可以改写这个方法,如果判断输入的用户ID是指定的特殊数字N1,那么就会抛出异常,异常信息是拆分的子串之一S1。当需要获取字符串S1时,调用方法M1,传入数字N1,并捕获异常,这样就可以获取到其中的字符串S1了。其他子串Sn的获取思路和这个一致,目标都是加大破解难度,使破解者无法直接获取关键信息。
步骤8:编写自定义类加载器loader,重写loadClass方法,自定义类加载器与Java原生类加载器的区别是可以延迟从指定的密文数据(如密文B)中加载类进系统。
把License加载代码(license处理代码)转化为第二字符串LS,然后将第二字符串LS做字符串混淆,混淆方法同步骤4_2,将混淆后的字符串写入ASM字节码编辑逻辑中。
类加载器是一个特殊的,能够加载类的类;而license处理代码是类中的一个方法,只是为了增加反编译的难度,做了混淆处理。所以,当程序启动时,会先加载类加载器,类加载器会执行ASM字节码编辑,把混淆后的license处理逻辑加载进来,这时候就可以执行license处理逻辑了。即,先加载类加载器,再加载license处理代码,再加载license。
loadClass方法是专门编写用于处理license的。Java的运行逻辑是,先将文本文件形式的java进行编译,得到字节码文件,后缀名为.class。当java程序运行时,会先启动jvm虚拟机,加载class文件进内存中,从而执行各种逻辑。这一过程是java默认的执行过程。但是,可以通过自己编写类加载器,使得程序可以按照需要的时机和方式去加载类。类加载器也是一个类,其中实际执行加载类的逻辑方法名为loadClass。
重写(override)是java中的概念,可以理解为将原方法改写以执行不同的逻辑。
步骤9:基于混淆后的类加载器和修改后的软件,生成软件包,将软件包和License一起发送给客户端,给客户使用。
软件包中,包含了软件运行代码、类加载器代码、license加载代码。
生成的软件包既可以手动完成也可以自动完成。手动情况下,需要人工按照步骤进行处理,最后将Java运行类文件打包(可以理解为一种特殊格式的压缩包)成软件包,和步骤6获得的license文件一同交付给客户。自动情况下,这一过程可以通过预先编写程序、脚本、插件等自动完成。
打包这一操作通常使用maven或gradle工具,这两者都是java工程中常用的开发工具。运行工具后会生成后缀名为jar或war的文件,一般称为jar包或war包,也就是软件包。
如图1所示,客户使用时,License按如下步骤加载:
步骤(1):启动类启动,根据代码中混淆后的字符串实时编译为字节码,将类加载器和License加载代码加载进入系统中。
步骤(2):依次调用若干方法,获取到一组字符串S[](子串),将其组装为第一字符串S,并反序列化为SM2公钥。
步骤(3):在指定位置查找License文件,如果不存在则停止启动,并报告异常。
步骤(4):拆分License数据,获取到第一密文A和第二密文B,使用SM2公钥分别解密,获得核心运行类和授权信息。如果此处解密失败,则停止启动并报告异常。
步骤(5):自定义类加载器加载核心运行类。
步骤(6):检查授权信息,根据授权信息控制软件功能表现。
至此,软件启动完成。
本实施例提供的一种基于加密和代码混淆的License控制方法,有效避免了公钥明文存储导致公钥被替换的情况;经过混淆后的代码,使用jd-gui、idea-decompiler等常用工具反编译后,获得的有效代码不到55%;软件核心逻辑和License绑定,避免通过剥离License加载逻辑实现破解。
实施例二
本实施例提供了一种基于加密和代码混淆的License控制系统,其具体包括如下模块:
第一密文生成模块,其被配置为:获取授权信息,并使用私钥加密,得到第一密文;
第二密文生成模块,其被配置为:提取软件逻辑运行类,并在添加花指令、进行名称混淆和字符串混淆后,使用私钥加密,得到第二密文;
License文件生成模块,其被配置为:随机生成一个数字,将第一密文和第二密文按照随机生成的数字的二进制的排列进行字节打乱混合,得到字节数组,将数字和第一密文的若干字节插入字节数组开头,得到License文件;
软件逻辑修改模块,其被配置为:将公钥序列化为第一字符串,将第一字符串拆分为若干个子串,并修改软件逻辑,使不同方法根据入口参数不同,返回不同子串;
类加载器混淆模块,其被配置为:将类加载器中的License加载代码转化为第二字符串,写入ASM字节码编辑逻辑中,并对第二字符串做字符串混淆;
软件包生成模块,其被配置为:基于混淆后的类加载器和修改后的软件,生成软件包,将软件包和License文件一起发送。
此处需要说明的是,本实施例中的各个模块与实施例一中的各个步骤一一对应,其具体实施过程相同,此处不再累述。
实施例三
本实施例提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如上述实施例一所述的一种基于加密和代码混淆的License控制方法中的步骤。
实施例四
本实施例提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述实施例一所述的一种基于加密和代码混淆的License控制方法中的步骤。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用硬件实施例、软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(RandomAccessMemory,RAM)等。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种基于加密和代码混淆的License控制方法,其特征在于,包括:
获取授权信息,并使用私钥加密,得到第一密文;
提取软件逻辑运行类,并在添加花指令、进行名称混淆和字符串混淆后,使用私钥加密,得到第二密文;
随机生成一个数字,将第一密文和第二密文按照随机生成的数字的二进制的排列进行字节打乱混合,得到字节数组,将数字和第一密文的若干字节插入字节数组开头,得到License文件;
将公钥序列化为第一字符串,将第一字符串拆分为若干个子串,并修改软件逻辑,使不同方法根据入口参数不同,返回不同子串;
将类加载器中的License加载代码转化为第二字符串,写入ASM字节码编辑逻辑中,并对第二字符串做字符串混淆;
基于混淆后的类加载器和修改后的软件,生成软件包,将软件包和License文件一起发送。
2.如权利要求1所述的一种基于加密和代码混淆的License控制方法,其特征在于,所述花指令包括空循环、不可达条件分支和return语句执行运算。
3.如权利要求1所述的一种基于加密和代码混淆的License控制方法,其特征在于,所述名称混淆的具体方法为:将软件逻辑运行类中的私有方法名和变量名替换为无语义的字母或字符串。
4.如权利要求1所述的一种基于加密和代码混淆的License控制方法,其特征在于,所述字符串混淆的具体方法为:将软件逻辑运行类中的字符串与随机生成字符串进行异或运算,将运算结果保存为字符数组和字节数组。
5.如权利要求1所述的一种基于加密和代码混淆的License控制方法,其特征在于,所述类加载器可以延迟从指定的密文数据中加载类。
6.如权利要求1所述的一种基于加密和代码混淆的License控制方法,其特征在于,所述软件包和License文件在客户端被加载,具体步骤为:
依次调用若干方法,获取到一组子串,组装为第一字符串,并反序列化为公钥;
查找License文件,如果不存在则停止启动;
拆分License文件,获取到第一密文和第二密文,并使用公钥解密,获得授权信息和软件逻辑运行类;
类加载器加载软件逻辑运行类;
检查授权信息,根据授权信息控制软件。
7.如权利要求1所述的一种基于加密和代码混淆的License控制方法,其特征在于,所述私钥和公钥通过SM2加密算法得到。
8.一种基于加密和代码混淆的License控制系统,其特征在于,包括:
第一密文生成模块,其被配置为:获取授权信息,并使用私钥加密,得到第一密文;
第二密文生成模块,其被配置为:提取软件逻辑运行类,并在添加花指令、进行名称混淆和字符串混淆后,使用私钥加密,得到第二密文;
License文件生成模块,其被配置为:随机生成一个数字,将第一密文和第二密文按照随机生成的数字的二进制的排列进行字节打乱混合,得到字节数组,将数字和第一密文的若干字节插入字节数组开头,得到License文件;
软件逻辑修改模块,其被配置为:将公钥序列化为第一字符串,将第一字符串拆分为若干个子串,并修改软件逻辑,使不同方法根据入口参数不同,返回不同子串;
类加载器混淆模块,其被配置为:将类加载器中的License加载代码转化为第二字符串,写入ASM字节码编辑逻辑中,并对第二字符串做字符串混淆;
软件包生成模块,其被配置为:基于混淆后的类加载器和修改后的软件,生成软件包,将软件包和License文件一起发送。
9.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-7中任一项所述的一种基于加密和代码混淆的License控制方法中的步骤。
10.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1-7中任一项所述的一种基于加密和代码混淆的License控制方法中的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211200442.1A CN115510402A (zh) | 2022-09-29 | 2022-09-29 | 一种基于加密和代码混淆的License控制方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211200442.1A CN115510402A (zh) | 2022-09-29 | 2022-09-29 | 一种基于加密和代码混淆的License控制方法及系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115510402A true CN115510402A (zh) | 2022-12-23 |
Family
ID=84507424
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211200442.1A Pending CN115510402A (zh) | 2022-09-29 | 2022-09-29 | 一种基于加密和代码混淆的License控制方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115510402A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115964681A (zh) * | 2023-03-16 | 2023-04-14 | 北京艾瑞数智科技有限公司 | 目标应用程序的证书文件的生成方法 |
-
2022
- 2022-09-29 CN CN202211200442.1A patent/CN115510402A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115964681A (zh) * | 2023-03-16 | 2023-04-14 | 北京艾瑞数智科技有限公司 | 目标应用程序的证书文件的生成方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9230123B2 (en) | Apparatus for tamper protection of application code based on self modification and method thereof | |
US7506167B2 (en) | Technique for producing through watermarking highly tamper-resistant executable code and resulting “watermarked” code so formed | |
JP5808019B2 (ja) | ホワイトボックス暗号化技術を用いるインターロックされたバイナリ保護 | |
CN106126981B (zh) | 基于虚拟函数表替换的软件安全防护方法 | |
RU2620712C2 (ru) | Устройство виртуальной машины, имеющее управляемую ключом обфускацию, и способ | |
CN106203006A (zh) | 基于dex与so文件动态执行的Android应用加固方法 | |
CN106599628A (zh) | 一种基于模块钩子的Python字节码文件保护方法 | |
WO2001014953A1 (en) | Software code protection by obscuring its data-driven form | |
US7970133B2 (en) | System and method for secure and flexible key schedule generation | |
US20120144208A1 (en) | Indexed table based code encrypting/decrypting device and method thereof | |
CN107273723B (zh) | 一种基于so文件加壳的Android平台应用软件保护方法 | |
CN101814124A (zh) | 一种基于Java的软件安全性加强的方法 | |
US6845159B1 (en) | Processing method and apparatus for converting information from a first format into a second format | |
CN107077562A (zh) | 用于动态控制代码执行的计算机实现的方法和系统 | |
CN108111622A (zh) | 一种下载白盒库文件的方法、装置及系统 | |
CN115510402A (zh) | 一种基于加密和代码混淆的License控制方法及系统 | |
US8694548B2 (en) | Defense-in-depth security for bytecode executables | |
CN116235174A (zh) | 用于执行加密算法的设备和方法 | |
RU2710670C2 (ru) | Криптографическая система и способ | |
CN107391970A (zh) | Flash应用程序中的函数访问控制方法及装置 | |
EP3944106A1 (en) | Obfuscating method of protecting code | |
EP2564343B1 (en) | Code diversity method and system | |
Yasin et al. | Dynamic multi levels Java code obfuscation technique (DMLJCOT) | |
CN116680670B (zh) | 应用程序软件生成方法、系统、设备及存储介质 | |
CN112685697B (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 | ||
CB02 | Change of applicant information | ||
CB02 | Change of applicant information |
Country or region after: China Address after: Floor 12, Building 3, Shuntai Plaza, No. 2000 Shunhua Road, High tech Industrial Development Zone, Jinan City, Shandong Province, 250101 Applicant after: SHANDONG ECLOUD INFORMATION TECHNOLOGY CO.,LTD. Address before: 250014 4th floor, block B, Yinhe building, No. 2008, Xinluo street, high tech Zone, Jinan City, Shandong Province Applicant before: SHANDONG ECLOUD INFORMATION TECHNOLOGY CO.,LTD. Country or region before: China |