应用程序的代码混淆方法及装置与流程

文档序号:12600195阅读:213来源:国知局
本发明涉及代码加密
技术领域
:,具体而言,本发明涉及一种应用程序的代码混淆方法,及一种应用程序的代码混淆装置。
背景技术
::随着软件相关技术的飞速发展,人们的生活和工作对应用程序的依赖度也随之提高,其安全意识也逐渐增强。一方面,应用程序在发布后,容易被反编译而暴露其源代码,导致该应用程序的相关核心技术被窃取,给开发者造成巨大的经济损失,同时,也存在被破解后被植入恶意代码的风险,使得用户的个人隐私的安全性受到威胁;另一方面,各大应用程序的下载平台,由于不同产商在同类型应用产品中存在竞争,导致其它同类型应用程序在下载平台提交下载包的审核时,下载平台对该应用程序的下载包使用静态扫描等技术获取应用程序内部的相关信息,一旦确认该应用程序与下载平台中已存在的其它同类型应用程序存在竞争关系时,下载平台将拒绝该应用程序提交的审核,用户将无法在该下载平台上下载该应用程序。现有技术的应用程序代码的安全处理方式一般采用对应用程序代码编译后的机器码进行加密操作,或是通过执行脚本进行加密处理操作,经过上述处理后的应用程序,很容易被逆向工程破解,通过利用反编译器得到相应的高级语言表达形式,从而获取具有很强可读性的源代码。技术实现要素:为克服上述技术问题或者至少部分地解决上述技术问题,特提出以下技术方案:本发明的实施例提出了一种应用程序的代码混淆方法,包括:基于预定的字符串类型来确定应用程序代码中需混淆加密的字符串;通过预定的混淆加密方式对已确定需混淆加密的字符串执行相应的混淆加密操作,并对混淆加密后的应用程序代码执行编译操作;当运行应用程序,确定待执行的混淆加密后的字符串;通过与待执行的混淆加密后的字符串相应的解密方式对其进行解密操作,以执行相应的应用程序代码。优选地,基于预定的字符串类型来确定应用程序代码中需混淆加密的字符串的步骤,包括:遍历应用程序代码中的字符串以确定各字符串的类型;将与预定的字符串类型相匹配的字符串确定为需混淆加密的字符串。可选地,该方法还包括:根据预定混淆加密级别的确定规则,确定应用程序代码中需混淆加密的字符串的混淆加密级别;确定与需混淆加密的字符串的混淆加密级别对应的混淆加密方式;其中,通过预定的混淆加密方式对已确定需混淆加密的字符串执行相应的混淆加密操作的步骤,包括:通过与混淆加密级别对应的混淆加密方式对已确定需混淆加密的字符串执行相应的混淆加密操作。优选地,通过预定的混淆加密方式对已确定需混淆加密的字符串执行相应的混淆加密操作的步骤之后,还包括:利用混淆加密后的字符串通过宏方法替换需混淆加密的字符串,以确定混淆加密后的应用程序代码。优选地,通过与待执行的混淆加密后的字符串相应的解密方式对其进行解密操作的步骤,包括:当运行所述应用程序,确定待执行的混淆加密后的字符串的混淆加密方式;通过已确定的解密方式对待执行的混淆加密后的字符串进行解密操作。可选地,该方法还包括:应用程序代码编译完成后,获取应用程序代码中已执行混淆加密操作的各字符串;确定已执行混淆加密操作的各字符串的混淆加密方式及相应的解密方式;通过相应的解密方式对已执行混淆加密操作的各字符串执行相应的解密操作。优选地,预定的字符串类型包括以下至少一项:应用程序代码中直接使用的字符串;应用程序中定义的宏字符串;应用程序中程序块外部定义的字符串;国际化本地文件中存储的字符串。本发明的另一实施例提出了一种应用程序的代码混淆装置,包括:第一确定模块,用于基于预定的字符串类型来确定应用程序代码中需混淆加密的字符串;加密及编译模块,用于通过预定的混淆加密方式对已确定需混淆加密的字符串执行相应的混淆加密操作,并对混淆加密后的应用程序代码执行编译操作;第二确定模块,用于当运行应用程序,确定待执行的混淆加密后的字符串;第一解密模块,用于通过与待执行的混淆加密后的字符串相应的解密方式对其进行解密操作,以执行相应的应用程序代码。优选地,第一确定模块,包括:遍历单元,用于遍历应用程序代码中的字符串以确定各字符串的类型;第一确定单元,用于将与预定的字符串类型相匹配的字符串确定为需混淆加密的字符串。可选地,该装置还包括:第三确定模块,用于根据预定混淆加密级别的确定规则,确定应用程序代码中需混淆加密的字符串的混淆加密级别;第四确定模块,用于确定与需混淆加密的字符串的混淆加密级别对应的混淆加密方式;其中,加密及编译模块用于通过与混淆加密级别对应的混淆加密方式对已确定需混淆加密的字符串执行相应的混淆加密操作。可选地,该装置还包括:替换模块,用于利用混淆加密后的字符串通过宏方法替换需混淆加密的字符串,以确定混淆加密后的应用程序代码。优选地,第一解密模块,包括:第二确定单元,用于当运行应用程序,确定待执行的混淆加密后的字符串的混淆加密方式;解密单元,用于通过已确定的解密方式对待执行的混淆加密后的字符串进行解密操作。可选地,该装置还包括:获取模块,用于应用程序代码编译完成后,获取应用程序代码中已执行混淆加密操作的各字符串;第五确定模块,用于确定已执行混淆加密操作的各字符串的混淆加密方式及相应的解密方式;第二解密模块,用于通过相应的解密方式对已执行混淆加密操作的各字符串执行相应的解密操作。优选地,预定的字符串类型包括以下至少一项:应用程序代码中直接使用的字符串;应用程序中定义的宏字符串;应用程序中程序块外部定义的字符串;国际化本地文件中存储的字符串。本发明的实施例中,基于预定的字符串类型来确定应用程序代码中需混淆加密的字符串,可精确快速地判断应用程序代码中的字符串是否需要进行混淆加密,且实现了对不同类型的字符串进行混淆加密;通过预定的混淆加密方式对已确定需混淆加密的字符串执行相应的混淆加密操作,并对混淆加密后的应用程序代码执行编译操作,实现了在不修改应用程序原有的代码的基础上对各字符串采用预定的混淆加密方式进行混淆加密操作,保证了应用程序的相关代码混淆加密处理的效率;当运行应用程序,确定待执行的混淆加密后的字符串,通过与待执行的混淆加密后的字符串相应的解密方式对其进行解密操作,以保证后续执行相应应用程序代码,实现了高效精确地对待执行的混淆加密后的字符串进行解密,保证了应用程序的正常运行。进一步地,由于不修改应用程序原有的代码,减少了开发人员对应用程序代码的处理步骤,从而提高了开发效率。本发明附加的方面和优点将在下面的描述中部分给出,这些将从下面的描述中变得明显,或通过本发明的实践了解到。附图说明本发明上述的和/或附加的方面和优点从下面结合附图对实施例的描述中将变得明显和容易理解,其中:图1为本发明中一个实施例的应用程序的代码混淆方法的流程图;图2为本发明中一个优选实施例的应用程序的代码混淆方法的流程图;图3为本发明中另一实施例的应用程序的代码混淆装置的结构示意图;图4为本发明中另一优选实施例的应用程序的代码混淆装置的结构示意图。具体实施方式下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本发明,而不能解释为对本发明的限制。本
技术领域
:技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本发明的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。应该理解,当我们称元件被“连接”或“耦接”到另一元件时,它可以直接连接或耦接到其他元件,或者也可以存在中间元件。此外,这里使用的“连接”或“耦接”可以包括无线连接或无线耦接。这里使用的措辞“和/或”包括一个或更多个相关联的列出项的全部或任一单元和全部组合。本
技术领域
:技术人员可以理解,除非另外定义,这里使用的所有术语(包括技术术语和科学术语),具有与本发明所属领域中的普通技术人员的一般理解相同的意义。还应该理解的是,诸如通用字典中定义的那些术语,应该被理解为具有与现有技术的上下文中的意义一致的意义,并且除非像这里一样被特定定义,否则不会用理想化或过于正式的含义来解释。下面结合附图详细说明本发明的技术方案。图1为本发明中一个实施例的应用程序的代码混淆方法的流程图。步骤S110:基于预定的字符串类型来确定应用程序代码中需混淆加密的字符串。具体地,在应用程序代码中将字符串类型属于预定的字符串类型的字符串确定为需混淆加密的字符串。其中,预定的字符串类型包括但不限于:应用程序代码中直接使用的字符串;应用程序中定义的宏字符串;应用程序中程序块外部定义的字符串;国际化本地文件中存储的字符串。实际应用中,开发人员在开发工具提供的人机交互界面中点击针对应用程序的代码编译按钮时,在对应用程序代码执行编译前,首先在应用程序代码中将字符串类型属于预定的字符串类型的字符串确定为需混淆加密的字符串,如应用程序代码中字符串“ABC”的类型为宏定义的字符串,可确定字符串“ABC”为需混淆加密的字符串。在一优选实施例中,步骤S110具体包括步骤S111和步骤S112;步骤S111:遍历应用程序代码中的字符串以确定各字符串的类型;步骤S112:将与预定的字符串类型相匹配的字符串确定为需混淆加密的字符串。在一个具体应用场景中,预定的字符串类型包括应用程序代码中直接使用的字符串和应用程序中定义的宏字符串。开发人员在开发工具提供的人机交互界面中点击应用程序App1的代码编译按钮时,在执行编译操作前,首先遍历应用程序App1代码中的各字符串,如包括“ABC”、“style”和“school”,随后确定字符串“ABC”的类型为宏定义的字符串、字符串“style”的类型为应用程序代码中直接使用的字符串以及字符串“school”的类型为应用程序代码中类声明中的类名,随后将字符串的类型属于预定的字符串类型的字符串“ABC”和“style”确定为需混淆加密的字符串。步骤S120:通过预定的混淆加密方式对已确定需混淆加密的字符串执行相应的混淆加密操作,并对混淆加密后的应用程序代码执行编译操作。实际应用中,通过与已确定需混淆加密的字符串相匹配的预定的混淆加密方式,对已确定需混淆加密的字符串执行相应的混淆加密操作,并对混淆加密后的应用程序代码执行编译操作。在一个具体应用场景中,已确定应用程序App1的代码中需混淆加密的字符串包括宏定义的字符串“ABC”和应用程序代码中直接使用的字符串“style”,随后根据与字符串“ABC”相匹配的预定的混淆加密方式Base64算法编码混淆加密,对字符串“ABC”执行Base64算法编码混淆加密操作,根据与字符串“style”相匹配的预定的混淆加密方式自定义混淆加密,对字符串“style”执行自定义混淆加密操作;随后,对混淆加密后的App1的代码执行编译操作,以完成App1代码的编译。在另一具体应用场景中,App1在代码编译时对需混淆加密的字符串进行混淆加密方式包括至少两种:一种为自定义的混淆加密方式,如首先将需混淆加密的字符串转换成字节,随后对转换成字节的值进行异或运算,最后将异或运算后的值进行Base64算法编码混淆加密;另一种为Base64算法编码混淆加密,在对需混淆加密的字符串混淆加密成功后,添加预定混淆加密方式的标识信息,如自定义的混淆加密方式的标识信息为“S01”,Base64算法编码混淆加密方式的标识信息为“S02”,如在对字符串“ABC”进行Base64算法编码混淆加密后得到字符串如“QUJD”,随后在字符串内容的头部添加Base64算法编码混淆加密方式的标识信息“S02”,再在预定混淆加密方式的标识信息后添加预定分隔符“-”,得到字符串“ABC”经过Base64算法编码混淆加密后的字符串为“S02-QUJD”,同理可得到字符串“style”经过自定义混淆加密后的字符串为“S01-QW345”。在一优选实施例中,步骤S120中通过预定的混淆加密方式对已确定需混淆加密的字符串执行相应的混淆加密操作之后,该方法还包括步骤S150;步骤S150:利用混淆加密后的字符串通过宏方法替换需混淆加密的字符串,以确定混淆加密后的应用程序代码。接上例,在对字符串“ABC”执行Base64算法编码混淆加密操作后,得到混淆加密后的字符串如“S02-QUJD”,随后通过宏方法将应用程序代码中的字符串“ABC”替换为“S02-QUJD”,以及在对字符串“style”执行自定义混淆加密操作后,得到混淆加密后的字符串如“S01-QW345”,随后通过宏方法将应用程序代码中的字符串“style”替换为“S01-QW345”,以确定混淆加密后的应用程序代码。在本优选实施例中,使用宏方法对常量字符串等定义方式进行替换,可快速完成将应用程序代码中混淆加密前的字符串替换为混淆加密后的字符串,同时,在应用程序代码运行中可动态地使用替换后的宏方法,解决了现有技术中定义的静态的常量字符串无法动态使用的问题,从而达到了全面替换应用程序代码中的各类型字符串,并通过宏方法在应用程序代码运行中动态使用的目的。在一优选实施例中,该方法还包括步骤S160和步骤S170;步骤S160:根据预定混淆加密级别的确定规则,确定应用程序代码中需混淆加密的字符串的混淆加密级别;步骤S170:确定与需混淆加密的字符串的混淆加密级别对应的混淆加密方式。本实施例中,通过预定的混淆加密方式对已确定需混淆加密的字符串执行相应的混淆加密操作的步骤具体包括:通过与混淆加密级别对应的混淆加密方式对已确定需混淆加密的字符串执行相应的混淆加密操作。在一个具体应用场景中,预定混淆加密级别的确定规则包括:预定字符串类型为宏定义的字符串的混淆加密级别为1级,对应的混淆加密方式为自定义混淆加密方式;预定字符串类型为非宏定义的字符串的混淆加密级别为2级,对应的混淆加密方式为Base64算法编码混淆加密;其中,淆加密级别为由低到高依次为2级和1级;自定义加密方式为首先将需混淆加密的字符串转换成字节,随后对转换成字节的值进行异或运算,最后将进行异或运算后的值进行Base64算法编码混淆加密。已确定需混淆加密的字符串为“ABC”和“style”,根据字符串“ABC”的类型为应用程序代码中直接使用的字符串,可确定字符串“ABC”的混淆加密级别为2级;根据字符串“style”的类型为宏定义的字符串,可确定字符串“style”的混淆加密级别为1级,随后通过与字符串“ABC”的混淆加密级别2级对应的Base64算法编码混淆加密方式对字符串“ABC”执行相应的混淆加密操作,通过与字符串“style”的混淆加密级别1级对应的自定义混淆加密方式对字符串“style”执行相应的混淆加密操作。步骤S130:当运行应用程序,确定待执行的混淆加密后的字符串。需要说明的是,在步骤S120中完成应用程序代码的编译操作后,会生成相应的应用程序安装包;终端设备获取到该应用程序安装包并运行该应用程序安装包以完成该应用程序的安装;应用程序安装完成后,当运行应用程序,执行步骤S130。例如,在APP1代码的编译时,在对需混淆加密的字符串混淆加密时,在混淆加密后的字符串的头部添加混淆加密的标识信息“Y”以标识该字符串为混淆加密的字符串,随后再在加密字符串的标识信息后添加预定分隔符“-”,得到混淆加密后的字符串为“Y-QUJD”。在一个具体应用场景中,在终端设备A中,首先获取应用程序App1的安装包,安装完成该App1的安装包,在App1的运行过程中,首先确定App1运行中待执行的字符串是否为混淆加密后的字符串,如App1运行中待执行的字符串为“Y-QUJD”,可确定字符串“Y-QUJD”中包含了混淆加密的标识信息“Y”以及预定分隔符“-”,可确定待执行的字符串“Y-QUJD”为混淆加密后的字符串。步骤S140:通过与待执行的混淆加密后的字符串相应的解密方式对其进行解密操作,以执行相应的应用程序代码。具体地,确定与待执行的混淆加密后的字符串相应的解密方式,根据该解密方式对待执行的混淆加密后的字符串进行解密操作,以执行相应的应用程序代码。例如,在App1的运行过程中,对于待执行的字符串“S02-QUJD”,确定该字符串预定分隔符前的加密方式的标识信息“S02”,可确定字符串“S02-QUJD”为通过Base64算法编码混淆加密方式混淆加密得到的,因此可确定字符串“S02-QUJD”相应的解密方式为基于Base64算法编码的宏方法解密方式,提取字符串“S02-QUJD”中的混淆加密内容得到字符串“QUJD”,随后通过相应的解密方式为基于Base64算法编码的宏方法解密方式对字符串“QUJD”进行解密,得到字符串“QUJD”解密后对应的字符串为“ABC”,随后在App1的运行中将字符串“S02-QUJD”替代为字符串“ABC”,以执行App1的相应代码;同理,对于待执行的字符串“S01-QW345”,确定该字符串相应的解密方式为基于自定义的宏方法的解密方式,提取字符串“S01-QW345”中的混淆加密内容得到“QW345”,随后通过基于自定义的宏方法的解密方式首先对字符串“QW345”进行Base64算法编码解密,再将Base64算法编码解密后的值进行异或运算对应的逆运算,最后将异或运算对应的逆运算得到的值进行转换字节对应的逆转换,最终得到字符串“QW345”解密后对应的字符串为“style”,随后在App1的运行中将字符串“S01-QW345”替代为字符串“style”以执行相应的应用程序代码。本发明的实施例中,基于预定的字符串类型来确定应用程序代码中需混淆加密的字符串,可精确快速地判断应用程序代码中的字符串是否需要进行混淆加密,且实现了对不同类型的字符串进行混淆加密;通过预定的混淆加密方式对已确定需混淆加密的字符串执行相应的混淆加密操作,并对混淆加密后的应用程序代码执行编译操作,实现了在不修改应用程序原有的代码的基础上对各字符串采用预定的混淆加密方式进行混淆加密操作,保证了应用程序的相关代码混淆加密处理的效率;当运行应用程序,确定待执行的混淆加密后的字符串,通过与待执行的混淆加密后的字符串相应的解密方式对其进行解密操作,以保证后续执行相应应用程序代码,实现了高效精确地对待执行的混淆加密后的字符串进行解密,保证了应用程序的正常运行。进一步地,由于不修改应用程序原有的代码,减少了开发人员对应用程序代码的处理步骤,从而提高了开发效率。在一优选实施例中,如图2所示,该方法包括步骤S210、步骤S220、步骤S230、步骤S240、步骤S250、步骤S260和步骤S270;步骤S210:基于预定的字符串类型来确定应用程序代码中需混淆加密的字符串;步骤S220:通过预定的混淆加密方式对已确定需混淆加密的字符串执行相应的混淆加密操作,并对混淆加密后的应用程序代码执行编译操作;步骤S230:当运行应用程序,确定待执行的混淆加密后的字符串;步骤S240:通过与待执行的混淆加密后的字符串相应的解密方式对其进行解密操作,以执行相应的应用程序代码;步骤S250:应用程序代码编译完成后,获取应用程序代码中已执行混淆加密操作的各字符串;步骤S260:确定已执行混淆加密操作的各字符串的混淆加密方式及相应的解密方式;步骤S270:通过相应的解密方式对已执行混淆加密操作的各字符串执行相应的解密操作。其中,本优选实施例中移动终端在步骤S210、步骤S220、步骤S230和步骤S240中执行的操作与图1所示的移动终端在步骤S110、步骤S120、步骤S130和步骤S140中执行的操作相同或相似,在此不再赘述。在一个具体应用场景中,开发人员在开发工具中点击编译按钮后,确定应用程序App1的代码中需混淆加密的字符串包括“ABC”和“style”;通过与字符串“ABC”的混淆加密级别2级对应的Base64算法编码混淆加密对字符串“ABC”执行相应的混淆加密操作,并添加预定混淆加密方式的标识信息以及预定分隔符后得到混淆加密后的字符串“S02-QUJD”;通过与字符串“style”的混淆加密级别1级对应的自定义混淆加密方式对字符串“style”执行相应的混淆加密操作,并添加预定混淆加密方式的标识信息以及预定分隔符后得到混淆加密后的字符串“S01-QW345”;在App1的代码编译完成后,此时App1的代码中相应的字符串以加密后的形式显示,由于对于开发人员而言,增加了代码阅读的难度性,同时也不利于后续对App1的开发,因此需要对App1的代码编译完成后将混淆加密的字符串还原为未经混淆加密的原字符串,可根据预定混淆加密方式的标识信息“S02”可确定已执行混淆加密操作的字符串“S02-QUJD”的混淆加密方式为Base64算法编码混淆加密方式,因此可确定其相应的解密方式为基于Base64算法编码的宏方法解密方式,提取字符串“S02-QUJD”中的混淆加密内容得到字符串“QUJD”;根据标识信息“S01”确定已执行混淆加密操作的字符串“S01-QW345”的混淆加密方式为自定义混淆加密方式,因此可确定其相应的解密方式为基于自定义的宏方法解密方式,提取字符串“S01-QW345”中的混淆加密内容得到字符串“QW345”;随后通过基于Base64算法编码的宏方法解密方式对App1代码中的字符串“QUJD”执行相应的解密操作,通过基于自定义的宏方法解密方式对App1代码中的字符串“QW345”执行相应的解密操作。又例如,开发人员在开发工具的人机交互界面中点击编译按钮后,确定应用程序App1的代码中需混淆加密的字符串包括“ABC”和“style”;通过与字符串“ABC”的混淆加密级别2级对应的Base64算法编码混淆加密对字符串“ABC”执行相应的混淆加密操作,通过与字符串“style”的混淆加密级别1级对应的自定义混淆加密方式对字符串“style”执行相应的混淆加密操作,在对各字符串将执行加密操作后,由于对于开发人员而言,代码信息是透明性的,可将已执行混淆加密操作的各字符串及各自对应的混淆加密方式存储至已执行混淆加密操作字符串的记录表table中;其中,该表可存储于开发人员自定义的位置,可以数据表形式存储于预定的数据库中,也可以脚本文件的形式存储于指定位置,在对App1的代码执行编译操作时并不对table表进行相应的编译,使得该表只供开发人员在开发过程中使用;具体地,记录表table中存储有字符串“ABC”已执行Base64算法编码混淆加密操作后的值如“QUJD”,以及与字符串“ABC”对应的混淆加密方式为Base64算法编码混淆加密方式;并存储有字符串“style”已执行自定义混淆加密操作后的值如“QW345”,以及与字符串“style”对应的混淆加密方式为自定义混淆加密方式。随后,App1代码编译完成后,通过读取App1的table表中的记录信息可确定App1代码中已执行混淆加密操作的各字符串为“QUJD”和“QW345”,并根据table表中记录的字符串“QW345”的混淆加密方式为自定义混淆加密方式可确定其解密方式为基于自定义的宏方法的解密方式,根据table表中记录的字符串“QUJD”的混淆加密方式Base64算法编码混淆加密可确定其解密方式为基于Base64算法编码的宏方法解密方式;随后通过基于自定义的宏方法的解密方式对App1代码中的字符串“QW345”执行相应的解密操作,通过基于Base64算法编码的宏方法解密方式对App1代码中的字符串“QUJD”执行相应的解密操作。通过本实施例,还可对应用程序代码中已执行混淆加密后的字符串进行解密,最终将应用程序代码中的字符串还原为未经混淆加密的原字符串,实现了代码对开发人员的透明性,使得开发人员无需在对应用程序代码编译之前对代码进行备份等操作,从而提高了开发人员的开发效率,同时,避免了因备份应用程序代码等操作而产生的代码丢失或代码发生错误等不可预期的情况发生,进一步的,降低了开发的成本。在一具体应用场景中,预定的字符串类型包括国际化本地文件中存取的字符串和应用程序中定义的宏字符串。开发人员在开发工具提供的人机交互界面中点击应用程序App1的代码编译按钮时,在执行编译操作前,首先遍历应用程序App1代码中的各字符串,如包括“ABC-DEF”、“style”和“school”,随后确定字符串“ABC-DEF”的类型为宏定义的字符串、字符串“style”的类型为国际化本地文件中存取的字符串以及字符串“school”的类型为应用程序代码中类声明中的类名,并将字符串的类型属于预定的字符串类型的字符串“ABC-DEF”和“style”确定为需混淆加密的字符串;随后,对字符串“ABC-DEF”进行Base64算法编码混淆加密,对字符串“style”进行自定义混淆加密;由于字符串“ABC-DEF”的数据结构类型为Key-Value,Key部分的值为“ABC”,Value部分的值为“DEF”,因此需要对字符串“ABC-DEF”中Key部分和Value部分均进行混淆加密,得到字符串“ABC-DEF”经过Base64算法编码混淆加密后的字符串如“S02-QUJD-REVG”,同理可得到字符串“style”经过自定义混淆加密后的字符串如“S01-QW345”;接着,通过预定宏方法A将应用程序代码中的字符串“ABC-DEF”替换为“S02-QUJD-REVG”,以及通过预定宏方法B将应用程序代码中的字符串“style”替换为“S01-QW345”,并将预定宏方法A和预定宏方法B存储至相应的文件File中;由于“style”的类型为国际化本地文件中存取的字符串,因此还需要在应用程序代码中调用的国际化本地文件中,通过预定宏方法B将应用程序代码中的字符串“style”替换为“S01-QW345”,随后完成对应用程序App1的编译。在终端设备中,首先获取应用程序App1的安装包,安装完成该App1的安装包,在App1的运行过程中,若待执行的字符串为“S02-QUJD-REVG”,可确定字符串“S02-QUJD-REVG”为混淆加密后的字符串,随后通过文件File中与预定宏方法A对应的解密宏红方法并采用Base64算法编码进行解密,得到字符串“S02-QUJD-REVG”解密后对应的字符串为“ABC-DEF”,随后在App1的运行中将字符串“S02-QUJD-REVG”替代为字符串“ABC-DEF”以执行相应的应用程序代码;若待执行的字符串为“S01-QW345”,可确定字符串“S01-QW345”为混淆加密后的字符串,随后通过文件File中与预定宏方法B对应的解密宏方法采用自定义解密方式进行解密,得到字符串“S01-QW345”解密后对应的字符串为“style”,随后在App1的运行中将字符串“S01-QW345”替代为字符串“style”,由于字符串“style”的类型为国际化本地文件中存取的字符串,因此还需要在应用程序代码中调用的国际化本地文件中,将字符串“S01-QW345”替代为字符串“style”,以执行相应的应用程序代码。图3为本发明中另一实施例的应用程序的代码混淆装置的结构示意图。第一确定模块310基于预定的字符串类型来确定应用程序代码中需混淆加密的字符串。具体地,在应用程序代码中将字符串类型属于预定的字符串类型的字符串确定为需混淆加密的字符串。其中,预定的字符串类型包括但不限于:应用程序代码中直接使用的字符串;应用程序中定义的宏字符串;应用程序中程序块外部定义的字符串;国际化本地文件中存储的字符串。实际应用中,开发人员在开发工具提供的人机交互界面中点击针对应用程序的代码编译按钮时,在对应用程序代码执行编译前,首先在应用程序代码中将字符串类型属于预定的字符串类型的字符串确定为需混淆加密的字符串,如应用程序代码中字符串“ABC”的类型为宏定义的字符串,可确定字符串“ABC”为需混淆加密的字符串。在一优选实施例中,第一确定模块310具体包括遍历单元和第一确定单元;遍历单元遍历应用程序代码中的字符串以确定各字符串的类型;第一确定单元将与预定的字符串类型相匹配的字符串确定为需混淆加密的字符串。在一个具体应用场景中,预定的字符串类型包括应用程序代码中直接使用的字符串和应用程序中定义的宏字符串。开发人员在开发工具提供的人机交互界面中点击应用程序App1的代码编译按钮时,在执行编译操作前,首先遍历应用程序App1代码中的各字符串,如包括“ABC”、“style”和“school”,随后确定字符串“ABC”的类型为宏定义的字符串、字符串“style”的类型为应用程序代码中直接使用的字符串以及字符串“school”的类型为应用程序代码中类声明中的类名,随后将字符串的类型属于预定的字符串类型的字符串“ABC”和“style”确定为需混淆加密的字符串。加密及编译模块320通过预定的混淆加密方式对已确定需混淆加密的字符串执行相应的混淆加密操作,并对混淆加密后的应用程序代码执行编译操作。实际应用中,通过与已确定需混淆加密的字符串相匹配的预定的混淆加密方式,对已确定需混淆加密的字符串执行相应的混淆加密操作,并对混淆加密后的应用程序代码执行编译操作。在一个具体应用场景中,已确定应用程序App1的代码中需混淆加密的字符串包括宏定义的字符串“ABC”和应用程序代码中直接使用的字符串“style”,随后根据与字符串“ABC”相匹配的预定的混淆加密方式Base64算法编码混淆加密,对字符串“ABC”执行Base64算法编码混淆加密操作,根据与字符串“style”相匹配的预定的混淆加密方式自定义混淆加密,对字符串“style”执行自定义混淆加密操作;随后,对混淆加密后的App1的代码执行编译操作,以完成App1代码的编译。在另一具体应用场景中,App1在代码编译时对需混淆加密的字符串进行混淆加密方式包括至少两种:一种为自定义的混淆加密方式,如首先将需混淆加密的字符串转换成字节,随后对转换成字节的值进行异或运算,最后将异或运算后的值进行Base64算法编码混淆加密;另一种为Base64算法编码混淆加密,在对需混淆加密的字符串混淆加密成功后,添加预定混淆加密方式的标识信息,如自定义的混淆加密方式的标识信息为“S01”,Base64算法编码混淆加密方式的标识信息为“S02”,如在对字符串“ABC”进行Base64算法编码混淆加密后得到字符串如“QUJD”,随后在字符串内容的头部添加Base64算法编码混淆加密方式的标识信息“S02”,再在预定混淆加密方式的标识信息后添加预定分隔符“-”,得到字符串“ABC”经过Base64算法编码混淆加密后的字符串为“S02-QUJD”,同理可得到字符串“style”经过自定义混淆加密后的字符串为“S01-QW345”。在一优选实施例中,加密及编译模块320中通过预定的混淆加密方式对已确定需混淆加密的字符串执行相应的混淆加密操作之后,该装置还包括替换模块;替换模块利用混淆加密后的字符串通过宏方法替换需混淆加密的字符串,以确定混淆加密后的应用程序代码。接上例,在对字符串“ABC”执行Base64算法编码混淆加密操作后,得到混淆加密后的字符串如“S02-QUJD”,随后通过宏方法将应用程序代码中的字符串“ABC”替换为“S02-QUJD”,以及在对字符串“style”执行自定义混淆加密操作后,得到混淆加密后的字符串如“S01-QW345”,随后通过宏方法将应用程序代码中的字符串“style”替换为“S01-QW345”,以确定混淆加密后的应用程序代码。在本优选实施例中,使用宏方法对常量字符串等定义方式进行替换,可快速完成将应用程序代码中混淆加密前的字符串替换为混淆加密后的字符串,同时,在应用程序代码运行中可动态地使用替换后的宏方法,解决了现有技术中定义的静态的常量字符串无法动态使用的问题,从而达到了全面替换应用程序代码中的各类型字符串,并通过宏方法在应用程序代码运行中动态使用的目的。在一优选实施例中,该装置还包括第三确定模块和第四确定模块;第三确定模块根据预定混淆加密级别的确定规则,确定应用程序代码中需混淆加密的字符串的混淆加密级别;第四确定模块确定与需混淆加密的字符串的混淆加密级别对应的混淆加密方式。本实施例中,加密及编译模块320具体用于通过与混淆加密级别对应的混淆加密方式对已确定需混淆加密的字符串执行相应的混淆加密操作。在一个具体应用场景中,预定混淆加密级别的确定规则包括:预定字符串类型为宏定义的字符串的混淆加密级别为1级,对应的混淆加密方式为自定义混淆加密方式;预定字符串类型为非宏定义的字符串的混淆加密级别为2级,对应的混淆加密方式为Base64算法编码混淆加密;其中,淆加密级别为由低到高依次为2级和1级;自定义加密方式为首先将需混淆加密的字符串转换成字节,随后对转换成字节的值进行异或运算,最后将进行异或运算后的值进行Base64算法编码混淆加密。已确定需混淆加密的字符串为“ABC”和“style”,根据字符串“ABC”的类型为应用程序代码中直接使用的字符串,可确定字符串“ABC”的混淆加密级别为2级;根据字符串“style”的类型为宏定义的字符串,可确定字符串“style”的混淆加密级别为1级,随后通过与字符串“ABC”的混淆加密级别2级对应的Base64算法编码混淆加密方式对字符串“ABC”执行相应的混淆加密操作,通过与字符串“style”的混淆加密级别1级对应的自定义混淆加密方式对字符串“style”执行相应的混淆加密操作。第二确定模块330当运行应用程序,确定待执行的混淆加密后的字符串。需要说明的是,在加密及编译模块320中完成应用程序代码的编译操作后,会生成相应的应用程序安装包;终端设备获取到该应用程序安装包并运行该应用程序安装包以完成该应用程序的安装;应用程序安装完成后,当运行应用程序,执行第二确定模块330。例如,在APP1代码的编译时,在对需混淆加密的字符串混淆加密时,在混淆加密后的字符串的头部添加混淆加密的标识信息“Y”以标识该字符串为混淆加密的字符串,随后再在加密字符串的标识信息后添加预定分隔符“-”,得到混淆加密后的字符串为“Y-QUJD”。在一个具体应用场景中,在终端设备A中,首先获取应用程序App1的安装包,安装完成该App1的安装包,在App1的运行过程中,首先确定App1运行中待执行的字符串是否为混淆加密后的字符串,如App1运行中待执行的字符串为“Y-QUJD”,可确定字符串“Y-QUJD”中包含了混淆加密的标识信息“Y”以及预定分隔符“-”,可确定待执行的字符串“Y-QUJD”为混淆加密后的字符串。第二确定模块340通过与待执行的混淆加密后的字符串相应的解密方式对其进行解密操作,以执行相应的应用程序代码。具体地,确定与待执行的混淆加密后的字符串相应的解密方式,根据该解密方式对待执行的混淆加密后的字符串进行解密操作,以执行相应的应用程序代码。例如,在App1的运行过程中,对于待执行的字符串“S02-QUJD”,确定该字符串预定分隔符前的加密方式的标识信息“S02”,可确定字符串“S02-QUJD”为通过Base64算法编码混淆加密方式混淆加密得到的,因此可确定字符串“S02-QUJD”相应的解密方式为基于Base64算法编码的宏方法解密方式,提取字符串“S02-QUJD”中的混淆加密内容得到字符串“QUJD”,随后通过相应的解密方式为基于Base64算法编码的宏方法解密方式对字符串“QUJD”进行解密,得到字符串“QUJD”解密后对应的字符串为“ABC”,随后在App1的运行中将字符串“S02-QUJD”替代为字符串“ABC”,以执行App1的相应代码;同理,对于待执行的字符串“S01-QW345”,确定该字符串相应的解密方式为基于自定义的宏方法的解密方式,提取字符串“S01-QW345”中的混淆加密内容得到“QW345”,随后通过基于自定义的宏方法的解密方式首先对字符串“QW345”进行Base64算法编码解密,再将Base64算法编码解密后的值进行异或运算对应的逆运算,最后将异或运算对应的逆运算得到的值进行转换字节对应的逆转换,最终得到字符串“QW345”解密后对应的字符串为“style”,随后在App1的运行中将字符串“S01-QW345”替代为字符串“style”以执行相应的应用程序代码。本发明的实施例中,基于预定的字符串类型来确定应用程序代码中需混淆加密的字符串,可精确快速地判断应用程序代码中的字符串是否需要进行混淆加密,且实现了对不同类型的字符串进行混淆加密;通过预定的混淆加密方式对已确定需混淆加密的字符串执行相应的混淆加密操作,并对混淆加密后的应用程序代码执行编译操作,实现了在不修改应用程序原有的代码的基础上对各字符串采用预定的混淆加密方式进行混淆加密操作,保证了应用程序的相关代码混淆加密处理的效率;当运行应用程序,确定待执行的混淆加密后的字符串,通过与待执行的混淆加密后的字符串相应的解密方式对其进行解密操作,以保证后续执行相应应用程序代码,实现了高效精确地对待执行的混淆加密后的字符串进行解密,保证了应用程序的正常运行。进一步地,由于不修改应用程序原有的代码,减少了开发人员对应用程序代码的处理步骤,从而提高了开发效率。在一优选实施例中,如图4所示,该装置包括第一确定模块410、加密及编译模块420、第二确定模块430、第一解密模块440、获取模块450、第五确定模块460和第二解密模块470;第一确定模块410基于预定的字符串类型来确定应用程序代码中需混淆加密的字符串;加密及编译模块420通过预定的混淆加密方式对已确定需混淆加密的字符串执行相应的混淆加密操作,并对混淆加密后的应用程序代码执行编译操作;第二确定模块430当运行应用程序,确定待执行的混淆加密后的字符串;第一解密模块440通过与待执行的混淆加密后的字符串相应的解密方式对其进行解密操作,以执行相应的应用程序代码;获取模块450应用程序代码编译完成后,获取应用程序代码中已执行混淆加密操作的各字符串;第五确定模块460确定已执行混淆加密操作的各字符串的混淆加密方式及相应的解密方式;第二解密模块470通过相应的解密方式对已执行混淆加密操作的各字符串执行相应的解密操作。其中,本优选实施例中移动终端在第一确定模块410、加密及编译模块420、第二确定模块430和第一解密模块440中执行的操作与图1所示的移动终端在第一确定模块310、加密及编译模块320、第二确定模块330和第一解密模块340中执行的操作相同或相似,在此不再赘述。在一个具体应用场景中,开发人员在开发工具中点击编译按钮后,确定应用程序App1的代码中需混淆加密的字符串包括“ABC”和“style”;通过与字符串“ABC”的混淆加密级别2级对应的Base64算法编码混淆加密对字符串“ABC”执行相应的混淆加密操作,并添加预定混淆加密方式的标识信息以及预定分隔符后得到混淆加密后的字符串“S02-QUJD”;通过与字符串“style”的混淆加密级别1级对应的自定义混淆加密方式对字符串“style”执行相应的混淆加密操作,并添加预定混淆加密方式的标识信息以及预定分隔符后得到混淆加密后的字符串“S01-QW345”;在App1的代码编译完成后,此时App1的代码中相应的字符串以加密后的形式显示,由于对于开发人员而言,增加了代码阅读的难度性,同时也不利于后续对App1的开发,因此需要对App1的代码编译完成后将混淆加密的字符串还原为未经混淆加密的原字符串,可根据预定混淆加密方式的标识信息“S02”可确定已执行混淆加密操作的字符串“S02-QUJD”的混淆加密方式为Base64算法编码混淆加密方式,因此可确定其相应的解密方式为基于Base64算法编码的宏方法解密方式,提取字符串“S02-QUJD”中的混淆加密内容得到字符串“QUJD”;根据标识信息“S01”确定已执行混淆加密操作的字符串“S01-QW345”的混淆加密方式为自定义混淆加密方式,因此可确定其相应的解密方式为基于自定义的宏方法解密方式,提取字符串“S01-QW345”中的混淆加密内容得到字符串“QW345”;随后通过基于Base64算法编码的宏方法解密方式对App1代码中的字符串“QUJD”执行相应的解密操作,通过基于自定义的宏方法解密方式对App1代码中的字符串“QW345”执行相应的解密操作。又例如,开发人员在开发工具的人机交互界面中点击编译按钮后,确定应用程序App1的代码中需混淆加密的字符串包括“ABC”和“style”;通过与字符串“ABC”的混淆加密级别2级对应的Base64算法编码混淆加密对字符串“ABC”执行相应的混淆加密操作,通过与字符串“style”的混淆加密级别1级对应的自定义混淆加密方式对字符串“style”执行相应的混淆加密操作,在对各字符串将执行加密操作后,由于对于开发人员而言,代码信息是透明性的,可将已执行混淆加密操作的各字符串及各自对应的混淆加密方式存储至已执行混淆加密操作字符串的记录表table中;其中,该表可存储于开发人员自定义的位置,可以数据表形式存储于预定的数据库中,也可以脚本文件的形式存储于指定位置,在对App1的代码执行编译操作时并不对table表进行相应的编译,使得该表只供开发人员在开发过程中使用;具体地,记录表table中存储有字符串“ABC”已执行Base64算法编码混淆加密操作后的值如“QUJD”,以及与字符串“ABC”对应的混淆加密方式为Base64算法编码混淆加密方式;并存储有字符串“style”已执行自定义混淆加密操作后的值如“QW345”,以及与字符串“style”对应的混淆加密方式为自定义混淆加密方式。随后,App1代码编译完成后,通过读取App1的table表中的记录信息可确定App1代码中已执行混淆加密操作的各字符串为“QUJD”和“QW345”,并根据table表中记录的字符串“QW345”的混淆加密方式为自定义混淆加密方式可确定其解密方式为基于自定义的宏方法的解密方式,根据table表中记录的字符串“QUJD”的混淆加密方式Base64算法编码混淆加密可确定其解密方式为基于Base64算法编码的宏方法解密方式;随后通过基于自定义的宏方法的解密方式对App1代码中的字符串“QW345”执行相应的解密操作,通过基于Base64算法编码的宏方法解密方式对App1代码中的字符串“QUJD”执行相应的解密操作。通过本实施例,还可对应用程序代码中已执行混淆加密后的字符串进行解密,最终将应用程序代码中的字符串还原为未经混淆加密的原字符串,实现了代码对开发人员的透明性,使得开发人员无需在对应用程序代码编译之前对代码进行备份等操作,从而提高了开发人员的开发效率,同时,避免了因备份应用程序代码等操作而产生的代码丢失或代码发生错误等不可预期的情况发生,进一步的,降低了开发的成本。本
技术领域
:技术人员可以理解,本发明包括涉及用于执行本申请中所述操作中的一项或多项的设备。这些设备可以为所需的目的而专门设计和制造,或者也可以包括通用计算机中的已知设备。这些设备具有存储在其内的计算机程序,这些计算机程序选择性地激活或重构。这样的计算机程序可以被存储在设备(例如,计算机)可读介质中或者存储在适于存储电子指令并分别耦联到总线的任何类型的介质中,所述计算机可读介质包括但不限于任何类型的盘(包括软盘、硬盘、光盘、CD-ROM、和磁光盘)、ROM(Read-OnlyMemory,只读存储器)、RAM(RandomAccessMemory,随即存储器)、EPROM(ErasableProgrammableRead-OnlyMemory,可擦写可编程只读存储器)、EEPROM(ElectricallyErasableProgrammableRead-OnlyMemory,电可擦可编程只读存储器)、闪存、磁性卡片或光线卡片。也就是,可读介质包括由设备(例如,计算机)以能够读的形式存储或传输信息的任何介质。本
技术领域
:技术人员可以理解,可以用计算机程序指令来实现这些结构图和/或框图和/或流图中的每个框以及这些结构图和/或框图和/或流图中的框的组合。本
技术领域
:技术人员可以理解,可以将这些计算机程序指令提供给通用计算机、专业计算机或其他可编程数据处理方法的处理器来实现,从而通过计算机或其他可编程数据处理方法的处理器来执行本发明公开的结构图和/或框图和/或流图的框或多个框中指定的方案。本
技术领域
:技术人员可以理解,本发明中已经讨论过的各种操作、方法、流程中的步骤、措施、方案可以被交替、更改、组合或删除。进一步地,具有本发明中已经讨论过的各种操作、方法、流程中的其他步骤、措施、方案也可以被交替、更改、重排、分解、组合或删除。进一步地,现有技术中的具有与本发明中公开的各种操作、方法、流程中的步骤、措施、方案也可以被交替、更改、重排、分解、组合或删除。以上所述仅是本发明的部分实施方式,应当指出,对于本
技术领域
:的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。当前第1页1 2 3 当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1