CN111400736A - 应用程序加密的方法、装置、存储介质及电子设备 - Google Patents
应用程序加密的方法、装置、存储介质及电子设备 Download PDFInfo
- Publication number
- CN111400736A CN111400736A CN202010186660.9A CN202010186660A CN111400736A CN 111400736 A CN111400736 A CN 111400736A CN 202010186660 A CN202010186660 A CN 202010186660A CN 111400736 A CN111400736 A CN 111400736A
- Authority
- CN
- China
- Prior art keywords
- character
- constant
- encrypted
- value
- application program
- 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 116
- 230000003068 static effect Effects 0.000 claims description 35
- 238000004590 computer program Methods 0.000 claims description 9
- 239000003607 modifier Substances 0.000 claims description 9
- 238000011423 initialization method Methods 0.000 claims description 8
- 238000010586 diagram Methods 0.000 description 15
- 238000011068 loading method Methods 0.000 description 10
- 230000006870 function Effects 0.000 description 7
- 230000008569 process Effects 0.000 description 7
- 238000012545 processing Methods 0.000 description 6
- 238000004891 communication Methods 0.000 description 4
- 230000003287 optical effect Effects 0.000 description 4
- 238000004806 packaging method and process Methods 0.000 description 4
- 230000001960 triggered effect Effects 0.000 description 4
- 238000011161 development Methods 0.000 description 3
- 238000002347 injection Methods 0.000 description 3
- 239000007924 injection Substances 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 3
- 238000012858 packaging process Methods 0.000 description 3
- 238000010276 construction Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000009434 installation Methods 0.000 description 2
- 230000000644 propagated effect Effects 0.000 description 2
- 230000002787 reinforcement Effects 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 239000000243 solution Substances 0.000 description 2
- 238000013461 design Methods 0.000 description 1
- 239000000835 fiber Substances 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 230000009545 invasion Effects 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 230000003252 repetitive effect Effects 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
- 238000000844 transformation 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/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/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)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Computer Security & Cryptography (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
本发明实施例提供一种应用程序加密的方法、装置、存储介质及电子设备,该方法包括:获取应用程序的字节码文件;扫描所述字节码文件,获取字符常量;按照预设加密方法对所述字符常量的值进行加密,获取加密后的字符;利用解密方法以及所述加密后的字符替换所述字符常量的值,在提升应用程序的安全性的同时,实现快捷、稳定、可扩展、支持自主配置的字符串加密。
Description
技术领域
本发明涉及计算机技术领域,具体而言,涉及一种应用程序加密的方法、装置、存储介质及电子设备。
背景技术
随着移动互联网的快速发展,各种各样的移动应用的发布,移动安全面对的挑战也日趋严峻,特别是涉及到线上交易的金融类应用,对于移动应用安全的要求更加严格。因此,对于移动应用本身的安全保护工作,迫在眉睫。
相关技术中,常用的移动安全保护主要涉及代码混淆、字符串加密、安装包加固等。其中,字符串加密技术主要是通过打包前手动加密或脚本文件加密等。基于手动加密的方法,需要先构建加解密函数,将需要加密的字符串预加密,然后填充原始内容。基于脚本的加密方法,需要利用脚本语言来对项目所在的文件目录进行全扫描,找出文件中的字符常量来进行处理。
但是,手动加密成本偏高,每个字符常量都需要手动进行一次加密操作,并替换原始的字符,当项目结构庞大时,或者替换加解密方法时,需要将代码中所有出现字符常量的地方进行修改,工作量异常庞大而且,容错率低,当在替换原始字符串时,手动操作容易出现失误。脚本加密的方法,一方面字符串查找逻辑难以处理,需要严格的正则表达式来处理是否是字符串。另一方面,容易对注解、注释也进行无效的加密操作。不仅对于拼接的字符串会分别进行加密,降低程序执行效率,而且需要开发人员在书写代码时,注意字符串的编码,留意换行、拼接等。
综上,相关技术中的字符串加密技术存在以下问题:
1、手动加密成本偏高、容错率较低。
2、脚本程序通过正则匹配扫描出字符串,容易因为换行等导致误判,从而导致整个类文件产生错误。
3、可配置性较差,无法很好的在编辑器中进行扩展性的配置。
4、通用性较差,应用移植时,对应的加密流程失效或是工作异常。
因此,需要一种新的应用程序加密的方法、装置、存储介质及电子设备,实现快捷、稳定、可扩展、支持自主配置的字符串加密。
在所述背景技术部分公开的上述信息仅用于加强对本公开的背景的理解,因此它可以包括不构成对本领域普通技术人员已知的现有技术的信息。
发明内容
有鉴于此,本发明提供一种应用程序加密的方法、系统、存储介质及电子设备,实现快捷、稳定、可扩展、支持自主配置的字符串加密。
本发明的其他特性和优点将通过下面的详细描述变得显然,或部分地通过本发明的实践而习得。
根据本发明实施例的一方面,提供一种应用程序加密的方法,其中,所述方法包括:获取应用程序的字节码文件;扫描所述字节码文件,获取字符常量;按照预设加密方法对所述字符常量的值进行加密,获取加密后的字符;利用解密方法以及所述加密后的字符替换所述字符常量的值。
在本发明的一些示例性实施例中,基于前述方案,获取应用程序的字节码文件,包括:创建插件主体类,实现插件接口;将所述插件注册到所述应用程序中;回调获取所述应用程序的字节码文件。
在本发明的一些示例性实施例中,基于前述方案,扫描所述字节码文件,获取字符常量,包括:扫描成员变量修饰符,判断是否存在初始化后的静态常量;若判断结果为是,获取所述静态常量作为字符常量。
在本发明的一些示例性实施例中,基于前述方案,利用解密方法以及所述加密后的字符替换所述字符常量的值,包括:将所述静态常量的值置空,触发类初始化方法,利用解密方法以及所述加密后的字符替换所述静态常量的值。
在本发明的一些示例性实施例中,基于前述方案,若判断不存在初始化后的静态常量,扫描所述字节码文件,获取字符常量,包括:若获取到常量赋值指令,确定操作数栈顶常量的数据类型;若所述操作数栈顶常量为字符类型,获取所述操作数栈顶常量作为字符常量。
在本发明的一些示例性实施例中,基于前述方案,所述方法还包括:在所述应用程序运行时,将所述加密后的字符压入操作数栈,调用所述解密方法,对所述操作数栈中的所述加密后的字符进行解密后,将解密后的字符压入所述操作数栈。
在本发明的一些示例性实施例中,基于前述方案,利用解密方法以及所述加密后的字符替换所述字符常量的值,包括:利用常量赋值指令将所述解密方法以及所述加密后的字符对所述字符常量赋值。
根据本发明实施例的另一方面,提供一种应用程序加密的装置,其中,所述装置包括:第一获取模块,配置为获取应用程序的字节码文件;第二获取模块,配置为扫描所述字节码文件,获取字符常量;第三获取模块,配置为按照预设加密方法对所述字符常量的值进行加密,获取加密后的字符;替换模块,配置为利用解密方法以及所述加密后的字符替换所述字符常量的值。
在本发明的一些示例性实施例中,第一获取模块,配置为创建插件主体类,实现插件接口;将所述插件注册到所述应用程序中;回调获取所述应用程序的字节码文件。
在本发明的一些示例性实施例中,基于前述方案,第二获取模块,配置为扫描成员变量修饰符,判断是否存在初始化后的静态常量;若判断结果为是,获取所述静态常量作为字符常量。
在本发明的一些示例性实施例中,基于前述方案,所述替换模块,配置为将所述静态常量的值置空,触发类初始化方法,利用解密方法以及所述加密后的字符替换所述静态常量的值。
在本发明的一些示例性实施例中,基于前述方案,若判断不存在初始化后的静态常量,第二获取模块配置为若获取到常量赋值指令,确定操作数栈顶常量的数据类型;若所述操作数栈顶常量为字符类型,获取所述操作数栈顶常量作为字符常量。
在本发明的一些示例性实施例中,基于前述方案,所述装置还包括:解密模块,配置为在所述应用程序运行时,将所述加密后的字符压入操作数栈,调用所述解密方法,对所述操作数栈中的所述加密后的字符进行解密后,将解密后的字符压入所述操作数栈。
在本发明的一些示例性实施例中,基于前述方案,所述替换模块,配置为利用常量赋值指令将所述解密方法以及所述加密后的字符对所述字符常量赋值。
根据本发明实施例的再一方面,提供一种计算机可读存储介质,其上存储有计算机程序,其中,该程序被处理器执行时实现上述的方法步骤。
根据本发明实施例的再一方面,提供一种电子设备,其中,包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现上述的方法步骤。
本发明实施例中,获取应用程序的字节码文件;扫描所述字节码文件,获取字符常量;按照预设加密方法对所述字符常量的值进行加密,获取加密后的字符;利用解密方法以及所述加密后的字符替换所述字符常量的值,在提升应用程序的安全性的同时,实现快捷、稳定、可扩展、支持自主配置的字符串加密。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本发明。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。在附图中:
图1是根据一示例性实施例示出的一种应用程序加密的方法的流程图;
图2是根据另一示例性实施例示出的一种应用程序加密的方法的流程图;
图3是根据一示例性实施例示出的java类加载方法的流程图;
图4是根据再一实施例示出的一种应用程序加密的方法的流程图;
图5是根据一示例性实施例示出的一种应用程序加密的装置的结构示意图;
图6是根据一示例性实施例示出的一种电子设备的结构示意图。
具体实施方式
现在将参考附图更全面地描述示例实施例。然而,示例实施例能够以多种形式实施,且不应被理解为限于在此阐述的实施例;相反,提供这些实施例使得本发明将全面和完整,并将示例实施例的构思全面地传达给本领域的技术人员。在图中相同的附图标记表示相同或类似的部分,因而将省略对它们的重复描述。
此外,所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施例中。在下面的描述中,提供许多具体细节从而给出对本发明的实施例的充分理解。然而,本领域技术人员将意识到,可以实践本发明的技术方案而没有特定细节中的一个或更多,或者可以采用其它的方法、组元、装置、步骤等。在其它情况下,不详细示出或描述公知方法、装置、实现或者操作以避免模糊本发明的各方面。
附图中所示的方框图仅仅是功能实体,不一定必须与物理上独立的实体相对应。即,可以采用软件形式来实现这些功能实体,或在一个或多个硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。
附图中所示的流程图仅是示例性说明,不是必须包括所有的内容和操作/步骤,也不是必须按所描述的顺序执行。例如,有的操作/步骤还可以分解,而有的操作/步骤可以合并或部分合并,因此实际执行的顺序有可能根据实际情况改变。
应理解,虽然本文中可能使用术语第一、第二、第三等来描述各种组件,但这些组件不应受这些术语限制。这些术语乃用以区分一组件与另一组件。因此,下文论述的第一组件可称为第二组件而不偏离本公开概念的教示。如本文中所使用,术语“及/或”包括相关联的列出项目中的任一个及一或多者的所有组合。
本领域技术人员可以理解,附图只是示例实施例的示意图,附图中的模块或流程并不一定是实施本公开所必须的,因此不能用于限制本公开的保护范围。
下面结合图1对本发明实施例提出的应用程序加密的方法的总体过程进行说明。图1是根据一示例性实施例示出的一种应用程序加密的方法的流程图。需要说明的是,本发明实施例中,利用安卓代码编辑器AS以及Gradle(一种自动化构建开源工具)插件作为工具,基于java字节码文件的特性和字节码注入技术,来进行字符串加密,主要是在安卓项目打包过程中插入字符串加密流程,对于使用者而言,操作是无感知的。如图1所示,该方法可以包括但不限于以下步骤:
在S110中,获取安卓系统上的应用程序。
在S120中,获取所述应用程序的字节码文件。
本发明实施例中,字节码文件是指输入的开发者的代码原始字节码文件。
在S130中,对所述字节码文件执行加密操作。
在S140中,生成可执行文件。
需要指出的是,现有技术中在获取到字节码文件后,直接生成可执行文件(DEX文件)。
在S150中,生成应用程序安装文件。
需要说明的是,本发明的实施流程中,获取所述应用程序的字节码文件,是通过安卓的转换API(Application Programming Interface,应用程序编程接口)来实现对字节码文件的扫描实现的,通过转换API,将项目打包的中间件的字节码文件通过文件流的形式传递到插件字符串处理模块,从而实现对源代码中的字符进行加密。例如,源代码中有字符串表达式:String KEY=“abcdef”,通过字符串加密后可能会变成:String KEY=XX.cv(“ErWoXzLp”)。本发明实施例中,不同的加密方式生成的结果也不一样。本发明支持多种加解密方式,可根据实际需求来完成对应的加解密流程。
下面结合具体的实施例,对本发明实施例提出的应用程序加密的方法进行详细的说明。需要说明的是,本发明实施例可以由任意具有计算能力的设备执行,例如,终端设备或服务器,但本发明并不限于此。
需要说明的是,本发明实施例可以应用于利用java设计的安卓系统,java是一种跨平台的设计语言,java文件编译后的字节码文件具有严格可解析的固定格式,而且利用java的类加载机制和限定词的使用机制,可获悉类文件中所有的静态字符常量。基于此,本发明利用这些严格定义的文件格式和java语言的特性来实现字符串的加密。
图2是根据另一示例性实施例示出的一种应用程序加密的方法的流程图。如图2所示,该方法包括:
在S210中,获取应用程序的字节码文件。
根据本发明实施例,通过安卓系统构建工具中的接口和Gradle插件原理来实现。可以通过安卓构建系统的转换接口TransformApi,控制将应用程序的所有的字节码文件在打包流程中传输给插件实现类,从而利用插件实现类对字节码文件中的字符常量的寻找以及加密。
本发明实施例中,可以创建插件主体类,实现接口,将所述插件注册到所述应用程序中,并通过回调获取所述应用程序的字节码文件。
例如,创建插件类MyPlugin extends Transform implements Plugin,该类继承TransformApi,同时实现插件Plugin接口,标明是Gradle插件。
在创建插件类后,将上述创建的插件类注册到应用程序:project.extensions.getByType(AppExtension).registerTransform(tis)。
注册后,通过TransformApi的transform回调获取输入的字节码流:Collection<TransformInput>inputs=transformInvocation.inputs。
需要指出的是,字节码数据产生的场景包括所有集成了该种插件的安卓项目。比如,安卓应用开发打包、安卓SDK开发打包。
在S220中,扫描所述字节码文件,获取字符常量。
需要指出的是,本发明实施例中在每获取到字节码文件后,扫描对该字节码文件,获取字符常量,对字符常量的值进行加密。
本发明实施例中,在获取到字节码文件后,执行java类加载。需要说明的是,java字节码指令集中,字符常量赋值的指令集是:LDC(一种常量赋值指令),而且唯一固定不变。初始化后的静态常量(被静态static和不可更改final修饰的字符常量)不会被LDC指令赋值,而是在类加载时通过访问成员变量的初始值来赋值的。本发明基于上述java字节码指令的特征以及java类加载机制,从字节码中获取字符常量,以及进行字符常量加密。
需要说明的是,LDC是一条指令,用于对常量值进行操作。上述中有无初始值只是针对初始化后的静态常量。触发LDC指令的地方,一定会有一个常量值。
在S230中,按照预设加密方法对所述字符常量的值进行加密,获取加密后的字符。
本发明实施例中,加密方法可以自定义配置,本发明支持多种加解密方式,可根据实际需求来完成对应的加解密流程,具备很强的扩展性。
例如,加密前字符:“abcdef”,加密后字符:“XdeHydW”。
在S240中,利用解密方法以及所述加密后的字符替换所述字符常量的值。
本发明实施例中,解密方法与加密方法相对应,解密方法可以将加密后的字符解密为加密前的字符。
本发明实施例中,可以将解密方法注入字节码文件当前位置,将原始的字符常量替换为解密方法的返回值。
例如,String key常量加密前的值:String key=“abcdef”,假设解密方法为Xx.cv,“abcdef”加密后的字符为“XdeHydW”,则加密后的String key=Xx.cv(”XdeHydW”)。
需要指出的是,每找到一个字符常量,就对该字符常量执行加密,并执行该替换操作,替换字符常量的原始值,执行字节码注入操作。
根据本发明实施例,在进行替换时,可以利用常量赋值指令LDC将所述解密方法以及所述加密后的字符对所述字符常量赋值。
根据本发明实施例,在所述应用程序运行时,将所述加密后的字符压入操作数栈,调用所述解密方法,对所述操作数栈中的所述加密后的字符进行解密后,将解密后的字符压入所述操作数栈。
需要说明的是,本发明实施例中操作数栈里面都是常量,针对操作数栈,本实施例中利用解密方法以及所述加密后的字符替换操作数栈中的字符常量的初始值,实现对字符常量的加密后,再放回到操作数栈中。
本发明实施例中,获取应用程序的字节码文件;扫描所述字节码文件,获取字符常量;按照预设加密方法对所述字符常量的值进行加密,获取加密后的字符;利用解密方法以及所述加密后的字符替换所述字符常量的值,在提升应用程序的安全性的同时,实现快捷、稳定、可扩展、支持自主配置的字符串加密。
需要说明的是,在对应用程序加密的方法进一步说明之前,首先对java类加载方法进行说明,图3是根据一示例性实施例示出的java类加载方法的流程图。如图3所示,java类加载可以包括以下步骤:
在S310中,扫描成员变量修饰符。
在S320中,执行类初始化(clinit)方法。
在S330中,执行对象初始化(init)方法。
在S340中,执行普通方法。其中,该普通方法指普通的加、减法等。
下面结合图3的java类加载,对应用程序加密的方法进行进一步的说明。
图4是根据再一实施例示出的一种应用程序加密的方法的流程图。
如图4所示,该方法可以包括但不限于以下步骤:
在S410中,获取应用程序的字节码文件。
在S420中,扫描成员变量修饰符,判断是否存在初始化后的静态常量。
若判断结果为是,执行S430,若判断结果为否,执行S450。
在S430中,获取所述静态常量作为字符常量,并保存所述字符常量的初始值。
本发明实施例中,可以以键值对的形式保存该字符常量的标识与初始值。
在S440中,将所述静态常量的值置空,触发类初始化方法,对所述初始值加密。
需要说明的是,初始化后的静态常量具有初始赋值,在访问成员变量修饰符时,对初始化后的静态常量(所有被static和final修饰的常量)初始值置空,强制触发在类初始化(clinit)方法中赋值,同时记录该常量。
例如,静态常量static final KEY=“abcd”,在在扫描结束后变为:static finalKEY=null。
在对所述初始值加密后执行S470。
在S450中,若获取到常量赋值指令,确定操作数栈顶常量的数据类型。
需要指出的是,常量赋值指令LDC通常在进行类初始化方法、对象初始化发方法以及普通方法(S320-S340)中出现,在扫描成员变量修饰符不会获取到常量赋值指令。而判断是否存在初始化后的静态常量,是在扫描成员变量修饰符(S310)时进行,需要说明的是,若初始化后的静态常量初始值置空,强制触发在类初始化方法(S320)中赋值。
需要说明的是,该操作数栈顶为上文中压入操作数栈的顶端。
在S460中,若所述操作数栈顶常量为字符类型,获取所述操作数栈顶常量作为字符常量,并对所述字符常量的初始值加密。
在S470中,利用解密方法以及所述加密后的字符替换所述静态常量的值。
本发明实施例中,利用类加载原理处理被static和final修饰符修饰的字符串常量。被static和final修饰的字符常量不会被LDC指令赋值,而是在类加载时通过访问成员变量的初始值来赋值的。由此本方法通过统计类成员变量的修饰符类型以及初始值类型来统计该类型的常量,然后在类加载方法<clinit>中进行处理。初始化后的静态常量的初始值被置空后,强制触发类初始化方法,在执行类初始化方法时,利用解密方法以及加密后的初始值对该常量重新赋值,使得初始化后的静态常量也能够进行加密。
本发明实施例中,字节码文件中,除了初始化后的静态常量以外,都不会提供初始赋值,利用这个特点,在调用字符赋值的指令LDC时,就是对操作数栈顶的常量进行赋值操作。因此在对字节码进行读取时,当遇到LDC指令时,判断操作数栈顶的元素的数据类型,当为字符类型时,取出操作数栈中的的值,进行加密后再赋值回去。
利用解密方法以及所述加密后的字符替换所述静态常量的值对原始字节码文件修改打包的中间件字节码文件,之后打包流程继续执行。打包后,原始的字符常量都被解密函数和加密后的字符串替代,隐藏了原始的明文字符,达到了安全加固的目的。
在S480中,注入解密方法。
本发明实施例中,在所述应用程序运行时,将所述加密后的字符压入操作数栈,调用所述解密方法,对所述操作数栈中的所述加密后的字符进行解密后,将解密后的字符压入所述操作数栈。
本发明实施例中,利用java类加载机制以及字节码指令特性来寻找到所有的字符常量,从而对字符常量进行加密,采用标准的java字节码注入方法,具备很好的通用性,不会产生任何的兼容性问题,另外本发明采用插件的集成方式,使用简单,没有侵入。
应清楚地理解,本发明描述了如何形成和使用特定示例,但本发明的原理不限于这些示例的任何细节。相反,基于本发明公开的内容的教导,这些原理能够应用于许多其它实施例。
下述为本发明装置实施例,可以用于执行本发明方法实施例。在下文对系统的描述中,与前述方法相同的部分,将不再赘述。
图5是根据一示例性实施例示出的一种应用程序加密的装置的结构示意图,其中,所述装置500包括:第一获取模块510,第二获取模块520,第三获取模块530以及替换模块540。
其中,第一获取模块510,配置为获取应用程序的字节码文件。
第二获取模块520,配置为扫描所述字节码文件,获取字符常量。
第三获取模块530,配置为按照预设加密方法对所述字符常量的值进行加密,获取加密后的字符。
替换模块540,配置为利用解密方法以及所述加密后的字符替换所述字符常量的值。
本发明实施例中,获取应用程序的字节码文件;扫描所述字节码文件,获取字符常量;按照预设加密方法对所述字符常量的值进行加密,获取加密后的字符;利用解密方法以及所述加密后的字符替换所述字符常量的值,在提升应用程序的安全性的同时,实现快捷、稳定、可扩展、支持自主配置的字符串加密。
图6是根据一示例性实施例示出的一种电子设备的结构示意图。需要说明的是,图6示出的电子设备仅仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。
如图6所示,计算机系统600包括中央处理单元(CPU)601,其可以根据存储在只读存储器(ROM)602中的程序或者从存储部分608加载到随机访问存储器(RAM)603中的程序而执行各种适当的动作和处理。在RAM 603中,还存储有系统600操作所需的各种程序和数据。CPU 601、ROM 602以及RAM 603通过总线604彼此相连。输入/输出(I/O)接口605也连接至总线604。
以下部件连接至I/O接口605:包括键盘、鼠标等的输入部分606;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分607;包括硬盘等的存储部分608;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分609。通信部分609经由诸如因特网的网络执行通信处理。驱动器610也根据需要连接至I/O接口605。可拆卸介质611,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器610上,以便于从其上读出的计算机程序根据需要被安装入存储部分608。
特别地,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分609从网络上被下载和安装,和/或从可拆卸介质611被安装。在该计算机程序被中央处理单元(CPU)601执行时,执行本申请的终端中限定的上述功能。
需要说明的是,本申请所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本申请中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本申请中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、RF等等,或者上述的任意合适的组合。
附图中的流程图和框图,图示了按照本申请各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本申请实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的单元也可以设置在处理器中,其中,这些模块的名称在某种情况下并不构成对该模块本身的限定。
以上具体示出和描述了本发明的示例性实施例。应可理解的是,本发明不限于这里描述的详细结构、设置方式或实现方法;相反,本发明意图涵盖包含在所附权利要求的精神和范围内的各种修改和等效设置。
Claims (10)
1.一种应用程序加密的方法,其特征在于,所述方法包括:
获取应用程序的字节码文件;
扫描所述字节码文件,获取字符常量;
按照预设加密方法对所述字符常量的值进行加密,获取加密后的字符;
利用解密方法以及所述加密后的字符替换所述字符常量的值。
2.如权利要求1所述的方法,其特征在于,获取应用程序的字节码文件,包括:
创建插件主体类,实现插件接口;
将所述插件注册到所述应用程序中;
回调获取所述应用程序的字节码文件。
3.如权利要求1所述的方法,其特征在于,扫描所述字节码文件,获取字符常量,包括:
扫描成员变量修饰符,判断是否存在初始化后的静态常量;
若判断结果为是,获取所述静态常量作为字符常量。
4.如权利要求3所述的方法,其特征在于,利用解密方法以及所述加密后的字符替换所述字符常量的值,包括:
将所述静态常量的值置空,触发类初始化方法,利用解密方法以及所述加密后的字符替换所述静态常量的值。
5.如权利要求3所述的方法,其特征在于,若判断不存在初始化后的静态常量,扫描所述字节码文件,获取字符常量,包括:
若获取到常量赋值指令,确定操作数栈顶常量的数据类型;
若所述操作数栈顶常量为字符类型,获取所述操作数栈顶常量作为字符常量。
6.如权利要求1所述的方法,其特征在于,所述方法还包括:
在所述应用程序运行时,将所述加密后的字符压入操作数栈,调用所述解密方法,对所述操作数栈中的所述加密后的字符进行解密后,将解密后的字符压入所述操作数栈。
7.如权利要求1-6中任意一项所述的方法,其特征在于,利用解密方法以及所述加密后的字符替换所述字符常量的值,包括:
利用常量赋值指令将所述解密方法以及所述加密后的字符对所述字符常量赋值。
8.一种应用程序加密的装置,其特征在于,所述装置包括:
第一获取模块,配置为获取应用程序的字节码文件;
第二获取模块,配置为扫描所述字节码文件,获取字符常量;
第三获取模块,配置为按照预设加密方法对所述字符常量的值进行加密,获取加密后的字符;
替换模块,配置为利用解密方法以及所述加密后的字符替换所述字符常量的值。
9.一种电子设备,其特征在于,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-7中任一所述的方法。
10.一种计算机可读介质,其上存储有计算机程序,其特征在于,所述程序被处理器执行时实现如权利要求1-7中任一所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010186660.9A CN111400736B (zh) | 2020-03-17 | 2020-03-17 | 应用程序加密的方法、装置、存储介质及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010186660.9A CN111400736B (zh) | 2020-03-17 | 2020-03-17 | 应用程序加密的方法、装置、存储介质及电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111400736A true CN111400736A (zh) | 2020-07-10 |
CN111400736B CN111400736B (zh) | 2022-07-22 |
Family
ID=71436348
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010186660.9A Active CN111400736B (zh) | 2020-03-17 | 2020-03-17 | 应用程序加密的方法、装置、存储介质及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111400736B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113282294A (zh) * | 2021-05-19 | 2021-08-20 | 武汉极意网络科技有限公司 | 基于安卓平台Java字符串混淆的方法和装置 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6061520A (en) * | 1998-04-07 | 2000-05-09 | Sun Microsystems, Inc. | Method and system for performing static initialization |
US20090046848A1 (en) * | 2007-08-15 | 2009-02-19 | Lockheed Martin Corporation | Encryption management system |
US20180373848A1 (en) * | 2015-12-29 | 2018-12-27 | Guardsquare Nv | A build system with plugins for encryption of application components |
CN109409033A (zh) * | 2018-09-11 | 2019-03-01 | 平安科技(深圳)有限公司 | 代码加密方法、装置、计算机装置及存储介质 |
CN110059455A (zh) * | 2019-04-09 | 2019-07-26 | 北京迈格威科技有限公司 | 代码加密方法、装置、电子设备和计算机可读存储介质 |
-
2020
- 2020-03-17 CN CN202010186660.9A patent/CN111400736B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6061520A (en) * | 1998-04-07 | 2000-05-09 | Sun Microsystems, Inc. | Method and system for performing static initialization |
US20090046848A1 (en) * | 2007-08-15 | 2009-02-19 | Lockheed Martin Corporation | Encryption management system |
US20180373848A1 (en) * | 2015-12-29 | 2018-12-27 | Guardsquare Nv | A build system with plugins for encryption of application components |
CN109409033A (zh) * | 2018-09-11 | 2019-03-01 | 平安科技(深圳)有限公司 | 代码加密方法、装置、计算机装置及存储介质 |
CN110059455A (zh) * | 2019-04-09 | 2019-07-26 | 北京迈格威科技有限公司 | 代码加密方法、装置、电子设备和计算机可读存储介质 |
Non-Patent Citations (1)
Title |
---|
乔非,王晓平,陆剑峰: "基于Internet虚拟教学实验的实现框架", 《虚拟教学实验设计和开发技术与应用》 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113282294A (zh) * | 2021-05-19 | 2021-08-20 | 武汉极意网络科技有限公司 | 基于安卓平台Java字符串混淆的方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN111400736B (zh) | 2022-07-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109299131B (zh) | 一种支持可信计算的spark查询方法及系统 | |
US10169034B2 (en) | Verification of backward compatibility of software components | |
CN110502222B (zh) | 外发依赖内部基础库的aar方法、装置、介质和设备 | |
CN110059456B (zh) | 代码保护方法、代码保护装置、存储介质与电子设备 | |
CN110389786B (zh) | 内核管理方法、电子设备和计算机可读存储介质 | |
CN112597454A (zh) | 代码混淆方法、代码运行方法、装置、介质与设备 | |
CN111736840A (zh) | 小程序应用的编译方法、运行方法、存储介质及电子设备 | |
CN111679831A (zh) | 软件开发包处理方法、运行监控方法、装置及存储介质 | |
CN107402792B (zh) | 应用软件安装包的集成方法、装置、设备及存储介质 | |
CN110688096B (zh) | 包含插件的应用程序的构建方法、装置、介质及电子设备 | |
GB2496028A (en) | Processing in emulated computing environment | |
CN110609687A (zh) | 一种编译方法、装置、电子设备和存储介质 | |
CN110716720A (zh) | 一种实现应用热部署的方法和装置 | |
CN111832014A (zh) | 基于动态加载的Java SDK代码加解密方法及终端 | |
CN111400736B (zh) | 应用程序加密的方法、装置、存储介质及电子设备 | |
CN114925338A (zh) | 一种编译方法、装置、设备、介质和产品 | |
CN114461223A (zh) | 一种代码生成方法、装置及终端设备 | |
US20140068552A1 (en) | Infrastructure for automatically generating boilerplate code using annotations and code-generators | |
CN112965736A (zh) | 代码处理方法、装置、电子设备及介质 | |
CN110597496B (zh) | 应用程序的字节码文件获取方法及装置 | |
CN112416395A (zh) | 一种热修复更新方法和装置 | |
CN114816361A (zh) | 拼搭工程生成方法、装置、设备、介质和程序产品 | |
CN113032004B (zh) | 在开发环境中管理开发作业的方法、设备和程序产品 | |
US10789067B2 (en) | System and method for identifying open source usage | |
CN113553040B (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 |