CN104951674B - 用于应用程序的信息隐藏方法 - Google Patents
用于应用程序的信息隐藏方法 Download PDFInfo
- Publication number
- CN104951674B CN104951674B CN201410120621.3A CN201410120621A CN104951674B CN 104951674 B CN104951674 B CN 104951674B CN 201410120621 A CN201410120621 A CN 201410120621A CN 104951674 B CN104951674 B CN 104951674B
- Authority
- CN
- China
- Prior art keywords
- character string
- encryption
- code
- encrypted
- 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.)
- Active
Links
Landscapes
- Storage Device Security (AREA)
Abstract
本发明提出了用于应用程序的信息隐藏方法,所述方法包括:基于配置参数对目标应用程序的源代码或汇编代码中的明文字符串进行加密处理以隐藏所述明文字符串,其中,所述配置参数包括字符串筛选规则以及加密函数列表和对应的解密函数列表。本发明所公开的用于应用程序的信息隐藏方法能够对应用程序代码中使用的所有需要进行保护的明文字符串进行加密处理以获得增强的安全性。
Description
技术领域
本发明涉及信息隐藏方法,更具体地,涉及用于应用程序的信息隐藏方法。
背景技术
目前,随着计算机和网络应用的日益广泛以及不同领域的业务种类的日益丰富,基于特定操作系统的应用程序(例如运行于Android操作系统上的支付交易应用程序)的安全性变得越来越重要。
如本领域技术人员所知的,基于高级语言代码(例如JAVA代码)的应用程序在被编译生成后,其源代码中的涉及应用逻辑的字符串也被打包到生成在二进制文件中。由此,攻击者可以在逆向工程(即将二进制代码还原为源代码)的基础上通过字符串定位而分析应用程序代码,以得到该应用程序的完整的代码逻辑。因此,对基于高级语言代码(例如JAVA代码)的应用程序进行安全性保护随之变得越来越重要。
在现有的技术方案中,通常通过代码混淆的方式对应用程序进行安全性保护,例如,针对基于JAVA语言的应用程序,可以将具有明确含义的JAVA类名和方法名通过混淆而转换成一连串无意义的类名、方法名,从而打乱逆向工程的分析过程。
然而,现有的技术方案存在如下问题:由于仅仅对应用程序的一少部分具有明确含义的字符串(例如JAVA类名和方法名)进行了保护,而没有对应用程序代码中使用的其它明文字符串进行保护,故存在较大的潜在安全性隐患。
因此,存在如下需求:提供能够对应用程序代码中使用的所有需要进行保护的明文字符串进行加密处理以获得增强的安全性的信息隐藏方法。
发明内容
为了解决上述现有技术方案所存在的问题,本发明提出了能够对应用程序代码中使用的所有需要进行保护的明文字符串进行加密处理以获得增强的安全性的信息隐藏方法。
本发明的目的是通过以下技术方案实现的:
一种用于应用程序的信息隐藏方法,所述用于应用程序的信息隐藏方法包括:基于配置参数对目标应用程序的源代码或汇编代码中的明文字符串进行加密处理以隐藏所述明文字符串,其中,所述配置参数包括字符串筛选规则以及加密函数列表和对应的解密函数列表。
在上面所公开的方案中,优选地,所述方法进一步包括:如果所述目标应用程序是便于获取源代码的应用程序,则以如下方式隐藏所述目标应用程序中的明文字符串:
(A1)获取所述目标应用程序的源代码;
(A2)通过对所述源代码进行字符串扫描而获取所述源代码中的字符串;
(A3)根据所述字符串筛选规则从所获取的字符串中筛选出需要加密的字符串;
(A4)针对每个需要加密的字符串执行如下操作,直至所有需要加密的字符串均被加密:从所述加密函数列表中随机地选择一个加密函数,并通过所选择的加密函数加密该需要加密的字符串,以生成加密后的字符串;
(A5)针对每个加密后的字符串执行如下操作,直至所有加密后的字符串均被处理完毕,以获得加密后的新的应用程序代码:从所述解密函数列表中选择与该加密后的字符串的加密函数相对应的解密函数的代码,并将其与该加密后的字符串相组合,并用所述组合替换原始代码中的与该加密后的字符串相对应的原始字符串;
(A6)编译所获得的新的应用程序代码以进行后续的操作。
在上面所公开的方案中,优选地,所述方法进一步包括:如果所述目标应用程序是不便于获取源代码的应用程序,则以如下方式隐藏所述目标应用程序中的明文字符串:
(B1)获取所述目标应用程序的可执行代码;
(B2)通过反汇编工具将所述可执行代码转换成汇编代码;
(B3)通过对所述汇编代码进行字符串扫描而获取所述汇编代码中的字符串;
(B4)根据所述字符串筛选规则从所获取的字符串中筛选出需要加密的字符串;
(B5)针对每个需要加密的字符串执行如下操作,直至所有需要加密的字符串均被加密:从所述加密函数列表中随机地选择一个加密函数,并通过所选择的加密函数加密该需要加密的字符串,以生成加密后的字符串;
(B6)针对每个加密后的字符串执行如下操作,直至所有加密后的字符串均被处理完毕,以获得加密后的新的汇编代码:从所述解密函数列表中选择与该加密后的字符串的加密函数相对应的解密函数的汇编代码,并将其与该加密后的字符串相组合,并用所述组合替换原始汇编代码中的与该加密后的字符串相对应的原始字符串;
(B7)用所述反汇编工具将所获得的新的汇编代码重新打包以生成新的可执行代码,以便进行后续的操作。
在上面所公开的方案中,优选地,所述方法进一步包括:在需要运行所述目标应用程序时,将加密后的字符串作为与其相关联的解密函数的参数,并将该解密函数执行的结果作为原始字符串以替换所述目标应用程序源代码或汇编代码中的对应的加密后的代码,并随之实际运行所述目标应用程序。
在上面所公开的方案中,优选地,所述目标应用程序是在Android操作系统上运行的基于JAVA的应用程序。
本发明所公开的用于应用程序的信息隐藏方法具有以下优点:(1)由于应用程序代码中的所有需要保护的明文字符串均能够被加密,且仅在应用程序实际运行时才生成具有真实含义的字符串,故具有高度的安全性;(2)由于可以对需要进行保护的明文字符串进行配置,故具有高度的使用灵活性;(3)由于针对每个需要保护的明文字符串随机地选择加密函数,由此可以有效地防止单个加密函数被破解而导致全部加密字符串被解密的情况,故具有增强的安全性。
附图说明
结合附图,本发明的技术特征以及优点将会被本领域技术人员更好地理解,其中:
图1是根据本发明的实施例的用于应用程序的信息隐藏方法的关键处理的流程图。
具体实施方式
图1是根据本发明的实施例的用于应用程序的信息隐藏方法的关键处理的流程图。如图1所示,本发明所公开的用于应用程序的信息隐藏方法包括:基于配置参数对目标应用程序的源代码或汇编代码中的明文字符串进行加密处理以隐藏所述明文字符串,其中,所述配置参数包括字符串筛选规则以及加密函数列表和对应的解密函数列表。
优选地,本发明所公开的用于应用程序的信息隐藏方法进一步包括:如果所述目标应用程序是便于获取源代码的应用程序,则以如下方式隐藏所述目标应用程序中的明文字符串:(A1)获取所述目标应用程序的源代码;(A2)通过对所述源代码进行字符串扫描而获取所述源代码中的字符串;(A3)根据所述字符串筛选规则从所获取的字符串中筛选出需要加密的字符串(即可以通过配置参数而设置某些特定的字符串不进行加密隐藏处理);(A4)针对每个需要加密的字符串执行如下操作,直至所有需要加密的字符串均被加密:从所述加密函数列表中随机地选择一个加密函数,并通过所选择的加密函数加密该需要加密的字符串,以生成加密后的字符串(即针对每个需要加密的字符串,所采用的加密函数均是随机选择的);(A5)针对每个加密后的字符串执行如下操作,直至所有加密后的字符串均被处理完毕,以获得加密后的新的应用程序代码:从所述解密函数列表中选择与该加密后的字符串的加密函数相对应的解密函数的代码(例如JAVA代码),并将其与该加密后的字符串相组合,并用所述组合替换原始代码中的与该加密后的字符串相对应的原始字符串;(A6)编译所获得的新的应用程序代码以进行后续的操作。
优选地,本发明所公开的用于应用程序的信息隐藏方法进一步包括:如果所述目标应用程序是不便于获取源代码的应用程序,则以如下方式隐藏所述目标应用程序中的明文字符串:(B1)获取所述目标应用程序的可执行代码(即经过编译后的代码);(B2)通过反汇编工具将所述可执行代码转换成汇编代码(例如可运行在Android操作系统上的应用程序的smali代码,其可以通过修改、重打包后再次生成可运行在Android操作系统上的应用程序)(B3)通过对所述汇编代码进行字符串扫描而获取所述汇编代码中的字符串;(B4)根据所述字符串筛选规则从所获取的字符串中筛选出需要加密的字符串(即可以通过配置参数而设置某些特定的字符串不进行加密隐藏处理);(B5)针对每个需要加密的字符串执行如下操作,直至所有需要加密的字符串均被加密:从所述加密函数列表中随机地选择一个加密函数,并通过所选择的加密函数加密该需要加密的字符串,以生成加密后的字符串(即针对每个需要加密的字符串,所采用的加密函数均是随机选择的);(B6)针对每个加密后的字符串执行如下操作,直至所有加密后的字符串均被处理完毕,以获得加密后的新的汇编代码:从所述解密函数列表中选择与该加密后的字符串的加密函数相对应的解密函数的汇编代码(例如smali代码),并将其与该加密后的字符串相组合,并用所述组合替换原始汇编代码中的与该加密后的字符串相对应的原始字符串;(B7)用所述反汇编工具将所获得的新的汇编代码重新打包以生成新的可执行代码,以便进行后续的操作。
优选地,本发明所公开的用于应用程序的信息隐藏方法进一步包括:在需要运行所述目标应用程序时,将加密后的字符串作为与其相关联的解密函数的参数,并将该解密函数执行的结果作为原始字符串以替换所述目标应用程序源代码或汇编代码中的对应的加密后的代码,并随之实际运行所述目标应用程序。
示例性地,在本发明所公开的用于应用程序的信息隐藏方法中,所述目标应用程序是在Android操作系统上运行的基于JAVA的应用程序。
由上可见,本发明所公开的用于应用程序的信息隐藏方法具有下列优点:(1)由于应用程序代码中的所有需要保护的明文字符串均能够被加密,且仅在应用程序实际运行时才生成具有真实含义的字符串,故具有高度的安全性;(2)由于可以对需要进行保护的明文字符串进行配置,故具有高度的使用灵活性;(3)由于针对每个需要保护的明文字符串随机地选择加密函数,由此可以有效地防止单个加密函数被破解而导致全部加密字符串被解密的情况,故具有增强的安全性。
尽管本发明是通过上述的优选实施方式进行描述的,但是其实现形式并不局限于上述的实施方式。应该认识到:在不脱离本发明主旨和范围的情况下,本领域技术人员可以对本发明做出不同的变化和修改。
Claims (5)
1.一种用于应用程序的信息隐藏方法,所述用于应用程序的信息隐藏方法包括:基于配置参数对目标应用程序的源代码或汇编代码中的明文字符串进行加密处理以隐藏所述明文字符串,其中,所述配置参数包括字符串筛选规则以及加密函数列表和对应的解密函数列表,其中,针对每个需要加密的字符串,从所述加密函数列表中随机地选择一个加密函数,并通过所选择的加密函数加密该需要加密的字符串,以生成加密后的字符串。
2.根据权利要求1所述的用于应用程序的信息隐藏方法,其特征在于,所述方法进一步包括:如果所述目标应用程序是便于获取源代码的应用程序,则以如下方式隐藏所述目标应用程序中的明文字符串:
(A1)获取所述目标应用程序的源代码;
(A2)通过对所述源代码进行字符串扫描而获取所述源代码中的字符串;
(A3)根据所述字符串筛选规则从所获取的字符串中筛选出需要加密的字符串;
(A4)针对每个需要加密的字符串执行如下操作,直至所有需要加密的字符串均被加密:从所述加密函数列表中随机地选择一个加密函数,并通过所选择的加密函数加密该需要加密的字符串,以生成加密后的字符串;
(A5)针对每个加密后的字符串执行如下操作,直至所有加密后的字符串均被处理完毕,以获得加密后的新的应用程序代码:从所述解密函数列表中选择与该加密后的字符串的加密函数相对应的解密函数的代码,并将其与该加密后的字符串相组合,并用所述组合替换原始代码中的与该加密后的字符串相对应的原始字符串;
(A6)编译所获得的新的应用程序代码以进行后续的操作。
3.根据权利要求2所述的用于应用程序的信息隐藏方法,其特征在于,所述方法进一步包括:如果所述目标应用程序是不便于获取源代码的应用程序,则以如下方式隐藏所述目标应用程序中的明文字符串:
(B1)获取所述目标应用程序的可执行代码;
(B2)通过反汇编工具将所述可执行代码转换成汇编代码;
(B3)通过对所述汇编代码进行字符串扫描而获取所述汇编代码中的字符串;
(B4)根据所述字符串筛选规则从所获取的字符串中筛选出需要加密的字符串;
(B5)针对每个需要加密的字符串执行如下操作,直至所有需要加密的字符串均被加密:从所述加密函数列表中随机地选择一个加密函数,并通过所选择的加密函数加密该需要加密的字符串,以生成加密后的字符串;
(B6)针对每个加密后的字符串执行如下操作,直至所有加密后的字符串均被处理完毕,以获得加密后的新的汇编代码:从所述解密函数列表中选择与该加密后的字符串的加密函数相对应的解密函数的汇编代码,并将其与该加密后的字符串相组合,并用所述组合替换原始汇编代码中的与该加密后的字符串相对应的原始字符串;
(B7)用所述反汇编工具将所获得的新的汇编代码重新打包以生成新的可执行代码,以便进行后续的操作。
4.根据权利要求3所述的用于应用程序的信息隐藏方法,其特征在于,所述方法进一步包括:在需要运行所述目标应用程序时,将加密后的字符串作为与其相关联的解密函数的参数,并将该解密函数执行的结果作为原始字符串以替换所述目标应用程序源代码或汇编代码中的对应的加密后的代码,并随之实际运行所述目标应用程序。
5.根据权利要求4所述的用于应用程序的信息隐藏方法,其特征在于,所述目标应用程序是在Android操作系统上运行的基于JAVA的应用程序。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410120621.3A CN104951674B (zh) | 2014-03-28 | 2014-03-28 | 用于应用程序的信息隐藏方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410120621.3A CN104951674B (zh) | 2014-03-28 | 2014-03-28 | 用于应用程序的信息隐藏方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104951674A CN104951674A (zh) | 2015-09-30 |
CN104951674B true CN104951674B (zh) | 2018-01-23 |
Family
ID=54166327
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410120621.3A Active CN104951674B (zh) | 2014-03-28 | 2014-03-28 | 用于应用程序的信息隐藏方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104951674B (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106326693A (zh) * | 2016-08-18 | 2017-01-11 | 广州优视网络科技有限公司 | 应用程序的代码混淆方法及装置 |
CN108629162B (zh) * | 2017-03-23 | 2020-06-02 | 北京小唱科技有限公司 | 一种源代码防护方法及装置 |
CN107122631A (zh) * | 2017-04-26 | 2017-09-01 | 北京洋浦伟业科技发展有限公司 | 一种脚本文件的透明加密方法和装置 |
CN107194212B (zh) * | 2017-06-21 | 2020-04-17 | 株洲中车时代电气股份有限公司 | 一种显示器源代码中协议内容的保护方法 |
CN107844687B (zh) * | 2017-11-22 | 2021-06-25 | 上海勋立信息科技有限公司 | 一种安卓信息拦截方法及装置 |
CN108595921B (zh) * | 2018-03-22 | 2020-11-13 | 北京奇艺世纪科技有限公司 | 一种源代码中字符串的混淆方法和装置 |
CN111125644B (zh) * | 2018-11-01 | 2022-05-27 | 百度在线网络技术(北京)有限公司 | 应用产品的信息隐藏方法和装置 |
CN113282892A (zh) * | 2021-04-16 | 2021-08-20 | 南方电网数字电网研究院有限公司 | 代码混淆方法、装置、计算机设备和存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102346834A (zh) * | 2011-11-25 | 2012-02-08 | 武汉钢铁(集团)公司 | Java应用软件加密保护的方法 |
CN102708322A (zh) * | 2012-05-12 | 2012-10-03 | 北京深思洛克软件技术股份有限公司 | 安卓系统中java应用程序的保护方法 |
CN103530535A (zh) * | 2013-10-25 | 2014-01-22 | 苏州通付盾信息技术有限公司 | 一种Android平台应用程序保护的加脱壳方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9684710B2 (en) * | 2009-05-28 | 2017-06-20 | Microsoft Technology Licensing, Llc | Extending random number summation as an order-preserving encryption scheme |
-
2014
- 2014-03-28 CN CN201410120621.3A patent/CN104951674B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102346834A (zh) * | 2011-11-25 | 2012-02-08 | 武汉钢铁(集团)公司 | Java应用软件加密保护的方法 |
CN102708322A (zh) * | 2012-05-12 | 2012-10-03 | 北京深思洛克软件技术股份有限公司 | 安卓系统中java应用程序的保护方法 |
CN103530535A (zh) * | 2013-10-25 | 2014-01-22 | 苏州通付盾信息技术有限公司 | 一种Android平台应用程序保护的加脱壳方法 |
Non-Patent Citations (1)
Title |
---|
《基于DES算法加密的java源代码保护》;彭东海;《硅谷》;20100608;第60、80页 * |
Also Published As
Publication number | Publication date |
---|---|
CN104951674A (zh) | 2015-09-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104951674B (zh) | 用于应用程序的信息隐藏方法 | |
CN103544414B (zh) | 一种Android系统应用的深度代码混淆方法 | |
KR101597251B1 (ko) | 소프트웨어 애플리케이션들의 화이트박스 구현들을 생성하는 시스템 및 방법 | |
CN104091100A (zh) | 一种基于编译中间结果的软件保护方法 | |
CN108363911B (zh) | 一种Python脚本混淆、水印的方法及装置 | |
KR101521765B1 (ko) | 분간이 난해한 식별자 변환을 이용한 코드 난독화 장치 및 방법 | |
US10438513B2 (en) | Hardened white box implementation 1 | |
CN106599628A (zh) | 一种基于模块钩子的Python字节码文件保护方法 | |
CN104268444A (zh) | 一种云OS Java源代码保护方法 | |
US20150095656A1 (en) | Apparatus for code obfuscation and method thereof | |
CN101814124A (zh) | 一种基于Java的软件安全性加强的方法 | |
CN104462990B (zh) | 字符串加解密方法和装置 | |
CN106778100B (zh) | 基于安卓平台和ios平台的混淆编译方法及混淆编译器 | |
WO2007017856A1 (en) | Method for preventing software reverse engineering, unauthorized modification, and runtime data interception | |
CN106682460B (zh) | 一种基于两次变换的代码混淆方法 | |
CN106548046B (zh) | 一种保护代码的装置和方法 | |
CN107808101B (zh) | 一种通过加密Python明文源码token的知识产权保护系统 | |
CN107016265A (zh) | 一种基于加密与控制流混淆的代码安全防护能力测评方法 | |
CN110147656A (zh) | 一种Node.js的代码加密及底层运行时解密办法 | |
CN105574371B (zh) | 基于文本水印的安卓应用程序信息隐藏与软件保护方法 | |
CN108829396A (zh) | 脚本编译的方法、脚本执行的方法、相关装置及系统 | |
CN109543368B (zh) | 一种基于中间语言解释器的跨平台源码虚拟化保护方法 | |
CN106971111A (zh) | 数据加密方法、终端及服务器 | |
CN106055937B (zh) | 一种软件静态数据的加密方法及系统 | |
CN106650339B (zh) | 一种基于控制流复杂化的Java代码混淆方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |