CN109740315A - 基于安卓平台的常量保护方法、装置、设备及存储介质 - Google Patents
基于安卓平台的常量保护方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN109740315A CN109740315A CN201811629395.6A CN201811629395A CN109740315A CN 109740315 A CN109740315 A CN 109740315A CN 201811629395 A CN201811629395 A CN 201811629395A CN 109740315 A CN109740315 A CN 109740315A
- Authority
- CN
- China
- Prior art keywords
- constant
- bytecode
- code
- android platform
- decoding
- 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
Landscapes
- Storage Device Security (AREA)
Abstract
本发明公开了一种基于安卓平台的常量保护方法、装置、设备及存储介质,该方法包括:获取Java源代码,所述源代码包括目标常量;对所述源代码进行编译,生成第一字节码;接收用户端输入的编码代码以及与所述编码代码对应的解码代码;将所述解码代码存储于Native层的预设调取地址下;根据所述编码代码对应的编码规则对所述第一字节码进行编码,得到第二字节码。本发明通过将与编码规则对应的解码代码存储在反编译难度远高于Java层的Native层,从而有效保护了解码方法不暴露,大大降低了应用程序被逆向破解的风险。
Description
技术领域
本发明涉及软件开发技术领域,尤其涉及一种基于安卓平台的常量保护方法、装置、设备及存储介质。
背景技术
安卓(android)系统是目前广泛应用于智能设备中的操作系统,安卓系统中的应用程序均是采用Java语言开发,Java应用程序由于具有高可移植性,导致应用的安装文件容易被逆向工具反编译而暴露其源代码,致使该应用程序出现代码泄漏,或者是应用程序被篡改而损害用户利益;常量保护是指在安卓开发中,对直接写在源代码中的常量字符串进行保护,防止他人通过反编译直接得到常量字符串的内容而暴露源代码信息。
现有的常量保护方法有代码混淆和字符串拆解变换,通过代码混淆保护常量是指修改代码中的变量名,由于修改后的变量名失去了命名时的含义,反编译后就不容易还原出源代码信息,以此达到保护常量的目的;字符串拆解变换是指将代码中的一些字符串常量拆解开并转换为字节存放,这样就增加了反编译后发现重要字符串的难度。
以上常量保护方法,虽然可以在一定程度上增加程序代码中的常量被发现的难度,但是,破译者只要根据从Java层反编译得到的文件,还是可以从中找到解码规则,从而还原出字符串常量,所以上述常量保护方法对降低java应用程序被逆向破解的风险并没有起到太大作用。
发明内容
本发明的主要目的在于提供一种基于安卓平台的常量保护方法、装置、设备及存储介质,旨在通过将与编码规则对应的解码代码存储在反编译难度远高于Java层的Native层,从而有效保护了解码方法不暴露,大大降低了应用程序被逆向破解的风险。
为实现上述目的,本发明提供一种基于安卓平台的常量保护方法,应用于Java层,所述基于安卓平台的常量保护方法包括以下步骤:
获取Java源代码,所述源代码包括目标常量;
对所述源代码进行编译,生成第一字节码;
接收用户端输入的编码代码以及与所述编码代码对应的解码代码;
将所述解码代码存储于Native层的预设调取地址下;
根据所述编码代码对应的编码规则对所述第一字节码进行编码,得到第二字节码。
可选地,所述源代码还包括针对所述目标常量的特征标注,所述第一字节码包括与所述目标常量对应的第一常量字节码,所述根据所述编码代码对应的编码规则对所述第一字节码进行编码,得到第二字节码的步骤包括:
根据预设的编码代码对应的编码规则,对所述第一常量字节码进行编码,得到第二常量字节码;
将所述第一字节码包括的第一常量字节码替换为与所述第一常量字节码对应的第二常量字节码,将替换后的结果作为第二字节码。
可选地,所述根据预设的编码代码对应的编码规则,对所述第一常量字节码进行编码,得到第二常量字节码的步骤之前还包括:
根据所述特征标注,在所述第一字节码中识别与所述特征标注匹配的字节码;
将识别到的与所述特征标注匹配的字节码作为第一常量字节码。
可选地,所述根据所述特征标注,在所述第一字节码中识别与所述特征标注匹配的字节码的步骤包括:
判断所述特征标注是否包括目标常量范围标注;
若包括,则基于所述第一字节码中与所述目标常量范围标注对应的字节码范围,识别与所述特征标注匹配的字节码。
可选地,所述根据所述编码代码对应的编码规则对所述第一字节码进行编码,得到第二字节码的步骤之后还包括:
当检测到针对所述目标常量的调用指令后,根据所述预设调取地址,从Native层调取与所述编码代码对应的解码代码;
根据所述解码代码对应的解码规则对所述第二字节码解码,得到所述第一字节码,响应所述调用指令。
此外,为实现上述目的,本发明还提出一种基于安卓平台的常量保护装置,所述装置包括:
获取模块,用于获取Java源代码,所述源代码包括目标常量;
编译模块,用于对所述源代码进行编译,生成第一字节码;
接收模块,用于接收用户端输入的编码代码以及与所述编码代码对应的解码代码;
存储模块,用于将所述解码代码存储于Native层的预设调取地址下;
编码模块,用于根据所述编码代码对应的编码规则对所述第一字节码进行编码,得到第二字节码。
可选地,所述源代码还包括针对所述目标常量的特征标注,所述第一字节码包括与所述目标常量对应的第一常量字节码,所述编码模块包括:
编码单元,用于根据预设的编码代码对应的编码规则,对所述第一常量字节码进行编码,得到第二常量字节码;
替换单元,用于将所述第一字节码包括的第一常量字节码替换为与所述第一常量字节码对应的第二常量字节码,将替换后的结果作为第二字节码。
可选地,所述装置还包括:
识别模块,用于根据所述特征标注,在所述第一字节码中识别与所述特征标注匹配的字节码;
发送模块,用于将识别到的与所述特征标注匹配的字节码作为第一常量字节码发送至所述编码单元;
所述编码单元,还用于在接收到所述发送模块发送的所述第一常量字节码后,根据预设的编码代码对应的编码规则,对所述第一常量字节码进行编码,得到第二常量字节码。
可选地,所述识别模块包括:
判断单元,用于判断所述特征标注是否包括目标常量范围标注,并将判断结果发送至:
识别单元,用于在接收到所述判断单元发送的判断结果为“是”后,基于所述第一字节码中与所述目标常量范围标注对应的字节码范围,识别与所述特征标注匹配的字节码。
可选地,所述装置还包括:
调取模块,用于当检测到针对所述目标常量的调用指令后,根据所述预设调取地址,从Native层调取与所述编码代码对应的解码代码;
解码模块,用于根据所述解码代码对应的解码规则对所述第二字节码解码,得到所述第一字节码,响应所述调用指令。
此外,为实现上述目的,本发明还提出一种基于安卓平台的常量保护设备,所述设备包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的基于安卓平台的常量保护程序,所述基于安卓平台的常量保护程序被所述处理器执行时实现如上任一项所述的基于安卓平台的常量保护方法的步骤。
此外,为实现上述目的,本发明还提出一种存储介质,应用于计算机,所述存储介质上存储有基于安卓平台的常量保护程序,所述基于安卓平台的常量保护程序被处理器执行时实现如上任一项所述的基于安卓平台的常量保护方法的步骤。
本发明通过获取Java源代码,所述源代码包括目标常量;对所述源代码进行编译,生成第一字节码;接收用户端输入的编码代码以及与所述编码代码对应的解码代码;将所述解码代码存储于Native层的预设调取地址下;根据所述编码代码对应的编码规则对所述第一字节码进行编码,得到第二字节码;由此,根据预设编码规则对编译后的源代码进行编码,并将与预设编码规则对应的解码代码存储在反编译难度远高于Java层的Native层,从而有效保护了解码方法不暴露,破译者即使通过反编译从Java层得到编码后的代码,但是无法获得存于Native层的解码方法,由此实现了对应用程序中常量字符串的有效保护,大大降低了应用程序被逆向破解的风险。
附图说明
图1是本发明实施例方案涉及的硬件运行环境的结构示意图;
图2为本发明基于安卓平台的常量保护方法第一实施例的流程示意图;
图3为本发明基于安卓平台的常量保护方法第二实施例的流程示意图;
图4为本发明基于安卓平台的常量保护方法第三实施例的流程示意图。
本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
如图1所示,图1是本发明实施例方案涉及的硬件运行环境的结构示意图。
需要说明的是,图1即可为基于安卓平台的常量保护设备的硬件运行环境的结构示意图。本发明实施例基于安卓平台的常量保护设备可以是PC,便携计算机等终端设备。
如图1所示,该基于安卓平台的常量保护设备可以包括:处理器1001,例如CPU,网络接口1004,用户接口1003,存储器1005,通信总线1002。其中,通信总线1002用于实现这些组件之间的连接通信。用户接口1003可以包括显示屏(Display)、输入单元比如键盘(Keyboard),可选用户接口1003还可以包括标准的有线接口、无线接口。网络接口1004可选的可以包括标准的有线接口、无线接口(如WI-FI接口)。存储器1005可以是高速RAM存储器,也可以是稳定的存储器(non-volatile memory),例如磁盘存储器。存储器1005可选的还可以是独立于前述处理器1001的存储装置。
本领域技术人员可以理解,图1中示出的基于安卓平台的常量保护设备结构并不构成对基于安卓平台的常量保护设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
如图1所示,作为一种计算机存储介质的存储器1005中可以包括操作系统、网络通信模块、用户接口模块以及基于安卓平台的常量保护程序。其中,操作系统是管理和控制基于安卓平台的常量保护设备硬件和软件资源的程序,支持基于安卓平台的常量保护程序以及其它软件或程序的运行。
在图1所示的基于安卓平台的常量保护设备中,用户接口1003主要用于与各个终端进行数据通信;网络接口1004主要用于连接后台服务器,与后台服务器进行数据通信;而处理器1001可以用于调用存储器1005中存储的基于安卓平台的常量保护程序,并执行以下操作:
获取Java源代码,所述源代码包括目标常量;
对所述源代码进行编译,生成第一字节码;
接收用户端输入的编码代码以及与所述编码代码对应的解码代码;
将所述解码代码存储于Native层的预设调取地址下;
根据所述编码代码对应的编码规则对所述第一字节码进行编码,得到第二字节码。
进一步地,所述源代码还包括针对所述目标常量的特征标注,所述第一字节码包括与所述目标常量对应的第一常量字节码,处理器1001还可以用于调用存储器1005中存储的基于安卓平台的常量保护程序,并执行以下步骤:
根据预设的编码代码对应的编码规则,对所述第一常量字节码进行编码,得到第二常量字节码;
将所述第一字节码包括的第一常量字节码替换为与所述第一常量字节码对应的第二常量字节码,将替换后的结果作为第二字节码。
进一步地,处理器1001还可以用于调用存储器1005中存储的基于安卓平台的常量保护程序,并执行以下步骤:
根据所述特征标注,在所述第一字节码中识别与所述特征标注匹配的字节码;
将识别到的与所述特征标注匹配的字节码作为第一常量字节码。
进一步地,处理器1001还可以用于调用存储器1005中存储的基于安卓平台的常量保护程序,并执行以下步骤:
判断所述特征标注是否包括目标常量范围标注;
若包括,则基于所述第一字节码中与所述目标常量范围标注对应的字节码范围,识别与所述特征标注匹配的字节码。
进一步地,处理器1001还可以用于调用存储器1005中存储的基于安卓平台的常量保护程序,并执行以下步骤:
当检测到针对所述目标常量的调用指令后,根据所述预设调取地址,从Native层调取与所述编码代码对应的解码代码;
根据所述解码代码对应的解码规则对所述第二字节码解码,得到所述第一字节码,响应所述调用指令。
基于上述的结构,提出本发明基于安卓平台的常量保护方法的各个实施例。
参照图2,图2为本发明基于安卓平台的常量保护方法第一实施例的流程示意图。
本发明实施例提供了基于安卓平台的常量保护方法的实施例,需要说明的是,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
本实施例基于安卓平台的常量保护方法包括:
步骤S100,获取Java源代码,所述源代码包括目标常量;
在计算机编程领域中,Java编程语言被用于各个主要的工业部分并且存在于各种各样的装置、计算机和网络中。安卓(android)系统是目前广泛应用于智能设备中的操作系统,安卓平台采用Java语言开发,Java应用程序由于具有高可移植性,导致应用的安装文件容易被逆向工具反编译而暴露其源代码,致使该应用程序出现代码泄漏,或者是应用程序被篡改而损害用户利益;而基本上在所有的项目中,java源代码都会用到非常多的字符串常量,这些字符串一般直接以明文的方式写在代码中,常量保护是指在安卓开发中,对直接写在程序代码中的常量字符串进行保护,防止他人通过反编译直接得到常量字符串的内容而暴露源代码信息。
现有的常量保护方法有代码混淆方法,用户在命名java类、方法、变量的时候都有一定的意义,破译者通过名字就很容易知道这个类、方法、变量的作用是什么,代码混淆是指将这些命名全部修改为a,b,c这样简单的字母,代码混淆的对象一般是变量名为单个字母的变量名称,由于修改后的变量名失去了命名时的含义,反编译后破译者就不容易还原出源代码信息,以此达到保护代码中常量字符串的目的,但是,由于常量字符串在class字节码中比较明显,而且一些特殊的字符串本身有一定的格式、长度等特征,破译者可以根据常量字符串的这些特征找到常量,所以基于代码混淆的常量保护方法并不能很好的保护常量字符串不被发现。
进一步地,现有的常量保护方法还有字符串拆解变换方法,通过将一些重要常量拆解开来,放到各处并且转换为字节而不是字符串,这样就增加了反编译后发现重要字符串的难度,这种方法虽然可以在一定程度上实现程序代码中的常量保护,但是,破译者只要根据从Java层反编译得到的文件,还是可以从中找到解码方法,从而还原出字符串常量,通过代码混淆及字符串拆解变换的常量保护方法对降低应用程序被逆向破解的风险并没有起到太大作用。
本实施例中,获取Java源代码,所述源代码包括目标常量;Java源代码可以是开发者在用户端输入的程序代码,或是通过其它方式获得,本实施例不做具体限制,所述目标常量为本实施例常量保护方法要保护的常量,进一步地,目标常量为必须直接写在代码中的常量字符串。
步骤S200,对所述源代码进行编译,生成第一字节码;
获取到Java源代码程序文件之后,源代码先要被JVM(Java Virtual Machine,Java虚拟机)中的java编译器编译为.class文件,即字节码文件,字节码文件是java的执行文件存在形式,它本身是二进制文件,但是不可以被系统直接执行,而是需要虚拟机进行相应处理后再执行。
步骤S300,接收用户端输入的编码代码以及与所述编码代码对应的解码代码;
本实施例中,作为一种实施方式,开发者在用户端自行设置针对常量保护的编码规则及对应的解码规则,具体地,开发者可以根据每个项目中常量的类型、常量重要性等参考因素决定编解码规则的设定,确定编解码规则后,开发者输入编码代码及解码代码,后续该项目中的所有字符串常量将采用当前开发者设置的编解码规则来进行编码及解码对常量进行保护。
步骤S400,将所述解码代码存储于Native层的预设调取地址下;
解码代码存储于Native层中开发者设置的调取地址下,安卓的Native层为本地框架,提供本地服务和链接库等,该层通过C语言和C++语言实现,安卓的应用安装文件使用Java语言作为主要语言,Java应用程序在具有高可移植性的同时,与其他语言相比,用Java语言所编写的Java代码更容易被反编译工具破解和修改,而破译者获取C层(即Native层)文件的难度要远远高于获取Java字节码的难度,本实施例通过将所述解码代码存储于Native层的预设调取地址下,有效保护了解码方法不暴露。步骤S500,根据所述编码代码对应的编码规则对所述第一字节码进行编码,得到第二字节码;
本实施例中,根据所述编码代码对应的编码规则对所述第一字节码进行编码,得到第二字节码,具体地,作为一种实施方式,对第一字节码中所述目标常量对应的字节码按预设编码规则进行编码,相当于将第一字节码中目标常量对应的字节码替换为目标常量按预设编码规则编码后的值,形成第二字节码;预设编码规则具有对应的预设解码规则,编码和解码是相反的过程,通过编码方法得到的内容需要通过对应的解码方法来解码以得到编码前的原始值后执行,所述编码规则及所述解码规则用户可以自行设定。
可以理解的是,在本发明其它实施例中,可以预设相应的编解码规则,对所述第二字节码进行编码,以降低常量编码结果暴露的机会,提升常量保护的可靠性,进一步地,在本发明其它实施例中,还可预设相应的编解码规则,对第一字节码全部进行编码,实现对第一字节码中目标常量对应的常量字节码的保护,从而进一步提高常量保护的安全性。
本实施例通过获取Java源代码,所述源代码包括目标常量;对所述源代码进行编译,生成第一字节码;接收用户端输入的编码代码以及与所述编码代码对应的解码代码;将所述解码代码存储于Native层的预设调取地址下;根据所述编码代码对应的编码规则对所述第一字节码进行编码,得到第二字节码;由此,根据预设编码规则对编译后的源代码进行编码,并将与预设编码规则对应的解码代码存储在反编译难度远高于Java层的Native层,从而有效保护了解码方法不暴露,破译者即使通过反编译从Java层得到编码后的代码,但是无法获得解码方法,有效保护了解码方法不暴露,本实施例通过上述方案,还实现了兼容多种编码解码方法的常量保护方法,具体实施时,编解码方案可以自由定制,只要解码方法与编译阶段的编码方案匹配即可,实现了对应用程序中常量字符串的有效保护,大大降低了应用程序被逆向破解的风险。
进一步地,提出本发明基于安卓平台的常量保护方法第二实施例。
参照图3,图3为本发明基于安卓平台的常量保护方法第二实施例的流程示意图,基于上述基于安卓平台的常量保护方法第一实施例,本实施例中,所述源代码还包括针对所述目标常量的特征标注,所述第一字节码包括与所述目标常量对应的第一常量字节码,步骤S500,根据所述编码代码对应的编码规则对所述第一字节码进行编码,得到第二字节码的步骤包括:
步骤S501,根据预设的编码代码对应的编码规则,对所述第一常量字节码进行编码,得到第二常量字节码;
步骤S502,将所述第一字节码包括的第一常量字节码替换为与所述第一常量字节码对应的第二常量字节码,将替换后的结果作为第二字节码。
本实施例中,在获取到Java源代码后,所述源代码包括目标常量以及针对所述目标常量的特征标注,对所述源代码进行编译,生成第一字节码,所述第一字节码包括与所述目标常量对应的第一常量字节码;作为一种实施方式,本实施例可选事先采用插件来配置需要保护的常量的特征,具体地,开发者编写源代码后,开发者根据预设的Gradle插件配置需要保护的常量的特征,可选配置常量名称前缀、后缀,可选使用@Encode注解标注需要进行保护的常量,还可选通过指定包名配置常量保护的范围等。
进一步地,根据预设的编码代码对应的编码规则,对所述第一常量字节码进行编码,得到第二常量字节码。
进一步地,步骤S501,根据预设的编码代码对应的编码规则,对所述第一常量字节码进行编码,得到第二常量字节码的步骤之前还包括:
步骤S510,根据所述特征标注,在所述第一字节码中识别与所述特征标注匹配的字节码;
步骤S520,将识别到的与所述特征标注匹配的字节码作为第一常量字节码。
具体的,根据开发者基于插件配置的需要保护的常量的特征,遍历class文件,从遍历的class中查找符合常量标注要求的常量字节码,如判断常量名称前缀、后缀是否符合常量标注要求,判断常量是否使用@Encode标注等;进一步地,可以理解的是,插件配置时若开发者通过指定包名配置了常量保护的范围,则根据所述特征标注,在开发者配置的常量保护范围所对应的class文件中查找符合标注的常量,若插件配置时若开发者未配置常量的保护范围,则扫描所有包下的class文件来查找符合标注的常量;查找到符合保护标注的常量字节码后,即所述第一常量字节码,根据预设的编码代码对应的编码规则,对所述第一常量字节码进行编码,得到第二常量字节码。
进一步地,将所述第一字节码包括的第一常量字节码替换为与所述第一常量字节码对应的第二常量字节码,将替换后的结果作为第二字节码,完成对编译后的字节码的编码动作,由此得到生成的第二字节码。第二字节码包括常量字节码编码后的结果,需要调用该常量执行程序时,需从C层调用对应的解码方法,解码后才可执行,破译者即使通过反编译拿到第二字节码文件,也只是看到了常量字节码编码后的结果,而无法从C层获取对应的解码方法,以此实现了常量的可靠保护,本实施例开发者通过插件配置需要保护的常量的特征,开发者可以很简单的设置某个常量需要保护,而不需要开发者每次对常量进行编码解码,本实施例实现了开发者无感知的常量保护方法,提升了常量保护的可靠性,并且减少了开发者的工作量。
需要说明的是,现有技术中,还有使用加密技术进行常量保护的方案,即使用对称加密或者非对称加密算法去加密常量字符串,然后在执行的时候再去解密字符串,通过这种方式,反编译后得到的字符串是加密过的,所以破译者也无法获知源代码,但是加密技术虽然能保证代码中的字符串是加密后的结果,但是私钥的存储是一个难题,公钥本身也可以是一个常量,如果这个常量泄露了,所有的常量就都暴露了,而常量保护解决的是一些隐私性和重要性不高的常量数据,而且是随时可用的常量,而非密码这种重要的数据,如果采用加密技术进行常量保护,加密技术一般会把私钥放到服务器中,通过网络服务来进行解密加密,这就导致常量保护方法操作复杂,且成本过高。
本实施例中,开发者通过插件配置可以很简便地设置某个常量需要保护,而不需要开发者对常量进行编码解码,插件修改class文件实现常量保护的过程是在源代码编译阶段,因此本实施例实现常量的保护过程对开发者是无感知的,本实施例在提升常量保护可靠性的同时,并未增加开发者的工作量,并且相对于采用复杂算法进行常量保护,如通过加密解密算法进行常量保护,本实施例在保证常量保护可靠性的前提下还减轻了开发者的工作量,使开发者通过简单的插件配置即可实现常量的保护,进一步地,开发者在后续的代码开发中,只需配置相关的需要保护的常量的特征标注,即可实现常量的保护,不需要开发者每次都对常量进行编码及解码,并且可以根据实际的常量保护需求随时更新编码规则及解码规则。
进一步地,提出本发明基于安卓平台的常量保护方法第三实施例。
参照图4,图4为本发明基于安卓平台的常量保护方法第三实施例的流程示意图,基于上述基于安卓平台的常量保护方法第二实施例,步骤S510,根据所述特征标注,在所述第一字节码中识别与所述特征标注匹配的字节码的步骤包括:
步骤S511,判断所述特征标注是否包括目标常量范围标注;
本实施例中,作为一种实施方式,开发者基于插件配置需要保护的常量的特征时,可以通过指定包名的方式配置常量保护的范围或者不配置常量保护范围,本实施例中,获取Java源代码,所述源代码包括目标常量及针对所述目标常量的特征标注,对所述源代码进行编译,生成第一字节码,所述第一字节码包括与所述目标常量对应的第一常量字节码,然后判断所述特征标注是否包括目标常量范围标注。
若包括,则执行步骤S512,基于所述第一字节码中与所述目标常量范围标注对应的字节码范围,识别与所述特征标注匹配的字节码。
若开发者在插件配置时设置了常量保护范围,则基于所述第一字节码中与所述目标常量范围标注对应的字节码范围,扫描常量保护范围对应的应用安装包名下的class文件以识别与所述特征标注匹配的字节码,从而实现查找符合标注的常量,若插件配置时若开发者未配置常量的保护范围,则扫描所有包下的class文件来查找符合标注的常量,将识别到的与所述特征标注匹配的字节码作为第一常量字节码,根据预设的编码代码对应的编码规则,对所述第一常量字节码进行编码,得到第二常量字节码;将所述第一字节码包括的第一常量字节码替换为与所述第一常量字节码对应的第二常量字节码,将替换后的结果作为第二字节码,完成对常量字符串编译后的字节码的编码动作,需要调用常量字符串时,再从C层调取解码方法,实现了常量字符串的可靠保护。
进一步地,步骤S500,根据所述编码代码对应的编码规则对所述第一字节码进行编码,得到第二字节码的步骤之后还包括:
步骤S600,当检测到针对所述目标常量的调用指令后,根据所述预设调取地址,从Native层调取与所述编码代码对应的解码代码;
本实施例中,根据所述编码代码对应的编码规则对所述第一字节码进行编码,得到第二字节码之后,将预设的与编码规则对应的解码规则存放于Native层的预设地址下,当接收到针对所述目标常量的调用指令后,响应于该调用指令,获取该调用指令对应的调用程序,并将该调用程序中表征所述目标常量的代码替换为所述解码代码在Native层中的调取地址,运行替换后的调用程序,替换后的调用程序在运行时即根据调取地址从Native层调取与所述编码代码对应的解码代码,解码过程通过JNI(Java Native Interface)调用实现,解码方法最终调用的是C层的代码,有效保护了解码方法不暴露,即使破译者拿到应用程序安装包进行反编译,一方面破译者很难找到编码后的常量,即使找到常量,由于与编码规则对应的解码规则存在C层的so包中而不在破译者反编译获得的class文件中,破译者也无法根据反编译得到的java应用程序安装包中的文件还原出java源代码,由此,大大提升了java源代码中常量字符串的安全性,保障了开发者的权利,提升了用户使用应用程序的安全性。
步骤S700,根据所述解码代码对应的解码规则对所述第二字节码解码,得到所述第一字节码,响应所述调用指令。
根据预设的编码规则对第一字节码进行编码得到第二字节码、根据与所述预设的编码规则对应的解码规则对第二字节码解码以得到第一字节码,上述两个过程是相反的过程,本实施例编码规则和解码规则可以基于用户对不同常量的保护需求而自行定制不同难易程度的编解码规则,只要编码规则与解码规则匹配即可,本实施例对编码规则及解码规则的具体实现方式不做具体限定,本实施例通过上述方案,实现了对应用程序中常量字符串的有效保护,大大降低了应用程序被逆向破解的风险。
此外,本发明实施例还提出一种基于安卓平台的常量保护装置,所述装置包括:
获取模块,用于获取Java源代码,所述源代码包括目标常量;
编译模块,用于对所述源代码进行编译,生成第一字节码;
接收模块,用于接收用户端输入的编码代码以及与所述编码代码对应的解码代码;
存储模块,用于将所述解码代码存储于Native层的预设调取地址下;
编码模块,用于根据所述编码代码对应的编码规则对所述第一字节码进行编码,得到第二字节码。
优选地,所述源代码还包括针对所述目标常量的特征标注,所述第一字节码包括与所述目标常量对应的第一常量字节码,所述编码模块包括:
编码单元,用于根据预设的编码代码对应的编码规则,对所述第一常量字节码进行编码,得到第二常量字节码;
替换单元,用于将所述第一字节码包括的第一常量字节码替换为与所述第一常量字节码对应的第二常量字节码,将替换后的结果作为第二字节码。
优选地,所述装置还包括:
识别模块,用于根据所述特征标注,在所述第一字节码中识别与所述特征标注匹配的字节码;
发送模块,用于将识别到的与所述特征标注匹配的字节码作为第一常量字节码发送至所述编码单元;
所述编码单元,还用于在接收到所述发送模块发送的所述第一常量字节码后,根据预设的编码代码对应的编码规则,对所述第一常量字节码进行编码,得到第二常量字节码。
优选地,所述识别模块包括:
判断单元,用于判断所述特征标注是否包括目标常量范围标注,并将判断结果发送至:
识别单元,用于在接收到所述判断单元发送的判断结果为“是”后,基于所述第一字节码中与所述目标常量范围标注对应的字节码范围,识别与所述特征标注匹配的字节码。
优选地,所述装置还包括:
调取模块,用于当检测到针对所述目标常量的调用指令后,根据所述预设调取地址,从Native层调取与所述编码代码对应的解码代码;
解码模块,用于根据所述解码代码对应的解码规则对所述第二字节码解码,得到所述第一字节码,响应所述调用指令。
本实施例提出的基于安卓平台的常量保护装置各个模块运行时实现如上所述的基于安卓平台的常量保护方法的步骤,在此不再赘述。
此外,本发明实施例还提出一种计算机可读存储介质,所述存储介质上存储有基于安卓平台的常量保护程序,所述基于安卓平台的常量保护程序被处理器执行时实现如上所述的基于安卓平台的常量保护方法的步骤。
其中,在所述处理器上运行的基于安卓平台的常量保护程序被执行时所实现的方法可参照本发明基于安卓平台的常量保护方法各个实施例,此处不再赘述。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本发明各个实施例所述的方法。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
Claims (12)
1.一种基于安卓平台的常量保护方法,其特征在于,应用于Java层,所述基于安卓平台的常量保护方法包括以下步骤:
获取Java源代码,所述源代码包括目标常量;
对所述源代码进行编译,生成第一字节码;
接收用户端输入的编码代码以及与所述编码代码对应的解码代码;
将所述解码代码存储于Native层的预设调取地址下;
根据所述编码代码对应的编码规则对所述第一字节码进行编码,得到第二字节码。
2.如权利要求1所述的基于安卓平台的常量保护方法,其特征在于,所述源代码还包括针对所述目标常量的特征标注,所述第一字节码包括与所述目标常量对应的第一常量字节码,所述根据所述编码代码对应的编码规则对所述第一字节码进行编码,得到第二字节码的步骤包括:
根据预设的编码代码对应的编码规则,对所述第一常量字节码进行编码,得到第二常量字节码;
将所述第一字节码包括的第一常量字节码替换为与所述第一常量字节码对应的第二常量字节码,将替换后的结果作为第二字节码。
3.如权利要求2所述的基于安卓平台的常量保护方法,其特征在于,所述根据预设的编码代码对应的编码规则,对所述第一常量字节码进行编码,得到第二常量字节码的步骤之前还包括:
根据所述特征标注,在所述第一字节码中识别与所述特征标注匹配的字节码;
将识别到的与所述特征标注匹配的字节码作为第一常量字节码。
4.如权利要求3所述的基于安卓平台的常量保护方法,其特征在于,所述根据所述特征标注,在所述第一字节码中识别与所述特征标注匹配的字节码的步骤包括:
判断所述特征标注是否包括目标常量范围标注;
若包括,则基于所述第一字节码中与所述目标常量范围标注对应的字节码范围,识别与所述特征标注匹配的字节码。
5.如权利要求1-4中任一项所述的基于安卓平台的常量保护方法,其特征在于,所述根据所述编码代码对应的编码规则对所述第一字节码进行编码,得到第二字节码的步骤之后还包括:
当检测到针对所述目标常量的调用指令后,根据所述预设调取地址,从Native层调取与所述编码代码对应的解码代码;
根据所述解码代码对应的解码规则对所述第二字节码解码,得到所述第一字节码,响应所述调用指令。
6.一种基于安卓平台的常量保护装置,其特征在于,所述装置包括:
获取模块,用于获取Java源代码,所述源代码包括目标常量;
编译模块,用于对所述源代码进行编译,生成第一字节码;
接收模块,用于接收用户端输入的编码代码以及与所述编码代码对应的解码代码;
存储模块,用于将所述解码代码存储于Native层的预设调取地址下;
编码模块,用于根据所述编码代码对应的编码规则对所述第一字节码进行编码,得到第二字节码。
7.如权利要求6所述的基于安卓平台的常量保护装置,其特征在于,所述源代码还包括针对所述目标常量的特征标注,所述第一字节码包括与所述目标常量对应的第一常量字节码,所述编码模块包括:
编码单元,用于根据预设的编码代码对应的编码规则,对所述第一常量字节码进行编码,得到第二常量字节码;
替换单元,用于将所述第一字节码包括的第一常量字节码替换为与所述第一常量字节码对应的第二常量字节码,将替换后的结果作为第二字节码。
8.如权利要求7所述的基于安卓平台的常量保护装置,其特征在于,所述装置还包括:
识别模块,用于根据所述特征标注,在所述第一字节码中识别与所述特征标注匹配的字节码;
发送模块,用于将识别到的与所述特征标注匹配的字节码作为第一常量字节码发送至所述编码单元;
所述编码单元,还用于在接收到所述发送模块发送的所述第一常量字节码后,根据预设的编码代码对应的编码规则,对所述第一常量字节码进行编码,得到第二常量字节码。
9.如权利要求8所述的基于安卓平台的常量保护装置,其特征在于,所述识别模块包括:
判断单元,用于判断所述特征标注是否包括目标常量范围标注,并将判断结果发送至:
识别单元,用于在接收到所述判断单元发送的判断结果为“是”后,基于所述第一字节码中与所述目标常量范围标注对应的字节码范围,识别与所述特征标注匹配的字节码。
10.如权利要求6-9中任一项所述的基于安卓平台的常量保护装置,其特征在于,所述装置还包括:
调取模块,用于当检测到针对所述目标常量的调用指令后,根据所述预设调取地址,从Native层调取与所述编码代码对应的解码代码;
解码模块,用于根据所述解码代码对应的解码规则对所述第二字节码解码,得到所述第一字节码,响应所述调用指令。
11.一种基于安卓平台的常量保护设备,其特征在于,所述设备包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的基于安卓平台的常量保护程序,所述基于安卓平台的常量保护程序被所述处理器执行时实现如权利要求1至5中任一项所述的基于安卓平台的常量保护方法的步骤。
12.一种存储介质,其特征在于,应用于计算机,所述存储介质上存储有基于安卓平台的常量保护程序,所述基于安卓平台的常量保护程序被处理器执行时实现如权利要求1至5中任一项所述的基于安卓平台的常量保护方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811629395.6A CN109740315A (zh) | 2018-12-28 | 2018-12-28 | 基于安卓平台的常量保护方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811629395.6A CN109740315A (zh) | 2018-12-28 | 2018-12-28 | 基于安卓平台的常量保护方法、装置、设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN109740315A true CN109740315A (zh) | 2019-05-10 |
Family
ID=66362073
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811629395.6A Pending CN109740315A (zh) | 2018-12-28 | 2018-12-28 | 基于安卓平台的常量保护方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109740315A (zh) |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110717150A (zh) * | 2019-10-08 | 2020-01-21 | 北京顶象技术有限公司 | 代码保护方法、装置、保护设备及可读存储介质 |
CN110990019A (zh) * | 2019-11-20 | 2020-04-10 | 腾讯音乐娱乐科技(深圳)有限公司 | 一种Java类分析方法、装置、存储介质及电子设备 |
CN111159662A (zh) * | 2019-12-25 | 2020-05-15 | 郑州阿帕斯数云信息科技有限公司 | 一种数据的处理方法和装置 |
CN111984944A (zh) * | 2020-08-28 | 2020-11-24 | 重庆小雨点小额贷款有限公司 | 一种源代码处理方法、相关装置及存储介质 |
CN112925523A (zh) * | 2021-03-02 | 2021-06-08 | 京东数字科技控股股份有限公司 | 对象比较方法、装置、设备及计算机可读介质 |
CN113094664A (zh) * | 2021-04-09 | 2021-07-09 | 每日互动股份有限公司 | 一种防止安卓应用程序被反编译的系统 |
CN113094665A (zh) * | 2021-04-09 | 2021-07-09 | 每日互动股份有限公司 | 一种防止java程序被反编译的系统 |
CN113434148A (zh) * | 2021-06-30 | 2021-09-24 | 平安普惠企业管理有限公司 | 防解密客户端开发编译方法、装置、电子设备及存储介质 |
WO2023016481A1 (zh) * | 2021-08-13 | 2023-02-16 | 华为技术有限公司 | 一种数据处理方法及相关装置 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2008079845A (ja) * | 2006-09-27 | 2008-04-10 | Aruze Corp | 遊技機及びサーバ装置 |
CN106210724A (zh) * | 2016-07-21 | 2016-12-07 | 腾讯科技(深圳)有限公司 | 图片解码方法及装置 |
CN106326694A (zh) * | 2016-08-30 | 2017-01-11 | 北京鼎源科技有限公司 | 一种基于C源代码的混淆的Android应用加固方法 |
CN107871066A (zh) * | 2016-09-28 | 2018-04-03 | 传化物流集团有限公司 | 基于安卓系统的代码编译方法及装置 |
CN108733379A (zh) * | 2018-05-28 | 2018-11-02 | 常熟理工学院 | 基于dex字节码抽离映射混淆的安卓应用加固方法 |
-
2018
- 2018-12-28 CN CN201811629395.6A patent/CN109740315A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2008079845A (ja) * | 2006-09-27 | 2008-04-10 | Aruze Corp | 遊技機及びサーバ装置 |
CN106210724A (zh) * | 2016-07-21 | 2016-12-07 | 腾讯科技(深圳)有限公司 | 图片解码方法及装置 |
CN106326694A (zh) * | 2016-08-30 | 2017-01-11 | 北京鼎源科技有限公司 | 一种基于C源代码的混淆的Android应用加固方法 |
CN107871066A (zh) * | 2016-09-28 | 2018-04-03 | 传化物流集团有限公司 | 基于安卓系统的代码编译方法及装置 |
CN108733379A (zh) * | 2018-05-28 | 2018-11-02 | 常熟理工学院 | 基于dex字节码抽离映射混淆的安卓应用加固方法 |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110717150A (zh) * | 2019-10-08 | 2020-01-21 | 北京顶象技术有限公司 | 代码保护方法、装置、保护设备及可读存储介质 |
CN110990019A (zh) * | 2019-11-20 | 2020-04-10 | 腾讯音乐娱乐科技(深圳)有限公司 | 一种Java类分析方法、装置、存储介质及电子设备 |
CN110990019B (zh) * | 2019-11-20 | 2023-05-02 | 腾讯音乐娱乐科技(深圳)有限公司 | 一种Java类分析方法、装置、存储介质及电子设备 |
CN111159662A (zh) * | 2019-12-25 | 2020-05-15 | 郑州阿帕斯数云信息科技有限公司 | 一种数据的处理方法和装置 |
CN111984944A (zh) * | 2020-08-28 | 2020-11-24 | 重庆小雨点小额贷款有限公司 | 一种源代码处理方法、相关装置及存储介质 |
CN111984944B (zh) * | 2020-08-28 | 2024-04-19 | 重庆小雨点小额贷款有限公司 | 一种源代码处理方法、相关装置及存储介质 |
CN112925523A (zh) * | 2021-03-02 | 2021-06-08 | 京东数字科技控股股份有限公司 | 对象比较方法、装置、设备及计算机可读介质 |
CN113094664A (zh) * | 2021-04-09 | 2021-07-09 | 每日互动股份有限公司 | 一种防止安卓应用程序被反编译的系统 |
CN113094665A (zh) * | 2021-04-09 | 2021-07-09 | 每日互动股份有限公司 | 一种防止java程序被反编译的系统 |
CN113434148A (zh) * | 2021-06-30 | 2021-09-24 | 平安普惠企业管理有限公司 | 防解密客户端开发编译方法、装置、电子设备及存储介质 |
CN113434148B (zh) * | 2021-06-30 | 2024-03-22 | 广东迅维信息产业股份有限公司 | 防解密客户端开发编译方法、装置、电子设备及存储介质 |
WO2023016481A1 (zh) * | 2021-08-13 | 2023-02-16 | 华为技术有限公司 | 一种数据处理方法及相关装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109740315A (zh) | 基于安卓平台的常量保护方法、装置、设备及存储介质 | |
Enck et al. | Taintdroid: an information-flow tracking system for realtime privacy monitoring on smartphones | |
JP6815385B2 (ja) | アプリケーションのコード難読化のためのシステムおよび方法 | |
WO2017049800A1 (zh) | 检测应用漏洞代码的方法和装置 | |
US8090959B2 (en) | Method and apparatus for protecting .net programs | |
KR20170087007A (ko) | 악성 코드 분석을 위한 전자 장치 및 이의 방법 | |
EP2897074A1 (en) | Application code obfuscation device based on self-conversion and method therefor | |
CN107908392B (zh) | 数据采集工具包定制方法、装置、终端和存储介质 | |
CN110781462B (zh) | 一种资源的混淆方法和装置 | |
CN110414261A (zh) | 一种数据脱敏方法、装置、设备及可读存储介质 | |
CN109948308A (zh) | 代码安全保护方法、装置、电子设备和计算机可读存储介质 | |
CN112597454A (zh) | 代码混淆方法、代码运行方法、装置、介质与设备 | |
CN110309631B (zh) | 一种编程语言结构混淆处理方法、智能终端及存储介质 | |
CN104063225B (zh) | 锁屏主题开发方法及装置 | |
CN110532165B (zh) | 应用程序安装包特性检测方法、装置、设备及存储介质 | |
CN112948773B (zh) | 脚本加密与解密方法、终端设备及可读存储介质 | |
CN107292135A (zh) | 一种程序代码保护方法和装置 | |
CN107895120B (zh) | 跨平台应用中数据处理方法、装置、电子设备和存储介质 | |
CN110059456A (zh) | 代码保护方法、代码保护装置、存储介质与电子设备 | |
CN109885990A (zh) | 脚本管理方法 | |
WO2016201853A1 (zh) | 加解密功能的实现方法、装置及服务器 | |
CN112214736A (zh) | 一种代码加密方法及相关组件 | |
CN108399319A (zh) | 源代码保护方法、应用服务器及计算机可读存储介质 | |
CN107871066B (zh) | 基于安卓系统的代码编译方法及装置 | |
CN114238948A (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 | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20190510 |