CN113642015A - 一种文件加密方法、装置、电子设备及存储介质 - Google Patents
一种文件加密方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN113642015A CN113642015A CN202110881251.5A CN202110881251A CN113642015A CN 113642015 A CN113642015 A CN 113642015A CN 202110881251 A CN202110881251 A CN 202110881251A CN 113642015 A CN113642015 A CN 113642015A
- Authority
- CN
- China
- Prior art keywords
- file
- constant
- decryption module
- sdk
- intermediate format
- 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 57
- 230000006870 function Effects 0.000 claims description 31
- 238000004891 communication Methods 0.000 claims description 18
- 238000004590 computer program Methods 0.000 claims description 8
- 238000000605 extraction Methods 0.000 claims description 6
- 230000008569 process Effects 0.000 description 10
- 230000003068 static effect Effects 0.000 description 10
- 238000012545 processing Methods 0.000 description 9
- 238000006243 chemical reaction Methods 0.000 description 4
- 230000001960 triggered effect Effects 0.000 description 4
- 230000009471 action Effects 0.000 description 3
- 238000011161 development Methods 0.000 description 3
- 238000010586 diagram Methods 0.000 description 3
- 230000010354 integration Effects 0.000 description 3
- 238000013500 data storage Methods 0.000 description 1
- 230000006837 decompression Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- 239000000835 fiber Substances 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 239000007787 solid Substances 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
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/11—File system administration, e.g. details of archiving or snapshots
- G06F16/113—Details of archiving
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/14—Details of searching files based on file metadata
- G06F16/148—File search processing
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Library & Information Science (AREA)
- Health & Medical Sciences (AREA)
- Bioethics (AREA)
- General Health & Medical Sciences (AREA)
- Computer Hardware Design (AREA)
- Computer Security & Cryptography (AREA)
- Software Systems (AREA)
- Storage Device Security (AREA)
Abstract
本发明实施例提供了一种文件加密方法、装置、电子设备及存储介质,涉及文件保护技术领域。该方法包括:提取SDK的归档文件中定义的常量;将常量按照预设加密算法进行加密;将归档文件中对常量的定义指令,替换成预生成的解密模块的调用指令,并将加密后的常量作为调用解密模块时,传递给解密模块的参数;其中解密模块位于SDK内,用于按照与预设加密算法对应的解密算法,对接收到的参数进行解密。本发明将SDK中的常量定义替换成解密模块调用指令,常量不再以明文的方式暴露在SDK中,避免了常量明文暴露的风险,提高了安全性能。且当调用SDK的常量时,调用的实际上是解密模块,解密模块将加密后的常量进行解密后输出,不会影响SDK的正常使用。
Description
技术领域
本发明涉及文件保护技术领域,尤其涉及一种文件加密方法、装置、电子设备及存储介质。
背景技术
在SDK(Software Development Kit,软件开发工具包)中,一些密钥、文本提示、配置项名称等重要信息往往以常量保存在代码里,存在明文暴露风险。破解者只需要静态分析SDK文件就能找到这些常量信息,或者通过提示文本的一个Find命令(查找命令)即可定位关键代码位置,并查看暴露的明文信息,安全性能差。
发明内容
本发明提供一种文件加密方法、装置、电子设备及存储介质,解决现有技术中SDK中的常量存在明文暴露风险,安全性能差的问题。
在本发明实施的第一方面,提供了一种文件加密方法,包括:
提取软件开发工具包SDK的归档文件中定义的常量;
将所述常量按照预设加密算法进行加密;
将所述归档文件中对所述常量的定义指令,替换成预生成的解密模块的调用指令,并将加密后的所述常量作为调用所述解密模块时,传递给所述解密模块的参数;
其中所述解密模块位于所述SDK内,用于按照与所述预设加密算法对应的解密算法,对接收到的参数进行解密。
可选的,提取软件开发工具包SDK的归档文件中定义的常量的步骤包括:
提取所述SDK中的归档文件,并获取所述归档文件对应的第一中间格式文件;
对所述第一中间格式文件进行语法解析,并根据解析结果提取所述第一中间格式文件中定义的常量;
将所述归档文件中对所述常量的定义指令,替换成预生成的解密模块的调用指令的步骤包括:
将所述第一中间格式文件中对所述常量的定义指令,替换成预生成的解密模块的调用指令。
可选的,将所述第一中间格式文件中对所述常量的定义指令,替换成预生成的解密模块的调用指令之后,所述方法还包括:
获取所述解密模块对应的第二中间格式文件;
将替换后的第一中间格式文件和所述第二中间格式文件进行合并处理,获得合并后的归档文件;
将所述合并后的归档文件重新放到所述SDK中,并将所述解密模块除所述第二中间格式文件外的其他文件也放到所述SDK中。
可选的,提取软件开发工具包SDK的归档文件中定义的常量之前,所述方法还包括:
根据所述预设加密算法对应的解密算法,生成解密函数;
将所述解密函数编译成共享库文件,并获取所述共享库文件的加载调用程序;
获取所述解密模块对应的第二中间格式文件的步骤包括:
获取所述加载调用程序对应的第二中间格式文件。
可选的,将所述解密模块除所述第二中间格式文件外的其他文件也放到所述SDK中的步骤包括:
将所述共享库文件也放到所述SDK中。
可选的,将替换后的第一中间格式文件和所述第二中间格式文件进行合并处理,获得合并后的归档文件的步骤包括:
将替换后的第一中间格式文件和所述第二中间格式文件进行合并后,将合并后的中间格式文件编译成虚拟机可执行文件;
将所述虚拟机可执行文件转换成归档文件。
可选的,将所述归档文件中对所述常量的定义指令,替换成预生成的解密模块的调用指令,并将加密后的所述常量作为调用所述解密模块时,传递给所述解密模块的参数之后,所述方法还包括:
当调用所述常量时,通过所述调用指令调用所述解密模块,并将加密后的所述常量作为参数传递给所述解密模块;
通过所述解密模块将加密后的所述常量,按照与所述预设加密算法对应的解密算法进行解密后输出。
在本发明实施的第二方面,还提供了一种文件加密装置,包括:
提取模块,用于提取软件开发工具包SDK的归档文件中定义的常量;
加密模块,用于将所述常量按照预设加密算法进行加密;
替换模块,用于将所述归档文件中对所述常量的定义指令,替换成预生成的解密模块的调用指令,并将加密后的所述常量作为调用所述解密模块时,传递给所述解密模块的参数;
其中所述解密模块位于所述SDK内,用于按照与所述预设加密算法对应的解密算法,对接收到的参数进行解密。
在本发明实施的第三方面,还提供了一种电子设备,包括:处理器、通信接口、存储器和通信总线;其中,处理器、通信接口以及存储器通过通信总线完成相互间的通信;
存储器,用于存放计算机程序;
处理器,用于执行存储器上所存放的程序时,实现如上任一项所述的文件加密方法中的步骤。
在本发明实施的第四方面,还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如上任一项所述的文件加密方法。
针对在先技术,本发明具备如下优点:
本发明实施例中,首先提取SDK的归档文件中定义的常量;然后将常量按照预设加密算法进行加密;再将归档文件中对该常量的定义指令,替换成预生成的解密模块的调用指令,并将加密后的常量作为调用解密模块时,传递给解密模块的参数。其中解密模块位于SDK内,用于按照与预设加密算法对应的解密算法,对接收到的参数进行解密。如此SDK中原本的常量定义替换成了解密模块的调用指令,原本的常量不再以明文的方式暴露在SDK中,即使破解者通过静态分析SDK文件或者通过提示文件的查找命令找到常量所在的位置,也只能看到调用指令,看不到常量本身,避免了常量明文暴露的风险,提高了安全性能。且当调用SDK中进行了加密的常量时,调用的实际上是解密模块,加密后的常量作为调用解密模块时的参数传递给解密模块,解密模块接收到参数后,将加密后的常量进行解密后输出,这样调用得到的仍然是解密常量,不会影响SDK的正常使用,从而在不影响SDK使用性能的基础上,避免了常量明文暴露的风险,提高了安全性能。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍。
图1为本发明实施例提供的文件加密方法的流程示意图;
图2为本发明实施例提供的文件加密方法的另一流程示意图;
图3为本发明实施例提供的文件加密方法的又一流程示意图;
图4为本发明实施例提供的文件加密装置的示意框图;
图5为本发明实施例提供的电子设备的示意框图。
具体实施方式
下面将参照附图更详细地描述本发明的示例性实施例。虽然附图中显示了本发明的示例性实施例,然而应当理解的是,还可以以各种形式实现本发明而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本发明,并且能够将本发明的范围完整的传达给本领域的技术人员。
图1是本发明实施例提供的文件加密方法的流程示意图,参见图1所示,该文件加密方法,包括:
步骤101:提取软件开发工具包SDK的归档文件中定义的常量。
其中,SDK是软件工程师为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件时的开发工具的集合。SDK里可能有多个归档文件,归档文件用于聚合大量的类class文件、清单文件等到一个文件,以便于开发平台应用软件或库。
其中,归档文件包括Jar(Java Archive,Java归档)或Aar(Android Archive,安卓归档)格式的文件。Jar文件包含类class文件与清单文件,不包含图片等所有资源目录res中的资源文件。Aar文件不仅包含类class文件与清单文件,还包含资源目录res中的资源文件。
本步骤中,通过提取SDK的归档文件中定义的常量,以实现对SDK常量的加密。
步骤102:将所述常量按照预设加密算法进行加密。
本步骤中,通过将提取出来的常量按照预设加密算法进行加密,以实现对常量的保护,避免明文暴露。
其中,本发明实施例对于采用何种加密算法不做限定,现有技术中任何合理的加密算法都可应用到本发明实施例中。
步骤103:将所述归档文件中对所述常量的定义指令,替换成预生成的解密模块的调用指令,并将加密后的所述常量作为调用所述解密模块时,传递给所述解密模块的参数;其中所述解密模块位于所述SDK内,用于按照与所述预设加密算法对应的解密算法,对接收到的参数进行解密。
本发明实施例为了在常量加密后,不影响对常量的正常使用,预生成了解密模块,并将预生成的解密模块放到了SDK内。本步骤中,将SDK归档文件中对常量的定义指令,替换成预生成的解密模块的调用指令,如此当调用常量时,调用的实际上是该解密模块,且加密后的常量作为调用时的参数传递给解密模块,解密模块接收到参数后,将加密后的常量进行解密后输出,这样调用得到的仍然是解密常量,不会影响SDK的正常使用。且将SDK中原本的常量定义替换成了解密模块的调用指令,原本的常量不再以明文的方式暴露在SDK中,即使破解者通过静态分析SDK文件或者通过提示文件的查找命令找到常量所在的位置,也只能看到调用指令,看不到常量本身,避免了常量明文暴露的风险。
本发明实施例的文件加密方法,将SDK中原本的常量定义替换成了解密模块的调用指令,原本的常量不再以明文的方式暴露在SDK中,即使破解者通过静态分析SDK文件或者通过提示文件的查找命令找到常量所在的位置,也只能看到调用指令,看不到常量本身,避免了常量明文暴露的风险,提高了安全性能。且当调用SDK中进行了加密的常量时,调用的实际上是解密模块,加密后的常量作为调用解密模块时的参数传递给解密模块,解密模块接收到参数后,将加密后的常量进行解密后输出,这样调用得到的仍然是解密常量,不会影响SDK的正常使用,从而在不影响SDK使用性能的基础上,避免了常量明文暴露的风险,提高了安全性能。
优选的,上述步骤103之后,所述方法还包括:
当调用所述常量时,通过所述调用指令调用所述解密模块,并将加密后的所述常量作为参数传递给所述解密模块;
通过所述解密模块将加密后的所述常量,按照与所述预设加密算法对应的解密算法进行解密后输出。
此时,当调用SDK中进行了加密的常量时,通过调用指令调用的实际上是解密模块,加密后的常量作为调用解密模块时的参数传递给解密模块,解密模块接收到参数后,将加密后的常量进行解密后输出,这样调用得到的仍然是解密常量,不会影响SDK的正常使用,从而在不影响SDK使用性能的基础上,避免了常量明文暴露的风险,提高了安全性能。
优选的,如图2所示,上述步骤101包括:
步骤1011:提取所述SDK中的归档文件,并获取所述归档文件对应的第一中间格式文件。
其中,中间格式文件指的是虚拟机反汇编语言文件。
其中,中间格式文件包括smali文件。对于安卓系统而言,程序代码一般是用java编写的,执行java程序一般需要用到java虚拟机,在安卓平台上也不例外。安卓平台使用专门的安卓虚拟机。安卓虚拟机的可执行文件并不是普通的类class文件,而是重新整合打包后生成的dex文件。dex文件反编译之后就是smali文件,所以说,smali文件是安卓虚拟机的反汇编语言。当我们反编译之后得到smali文件,就可以正确的理解虚拟机编译语言的意思,从而通过语法分析找出定义的常量等。
当然,中间格式文件并不限于smali文件,也可以是其他虚拟机反汇编语言文件,在此不作限定。
本步骤中,通过提取SDK中的归档文件,并获取对应的中间格式文件,能够基于中间格式文件分析程序的含义,从而提取定义的常量。
其中,当中间格式文件包括smali文件时,上述步骤1011的具体执行过程可以是:假设通过解压提取出SDK中的归档文件为多个jar文件,先使用SDK自带的转换工具(例如dx工具)将jar文件转换成虚拟机可执行文件dex文件,然后使用反编译器(例如baksmali反编译工具)将dex文件反编译成smali文件,从而基于smali文件分析程序的含义,提取定义的常量。
步骤1012:对所述第一中间格式文件进行语法解析,并根据解析结果提取所述第一中间格式文件中定义的常量。
本步骤中,得到归档文件的第一中间格式文件后,可以对第一中间格式文件进行语法解析,准确提取出其中定义的常量,以实现对常量的加密。
上述步骤103包括:
步骤1031:将所述第一中间格式文件中对所述常量的定义指令,替换成预生成的解密模块的调用指令。
本步骤中,将第一中间格式文件中对常量的定义指令,替换成预生成的解密模块的调用指令,使原本的常量不再以明文的方式暴露在SDK中,即使破解者通过静态分析SDK文件或者通过提示文件的查找命令找到常量所在的位置,也只能看到调用指令,看不到常量本身,避免了常量明文暴露的风险,提高了安全性能。同时加密后的常量作为调用解密模块时,传递给解密模块的参数,这样触发常量调用时,触发的是解密模块对加密后的常量的解密操作,得到的常量结果跟原来一样。
例如,假设提取出第一中间格式文件中定义的字符串AAA,则将字符串AAA按照预设加密算法进行加密,得到加密字符串@*2FED,将原来字符串AAA的定义指令替换成解密模块的调用指令,并将加密字符串@*2FED作为调用解密模块时传递的参数。如此当触发字符串AAA声明或调用时,其实触发的是解密模块的调用,同时加密字符串@*2FED作为参数传递给解密模块,由解密模块将加密字符串@*2FED进行解密,得到字符串AAA后输出,得到的字符串结果跟原来一样,且避免了明文暴露,提高了安全性能。
优选的,上述步骤1031之后,所述方法还包括:
步骤104:获取所述解密模块对应的第二中间格式文件。
这里,通过获取解密模块对应的第二中间格式文件,以实现对SDK的归档文件和解密模块的合并处理,通过合并得到合并后的归档文件再放入SDK中,相当于只是改变了归档文件的内容,能够保证尽量不破坏SDK原本的结构。
步骤105:将替换后的第一中间格式文件和所述第二中间格式文件进行合并处理,获得合并后的归档文件。
这里,通过将SDK归档文件对应的第一中间格式文件中,对常量的定义指令替换成解密模块调用指令,再将替换后的第一中间格式文件与解密模块的第二中间格式文件进行合并处理,获得合并后的归档文件,相当于将SDK原本的归档文件替换成了该合并后的归档文件,不会改变SDK原本的结构。
具体的,上述步骤105可包括:
将替换后的第一中间格式文件和所述第二中间格式文件进行合并后,将合并后的中间格式文件编译成虚拟机可执行文件;将所述虚拟机可执行文件转换成归档文件。
这里,首先将SDK替换后得到的第一中间格式文件和解密模块对应的第二中间格式文件合并,然后将合并后的中间格式文件编译成虚拟机可执行文件,如dex文件,最后将虚拟机可执行文件转换成归档文件即可。
例如,假设第一中间格式文件和第二中间格式文件均为smali文件,归档文件为jar文件,则上述步骤105的具体执行过程可以是:先将第一smali文件和第二smali文件合并,再使用编译器(例如smali编译工具)将合并后的smali文件编译成虚拟机可执行文件dex文件,然后使用转换工具(例如dex2jar工具)将dex文件转换成jar文件,就得到了合并后的归档文件。
步骤106:将所述合并后的归档文件重新放到所述SDK中,并将所述解密模块除所述第二中间格式文件外的其他文件也放到所述SDK中。
这里,得到合并后的归档文件后,将其重新放到SDK里,相当于只是改变了归档文件的内容,能够保证尽量不破坏SDK原本的结构,并将解密模块除了第二中间格式文件外的其他文件也放到SDK中,以保证解密模块的功能完整。
本发明实施例为了在常量加密后,不影响对常量的正常使用,预生成了解密模块,下面对解密模块的生成步骤说明如下。
优选的,上述步骤101之前,所述方法还包括:
步骤1001:根据所述预设加密算法对应的解密算法,生成解密函数。
这里,首先根据预设加密算法对应的解密算法,生成解密函数,以利用解密函数实现对加密后的常量的解密功能。
步骤1002:将所述解密函数编译成共享库文件,并获取所述共享库文件的加载调用程序。
这里,得到解密函数之后,将解密函数编译成共享库文件,使用共享库文件格式安全性会更高,然后获取共享库文件的加载调用程序,以实现对其的调用功能。
其中,共享库文件如可为so文件,so文件是Linux操作系统下共享库文件,它的文件格式被称为ELF(Executable Linkable Format,可执行链接格式)。由于安卓操作系统的底层基于Linux系统,所以so文件可以运行在安卓平台上。由于基于虚拟机的编程语言java更容易被人反编译,因此越来越多的应用将其中的核心代码以C/C++为编程语言,并且以so文件的形式供上层java代码调用,以保证安全性。
上述步骤104包括:
获取所述加载调用程序对应的第二中间格式文件。
这里,得到解密模块的共享库文件和加载调用程序之后,获取加载调用程序对应的第二中间格式文件,将SDK归档文件对应的第一中间格式文件中对常量的定义指令替换成解密模块调用指令后,再将替换后的第一中间格式文件与该第二中间格式文件进行合并处理,获得合并后的归档文件,最后将合并后的归档文件放到SDK中。
例如,假设将解密函数编译成共享库文件得到dec.so,中间格式文件为smali文件,获取第二中间格式文件的具体执行过程可以是:获取使用java编写dec.so的加载调用程序,将dec.so和加载调用程序编译成Apk(Android application package,安卓应用程序包)或Aar文件,然后使用反编译器(例如baksmali反编译工具)将Apk或Aar文件里的dex文件反编译成smali文件,这样就得到了解密模块中java编写dec.so的加载调用程序对应的第二中间格式文件。
其中,上述获取第二中间格式文件的具体执行过程可以在步骤1031之后执行,即放在步骤1041执行,也可以在步骤1002之后执行,如果在步骤1002之后执行,则步骤1041在执行时无需执行此具体过程,直接获取结果即可。
可选的,上述步骤106中,将所述解密模块除所述第二中间格式文件外的其他文件也放到所述SDK中的步骤包括:
将所述共享库文件也放到所述SDK中。
这里,将合并后的归档文件放到SDK时,将解密模块的共享库文件也放到SDK中,以保证解密模块功能的完整性。
下面对本发明实施例的一具体应用流程举例说明如下。
如图3所示,本发明实施例的文件加密方法可通过两个模块执行,一个是预生成解密模块,另一个是SDK处理模块。本发明实施例的文件加密方法包括:
步骤301:预生成解密模块首先根据预设加密算法对应的解密算法生成解密函数。
其中,解密函数如可为字符串解密原生native函数(一个参数字符串jsring,返回字符串jstring类),但不限于此。
其中,生成解密函数的工具如可采用NDK(Native Development Kit,原生开发工具)等,但不限于此。在NDK生成native解密函数后,可导出使用,也可通过动态注册的方式使用。
步骤302:预生成解密模块将解密函数编译成共享库文件dec.so。
步骤303:预生成解密模块获取共享库文件dec.so的加载调用程序,并声明native函数如何调用。
步骤304:预生成解密模块将共享库文件dec.so和加载调用程序编译成Apk或Aar文件。
步骤305:预生成解密模块将Apk或Aar文件中的虚拟机可执行文件dex反编译成smali文件,获得第二中间格式文件。
步骤306:SDK处理模块将SDK解压提取出归档文件,归档文件包括jar或Aar格式文件。
步骤307:SDK处理模块使用自带的转换工具(例如dx工具)将归档文件转换成虚拟机可执行文件dex文件。
步骤308:SDK处理模块将归档文件的dex文件反编译成smali文件,获得第一中间格式文件。
步骤309:SDK处理模块对第一中间格式文件进行语法解析,提取第一中间格式文件中定义的常量,将提取的常量进行加密,之后将第一中间格式文件中对常量的定义指令替换成解密模块的调用指令,并将加密后的常量作为调用时传递给解密模块的参数。
例如,假设解密模块的解密函数为字符串解密native函数,且第一中间格式文件中提取的常量为const-string,const-string/const-string/jumbo定义的字符串,对字符串加密之后得到字符串A,步骤309将上述两条字符串定义指令删除,替换成解密模块的native函数的静态调用invoke-static指令,且加密后的字符串A作为调用时返回给解密模块寄存器的参数,避免了明文暴露的风险。
当调用上述两条字符串定义的常量时,调用的是解密模块的native函数,且加密后的字符串A作为参数返回给解密模块寄存器,通过native函数将字符串A解密后输出,得到的字符串结果跟原来一样,不会影响正常使用。
步骤3010:SDK处理模块将替换后的第一中间格式文件,和第二中间格式文件合并后,编译成虚拟机可执行文件dex文件。
步骤3011:SDK处理模块将合并的dex文件转换成归档文件,然后将合并的归档文件放到SDK里,并把共享库文件dec.so也放到SDK里。
至此,实现了对SDK常量的加密过程。
本发明实施例的文件加密方法,将SDK中原本的常量定义替换成了解密模块的调用指令,原本的常量不再以明文的方式暴露在SDK中,即使破解者通过静态分析SDK文件或者通过提示文件的查找命令找到常量所在的位置,也只能看到调用指令,看不到常量本身,能有效抵御静态分析,避免密钥、文本提示、配置项名称等常量明文暴露的风险,提高了安全性能。且当调用SDK中进行了加密的常量时,调用的实际上是解密模块,加密后的常量作为调用解密模块时的参数传递给解密模块,解密模块接收到参数后,将加密后的常量进行解密后输出,这样调用得到的仍然是解密常量,不会影响SDK的正常使用,从而在不影响SDK使用性能的基础上,避免了常量明文暴露的风险,提高了安全性能。
参见图4所示,本发明实施还提供了一种文件加密装置400,包括:
提取模块401,用于提取软件开发工具包SDK的归档文件中定义的常量;
加密模块402,用于将所述常量按照预设加密算法进行加密;
替换模块403,用于将所述归档文件中对所述常量的定义指令,替换成预生成的解密模块的调用指令,并将加密后的所述常量作为调用所述解密模块时,传递给所述解密模块的参数;
其中所述解密模块位于所述SDK内,用于按照与所述预设加密算法对应的解密算法,对接收到的参数进行解密。
本发明实施例的文件加密装置400,将SDK中原本的常量定义替换成了解密模块的调用指令,原本的常量不再以明文的方式暴露在SDK中,即使破解者通过静态分析SDK文件或者通过提示文件的查找命令找到常量所在的位置,也只能看到调用指令,看不到常量本身,避免了常量明文暴露的风险,提高了安全性能。且当调用SDK中进行了加密的常量时,调用的实际上是解密模块,加密后的常量作为调用解密模块时的参数传递给解密模块,解密模块接收到参数后,将加密后的常量进行解密后输出,这样调用得到的仍然是解密常量,不会影响SDK的正常使用,从而在不影响SDK使用性能的基础上,避免了常量明文暴露的风险,提高了安全性能。
优选的,提取模块401包括:
第一提取子模块,用于提取所述SDK中的归档文件,并获取所述归档文件对应的第一中间格式文件;
第二提取子模块,用于对所述第一中间格式文件进行语法解析,并根据解析结果提取所述第一中间格式文件中定义的常量;
替换模块403包括:
替换子模块,用于将所述第一中间格式文件中对所述常量的定义指令,替换成预生成的解密模块的调用指令。
优选的,所述装置还包括:
第一获取模块,用于获取所述解密模块对应的第二中间格式文件;
合并模块,用于将替换后的第一中间格式文件和所述第二中间格式文件进行合并处理,获得合并后的归档文件;
整合模块,用于将所述合并后的归档文件重新放到所述SDK中,并将所述解密模块除所述第二中间格式文件外的其他文件也放到所述SDK中。
优选的,所述装置还包括:
生成模块,用于根据所述预设加密算法对应的解密算法,生成解密函数;
第二获取模块,用于将所述解密函数编译成共享库文件,并获取所述共享库文件的加载调用程序;
所述第一获取模块包括:
获取子模块,用于获取所述加载调用程序对应的第二中间格式文件。
优选的,所述整合模块包括:
整合子模块,用于将所述共享库文件也放到所述SDK中。
优选的,所述合并模块包括:
合并子模块,用于将替换后的第一中间格式文件和所述第二中间格式文件进行合并后,将合并后的中间格式文件编译成虚拟机可执行文件;
转换子模块,用于将所述虚拟机可执行文件转换成归档文件。
优选的,所述装置还包括:
调用模块,用于当调用所述常量时,通过所述调用指令调用所述解密模块,并将加密后的所述常量作为参数传递给所述解密模块;
解密模块,用于通过所述解密模块将加密后的所述常量,按照与所述预设加密算法对应的解密算法进行解密后输出。
本发明实施例的文件加密装置,将SDK中原本的常量定义替换成了解密模块的调用指令,原本的常量不再以明文的方式暴露在SDK中,即使破解者通过静态分析SDK文件或者通过提示文件的查找命令找到常量所在的位置,也只能看到调用指令,看不到常量本身,能有效抵御静态分析,避免密钥、文本提示、配置项名称等常量明文暴露的风险,提高了安全性能。且当调用SDK中进行了加密的常量时,调用的实际上是解密模块,加密后的常量作为调用解密模块时的参数传递给解密模块,解密模块接收到参数后,将加密后的常量进行解密后输出,这样调用得到的仍然是解密常量,不会影响SDK的正常使用,从而在不影响SDK使用性能的基础上,避免了常量明文暴露的风险,提高了安全性能。
对于上述装置实施例而言,由于其与方法实施例基本相似,相关之处参见方法实施例的部分说明即可。
本发明实施例还提供了一种电子设备,该电子设备可以是移动终端。如图5所示,包括处理器501、通信接口502、存储器503和通信总线504,其中,处理器501,通信接口502,存储器503通过通信总线504完成相互间的通信。
存储器503,用于存放计算机程序。
处理器501用于执行存储器503上所存放的程序时,实现如下步骤:
提取软件开发工具包SDK的归档文件中定义的常量;
将所述常量按照预设加密算法进行加密;
将所述归档文件中对所述常量的定义指令,替换成预生成的解密模块的调用指令,并将加密后的所述常量作为调用所述解密模块时,传递给所述解密模块的参数;
其中所述解密模块位于所述SDK内,用于按照与所述预设加密算法对应的解密算法,对接收到的参数进行解密。
上述电子设备提到的通信总线可以是外设部件互连标准(Peripheral ComponentInterconnect,简称PCI)总线或扩展工业标准结构(Extended Industry StandardArchitecture,简称EISA)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
通信接口用于上述电子设备与其他设备之间的通信。
存储器可以包括随机存取存储器(Random Access Memory,简称RAM),也可以包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。
上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,简称CPU)、网络处理器(Network Processor,简称NP)等;还可以是数字信号处理器(Digital Signal Processing,简称DSP)、专用集成电路(Application SpecificIntegrated Circuit,简称ASIC)、现场可编程门阵列(Field-Programmable Gate Array,简称FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
在本发明提供的又一实施例中,还提供了一种计算机可读存储介质,该计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述实施例中所述的文件加密方法。
在本发明提供的又一实施例中,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述实施例中所述的文件加密方法。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘Solid State Disk(SSD))等。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,包含在本发明的保护范围内。
Claims (10)
1.一种文件加密方法,其特征在于,包括:
提取软件开发工具包SDK的归档文件中定义的常量;
将所述常量按照预设加密算法进行加密;
将所述归档文件中对所述常量的定义指令,替换成预生成的解密模块的调用指令,并将加密后的所述常量作为调用所述解密模块时,传递给所述解密模块的参数;
其中所述解密模块位于所述SDK内,用于按照与所述预设加密算法对应的解密算法,对接收到的参数进行解密。
2.根据权利要求1所述的文件加密方法,其特征在于,提取软件开发工具包SDK的归档文件中定义的常量的步骤包括:
提取所述SDK中的归档文件,并获取所述归档文件对应的第一中间格式文件;
对所述第一中间格式文件进行语法解析,并根据解析结果提取所述第一中间格式文件中定义的常量;
将所述归档文件中对所述常量的定义指令,替换成预生成的解密模块的调用指令的步骤包括:
将所述第一中间格式文件中对所述常量的定义指令,替换成预生成的解密模块的调用指令。
3.根据权利要求2所述的文件加密方法,其特征在于,将所述第一中间格式文件中对所述常量的定义指令,替换成预生成的解密模块的调用指令之后,所述方法还包括:
获取所述解密模块对应的第二中间格式文件;
将替换后的第一中间格式文件和所述第二中间格式文件进行合并处理,获得合并后的归档文件;
将所述合并后的归档文件重新放到所述SDK中,并将所述解密模块除所述第二中间格式文件外的其他文件也放到所述SDK中。
4.根据权利要求3所述的文件加密方法,其特征在于,提取软件开发工具包SDK的归档文件中定义的常量之前,所述方法还包括:
根据所述预设加密算法对应的解密算法,生成解密函数;
将所述解密函数编译成共享库文件,并获取所述共享库文件的加载调用程序;
获取所述解密模块对应的第二中间格式文件的步骤包括:
获取所述加载调用程序对应的第二中间格式文件。
5.根据权利要求4所述的文件加密方法,其特征在于,将所述解密模块除所述第二中间格式文件外的其他文件也放到所述SDK中的步骤包括:
将所述共享库文件也放到所述SDK中。
6.根据权利要求3所述的文件加密方法,其特征在于,将替换后的第一中间格式文件和所述第二中间格式文件进行合并处理,获得合并后的归档文件的步骤包括:
将替换后的第一中间格式文件和所述第二中间格式文件进行合并后,将合并后的中间格式文件编译成虚拟机可执行文件;
将所述虚拟机可执行文件转换成归档文件。
7.根据权利要求1所述的文件加密方法,其特征在于,将所述归档文件中对所述常量的定义指令,替换成预生成的解密模块的调用指令,并将加密后的所述常量作为调用所述解密模块时,传递给所述解密模块的参数之后,所述方法还包括:
当调用所述常量时,通过所述调用指令调用所述解密模块,并将加密后的所述常量作为参数传递给所述解密模块;
通过所述解密模块将加密后的所述常量,按照与所述预设加密算法对应的解密算法进行解密后输出。
8.一种文件加密装置,其特征在于,包括:
提取模块,用于提取软件开发工具包SDK的归档文件中定义的常量;
加密模块,用于将所述常量按照预设加密算法进行加密;
替换模块,用于将所述归档文件中对所述常量的定义指令,替换成预生成的解密模块的调用指令,并将加密后的所述常量作为调用所述解密模块时,传递给所述解密模块的参数;
其中所述解密模块位于所述SDK内,用于按照与所述预设加密算法对应的解密算法,对接收到的参数进行解密。
9.一种电子设备,其特征在于,包括:处理器、通信接口、存储器和通信总线;其中,处理器、通信接口以及存储器通过通信总线完成相互间的通信;
存储器,用于存放计算机程序;
处理器,用于执行存储器上所存放的程序时,实现如权利要求1至7任一项所述的文件加密方法中的步骤。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1至7任一项所述的文件加密方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110881251.5A CN113642015B (zh) | 2021-08-02 | 2021-08-02 | 一种文件加密方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110881251.5A CN113642015B (zh) | 2021-08-02 | 2021-08-02 | 一种文件加密方法、装置、电子设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113642015A true CN113642015A (zh) | 2021-11-12 |
CN113642015B CN113642015B (zh) | 2024-07-26 |
Family
ID=78419322
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110881251.5A Active CN113642015B (zh) | 2021-08-02 | 2021-08-02 | 一种文件加密方法、装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113642015B (zh) |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2001290707A (ja) * | 2000-04-05 | 2001-10-19 | Kazumi Mochizuki | データ処理方法、データ処理プログラムを格納したコンピュータ読取可能な記憶媒体、およびデータ処理装置 |
US8458494B1 (en) * | 2012-03-26 | 2013-06-04 | Symantec Corporation | Systems and methods for secure third-party data storage |
CN109918917A (zh) * | 2019-03-19 | 2019-06-21 | 北京智游网安科技有限公司 | 防止h5源码泄漏的方法、计算机设备和存储介质 |
CN110059455A (zh) * | 2019-04-09 | 2019-07-26 | 北京迈格威科技有限公司 | 代码加密方法、装置、电子设备和计算机可读存储介质 |
CN110399744A (zh) * | 2019-07-31 | 2019-11-01 | 上海商米科技集团股份有限公司 | 数据加密方法和装置、移动终端以及计算机可读介质 |
CN110929234A (zh) * | 2019-11-28 | 2020-03-27 | 施羊梦燊 | 一种基于代码虚拟化的Python程序加密保护系统与方法 |
CN111400736A (zh) * | 2020-03-17 | 2020-07-10 | 同盾(广州)科技有限公司 | 应用程序加密的方法、装置、存储介质及电子设备 |
CN112115429A (zh) * | 2020-08-25 | 2020-12-22 | 北京基调网络股份有限公司 | 一种Java类加密、解密方法及计算机可读存储介质 |
CN113094665A (zh) * | 2021-04-09 | 2021-07-09 | 每日互动股份有限公司 | 一种防止java程序被反编译的系统 |
-
2021
- 2021-08-02 CN CN202110881251.5A patent/CN113642015B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2001290707A (ja) * | 2000-04-05 | 2001-10-19 | Kazumi Mochizuki | データ処理方法、データ処理プログラムを格納したコンピュータ読取可能な記憶媒体、およびデータ処理装置 |
US8458494B1 (en) * | 2012-03-26 | 2013-06-04 | Symantec Corporation | Systems and methods for secure third-party data storage |
CN109918917A (zh) * | 2019-03-19 | 2019-06-21 | 北京智游网安科技有限公司 | 防止h5源码泄漏的方法、计算机设备和存储介质 |
CN110059455A (zh) * | 2019-04-09 | 2019-07-26 | 北京迈格威科技有限公司 | 代码加密方法、装置、电子设备和计算机可读存储介质 |
CN110399744A (zh) * | 2019-07-31 | 2019-11-01 | 上海商米科技集团股份有限公司 | 数据加密方法和装置、移动终端以及计算机可读介质 |
CN110929234A (zh) * | 2019-11-28 | 2020-03-27 | 施羊梦燊 | 一种基于代码虚拟化的Python程序加密保护系统与方法 |
CN111400736A (zh) * | 2020-03-17 | 2020-07-10 | 同盾(广州)科技有限公司 | 应用程序加密的方法、装置、存储介质及电子设备 |
CN112115429A (zh) * | 2020-08-25 | 2020-12-22 | 北京基调网络股份有限公司 | 一种Java类加密、解密方法及计算机可读存储介质 |
CN113094665A (zh) * | 2021-04-09 | 2021-07-09 | 每日互动股份有限公司 | 一种防止java程序被反编译的系统 |
Non-Patent Citations (1)
Title |
---|
袁晓筱;罗森林;杨鹏;: "Android系统应用程序DEX文件保护方法研究", 信息网络安全, no. 07, 10 July 2020 (2020-07-10) * |
Also Published As
Publication number | Publication date |
---|---|
CN113642015B (zh) | 2024-07-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP2897073B1 (en) | Device for obfuscating application code and method for same | |
US7730542B2 (en) | Protecting software from unauthorized use by converting source code modules to byte codes | |
KR101518420B1 (ko) | 안드로이드 플랫폼에서의 apk 파일 관리 장치 및 방법 | |
US20160203087A1 (en) | Method for providing security for common intermediate language-based program | |
US20160357530A1 (en) | Method and apparatus for intermediate representation of applications | |
CN108229112A (zh) | 一种保护应用程序、应用程序的运行方法以及装置 | |
CN107430650B (zh) | 保护计算机程序以抵御逆向工程 | |
CN103460217A (zh) | 用于保护应用程序和相关计算机程序产品的方法 | |
JP6392446B2 (ja) | クラウドベースのアプリケーションセキュリティサービスの提供方法及びシステム | |
CN109614772B (zh) | 基于应用安装包文件的代码转换方法及装置 | |
CN110333868A (zh) | 用于生成子应用的安装包的方法和系统 | |
CN107871066B (zh) | 基于安卓系统的代码编译方法及装置 | |
CN111666078A (zh) | 源码加固方法、装置、计算机设备及存储介质 | |
CN114547558A (zh) | 授权方法、授权控制方法及装置、设备和介质 | |
CN110597496B (zh) | 应用程序的字节码文件获取方法及装置 | |
CN111382447B (zh) | 安装包的加密方法、存储介质及计算机设备 | |
KR101863325B1 (ko) | 역공학 방지 방법 및 장치 | |
CN111782239A (zh) | 软件打包和源码版本信息获取方法、装置及存储介质 | |
KR101436741B1 (ko) | 프로그램 보안 솔루션 적용 방법 및 시스템 | |
CN113642015B (zh) | 一种文件加密方法、装置、电子设备及存储介质 | |
CN113220314B (zh) | App资源加载及apk生成方法、装置、设备及介质 | |
CN113282294B (zh) | 基于安卓平台Java字符串混淆的方法和装置 | |
CN112287334B (zh) | 自定义库处理方法、装置及系统 | |
CN110298146B (zh) | 一种应用程序的处理、运行方法及装置 | |
CN112612479A (zh) | 一种基于安卓设备的apk静态分析方法和设备 |
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 |