应用程序的混淆方法、装置和服务器与流程

文档序号:16671028发布日期:2019-01-18 23:35阅读:191来源:国知局
应用程序的混淆方法、装置和服务器与流程
本发明涉及软件安全
技术领域
,尤其是涉及一种应用程序的混淆方法、装置和服务器。
背景技术
:现有的混淆技术,只能针对某一种或某一类特殊的代码,混淆目标有限,且通用性较差。而近年来,应用商店所维护的移动应用逐年递增,在海量应用的背景下,应用数量增长的同时,一批不法分子趁机窃取应用代码进行篡改、仿造、添加恶意代码等操作,给应用开发者及应用用户的财产安全带来损失,隐私安全造成了极大的威胁,因此这种方式无法满足大规模移动应用的安全防护。技术实现要素:有鉴于此,本发明的目的在于提供一种应用程序的混淆方法、装置和服务器,以提高应用程序混淆算法的通用性和应用软件的安全性。第一方面,本发明实施例提供了一种应用程序的混淆方法,该方法包括:解析应用程序的apk文件,得到dex文件;dex文件中包含至少一个class文件;采用预设的代码,对class文件的指定区域进行混淆处理,得到处理后的class文件;封装处理后的class文件,得到更新的dex文件;打包更新后的dex文件,得到更新的apk文件。进一步地,上述解析应用程序的apk文件,得到dex文件的步骤,包括:对应用程序的apk文件进行解压处理,得到class.dex文件;将class.dex文件转换为class.jar包;class.jar包中包括至少一个class文件。进一步地,上述采用预设的代码,对class文件的指定区域进行混淆处理的步骤,包括:识别class文件的java代码的方法部分;采用预设的代码,对方法部分的指定位置进行混淆处理。进一步地,上述方法部分的指定位置包括方法部分的开头部分和/或结尾部分;采用预设的代码,对方法部分的指定位置进行混淆处理的步骤,还包括:将伪指令序列插入至方法部分的指定位置。进一步地,上述封装处理后的class文件,得到更新的dex文件的步骤之后,方法还包括:更新dex文件中的总和校验码和文件签名。进一步地,上述打包更新后的dex文件,得到更新的apk文件的步骤,包括:打包更新后的dex文件、总和校验码和签名文件,得到更新的apk文件;对更新的apk文件进行签名处理,得到签名后的apk文件。进一步地,上述方法还包括:在应用程序的执行过程中,通过不透明谓词判断dex文件中的当前代码是否是伪序列指令;如果否,执行当前代码。第二方面,本发明实施例提供了一种应用程序的混淆的装置,该装置包括:解析模块用于解析应用程序的apk文件,得到dex文件;dex文件中包含至少一个class文件;混淆模块用于采用预设的代码,对class文件的指定区域进行混淆处理,得到处理后的class文件;封装模块用于封装处理后的class文件,得到更新的dex文件;打包模块用于打包更新后的dex文件,得到更新的apk文件。进一步地,上述解析模块还用于:对应用程序的apk文件进行解压处理,得到class.dex文件;将class.dex文件转换为class.jar包;class.jar包中包括至少一个class文件。第三方面,本发明实施例提供了一种服务器,包括存储器和处理器;存储器用于存储支持处理器执行上述方法的程序,处理器被配置为用于执行存储器中存储的程序。本发明实施例带来了以下有益效果:本发明提供了一种应用程序的混淆方法、装置和服务器,通过解析应用程序的apk文件,得到包含class文件的dex文件;采用预设的代码,对class文件的指定区域进行混淆处理,再封装混淆处理后的class文件,得到更新的dex文件;最后打包更新后的dex文件,得到更新的apk文件。该方式以可执行文件dex文件进行混淆,提高了应用程序混淆算法的通用性,同时也提高了应用软件的安全性。本发明的其他特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点在说明书、权利要求书以及附图中所特别指出的结构来实现和获得。为使本发明的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。附图说明为了更清楚地说明本发明具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1为本发明实施例提供的一种应用程序的混淆方法的流程图;图2为本发明实施例提供另一种应用程序的混淆方法的流程图;图3为本发明实施例提供的插入垃圾代码后,数据流向示意图;图4为本发明实施例提供的一种应用程序的混淆方法的数据流向示意图;图5为本发明实施例提供的一种应用程序的混淆装置的结构示意图。具体实施方式为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合附图对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。混淆算法属于软件安全保护中的一个方法,而对apk应用的保护有以下几种方式:完整性校验、源码加壳、白盒加密、代码混淆;其中完整性校验是在保证apk应用完整性的基础上,防止代码被人非法篡改;而源码加壳是指对代码部分加上所谓的“外壳”,以此来防止程序被跟踪和调试;白盒加密用于替换软件中传统密码算法的黑盒实现方式,实现无密钥泄露的密码算法运算,使得攻击者无法获得任何密钥数据;代码混淆主要针对字符串或者某一小段代码进行混淆,使得处理后的代码与处理前代码完成相同的功能,而代码混淆后很难被反编译。从软件安全保护的角度而言,完整性校验、源码加壳、白盒加密的发挥的作用巨大,但代码混淆同样必不可少。现有的代码混淆技术作用范围太小,只能针对某一种或某一类特殊的代码,缺乏广泛性,且没有混淆目标是整个apk应用或者apk应用中某个文件的混淆算法。考虑到现有的混淆技术的混淆目标有限,且通用性较差的问题,本发明实施例提供了一种应用程序的混淆方法、装置和服务器,该技术可以应用于android系统的应用程序或其他相关系统下的应用程序,该技术可以采用相关的软件或硬件实现,下面通过实施例进行描述。参见图1所示的一种应用程序的混淆方法的流程图;该方法包括如下步骤:步骤s102,解析应用程序的apk(androidpackage,android安装包)文件,得到dex文件;该dex文件中包含至少一个class文件;由于android系统的大部分程序都是java编写而成,android的应用必须使用java来开发,因此应用程序的代码混淆需要应用于java代码。上述apk文件是androidpackage的缩写,即android安装包,将apk文件直接上传到android模拟器或android手机中执行即可安装。apk文件经过解析后,拆分成如下述表1所示的结构:表1文件含义assets目录存放需要打包到apk中的静态文件lib目录程序依赖的native库res目录存放应用程序的资源meta-inf目录存放应用程序签名和证书androidmanifest.xml应用程序的配置文件classes.dexdex可执行文件resources.arsc资源配置文件apk文件经过解析后,拆分成assets目录、lib目录、res目录、meta-inf目录、androidmanifest.xml、classes.dex、resources.arsc。上述dex文件即classes.dex为应用程序的apk文件中提取出来的可执行文件;上述class文件为java编译后的目标文件。步骤s104,采用预设的代码,对class文件的指定区域进行混淆处理,得到处理后的class文件;上述预设的代码可以为垃圾代码,插入在java字节码数组中,在java程序运行过程能被执行,同时还能不改变程序的运行结果。上述指定区域为垃圾代码混淆区域,可以为class文件java代码中方法部分的开头部分或结尾部分,也可以为class文件中的其他部分。上述的混淆即是代码混淆,是将计算机程序的代码,转换成一种功能上等价,但是难于阅读和理解的形式行为;代码混淆可以用于程序源代码,也可以用于程序编译而成的中间代码。步骤s106,封装处理后的class文件,得到更新的dex文件;上述封装是将class文件封装成jar文件,是通过使用jdk中bin目录里的jar.exe将class文件进行压缩实现的。步骤s108,打包更新后的dex文件,得到更新的apk文件。上述打包更新后的dex文件需要打包androidmanifest.xml文件、dex文件、资源文件等文件。本发明提供了一种应用程序的混淆方法,通过解析应用程序的apk文件,得到包含class文件的dex文件;采用预设的代码,对class文件的指定区域进行混淆处理,再封装混淆处理后的class文件,得到更新的dex文件;最后打包更新后的dex文件,得到更新的apk文件。该方式以可执行文件dex文件进行混淆,提高了应用程序混淆算法的通用性,同时也提高了应用软件的安全性。参见图2所示的另一种应用程序的混淆方法的流程图;该方法在图1所示方法的基础上实现的,该方法包括如下步骤:步骤s202,对应用程序的apk文件进行解压处理,得到class.dex文件;步骤s204,将class.dex文件转换为class.jar包;该class.jar包中包括至少一个class文件;上述对apk文件进行解压后,获得对应的class.dex文件。通常使用dex2jar等工具将class.dex文件转换成class.jar,jar包里存放着class文件。步骤s206,识别class文件的java代码的方法部分;只有确定了混淆的区域,才能开始进行代码的相关混淆工作。选取的混淆区域是java代码中的方法部分,具体原因如下:java是一门面向对象的语言,其主体是类,而每个有具体作用的类中都包含着方法,往往代码中的核心功能都存放在这些方法中,因此如果我们想实现代码的混淆,就必须针对类中的方法进行混淆。与此同时,获取的文件为class文件,而通过现有技术能识别类中的各个方法,并进行区分,因此可直接在class文件中插入混淆,而不用再对class文件进行反编译,极大地提高了混淆的效率,缩短混淆时间。步骤s208,采用预设的代码,对方法部分的指定位置进行混淆处理,得到处理后的class文件;该方法部分的指定位置包括方法部分的开头部分和/或结尾部分;上述指定位置可以为方法部分的开头部分和结尾部分,也可以分别为方法部分的开头部分和结尾部分。对方法的具体代码内容进行解析时,发现不同dex文件对应多个class文件,不同的class文件对应的java代码的方法内容和结构差别很大,因此想要对方法进行解析并且在方法中间部分进行混淆,无论从时间效率,还是从实现难度上,都过于困难。上述采用预设的代码,对方法部分的指定位置进行混淆处理的步骤,还包括:将伪指令序列插入至方法部分的指定位置;上述伪指令序列是插入垃圾代码后才产生的,可对恶意应用的开发者反编译造成干扰,提高应用软件的安全性。上述采用预设的代码,对方法部分的指定位置进行混淆处理的方法还包括:在应用程序的执行过程中,通过不透明谓词判断dex文件中的当前代码是否是伪序列指令;如果否,执行当前代码。上述不透明谓词是一种判断条件,计算机很难识别,当不法分子对程序进行反编译时,会进入到伪序列指令的执行。执行伪序列指令后,程序会显示执行出错。通过上述的判断,应用开发者可以顺利执行应用程序;恶意开发者则无法判断执行指令。如图3所示为插入垃圾代码后,数据流向示意图;在执行语句a和执行语句b之间插入垃圾代码,即加入了一个判断条件(不透明谓词),判断条件不会影响程序的正常执行,但会给代码反编译带来难度,反编译过程无法识别正常的流程是执行语句b还是执行伪指令序列。步骤s210,封装处理后的class文件,得到更新的dex文件;步骤s212,更新所述dex文件中的总和校验码和文件签名。上述总和检验码,在数据处理和数据通信领域中,用于校验目的的一组数据项的和。这些数据项可以是数字或在计算检验总和过程中看作数字的其它字符串。上述文件签名为对文件的数字签名,是加密技术中不可缺少的一种技术,可防止软件被不法分子恶意篡改,危害公众财产和安全。步骤s214,打包更新后的dex文件、所述总和校验码和所述签名文件,得到更新的apk文件;步骤s216,对更新的apk文件进行签名处理,得到签名后的apk文件。上述的签名即是对android应用软件的数字签名,与消息摘要相对应,对apk文件进行签名主要有以下目的:一是能确定消息是由开发者签名并发布出来的;二是数字签名能确定消息的完整性,由于数字签名代表了文件的特征,文件如果发生改变,数字摘要的值也将发生变化,不同的文件将得到不同的数字摘要。参见图4所示的一种应用程序的混淆方法的数据流向示意图;解压apk文件夹后,获取dex文件;解析dex文件,解析成多个class文件,对class文件java代码的方法部分插入垃圾代码进行混淆;重组dex文件,更新checksum(总和校验码)以及signature(签名)等数据,打包apk,重新签名。上述通过在java代码的开头部分和/或结尾部分插入垃圾代码,以可执行文件dex文件进行混淆,提高了应用程序混淆算法的通用性,同时也提高了应用软件的安全性。对应于上述方法实施例,参见图5所示的一种应用程序的混淆装置的结构示意图;该装置包括:解析模块50,用于解析应用程序的apk文件,得到dex文件;该dex文件中包含至少一个class文件;混淆模块51,用于采用预设的代码,对class文件的指定区域进行混淆处理,得到处理后的class文件;封装模块52,用于封装处理后的class文件,得到更新的dex文件;打包模块53,用于打包更新后的dex文件,得到更新的apk文件。具体体现时,上述解析模块50还用于对应用程序的apk文件进行解压处理,得到class.dex文件;将class.dex文件转换为class.jar包;该class.jar包中包括至少一个class文件。本发明实施例提供了一种应用程序的混淆装置,通过解析应用程序的apk文件,得到包含class文件的dex文件;采用预设的代码,对class文件的指定区域进行混淆处理,再封装混淆处理后的class文件,得到更新的dex文件;最后打包更新后的dex文件,得到更新的apk文件。该方式以可执行文件dex文件进行混淆,提高了应用程序混淆算法的通用性,同时也提高了应用软件的安全性。本发明实施例提供的应用程序的混淆装置,与上述实施例提供的应用程序的混淆方法具有相同的技术特征,所以也能解决相同的技术问题,达到相同的技术效果。本发明实施例提供了一种服务器,包括存储器和处理器;存储器用于存储支持处理器执行上述应用程序的混淆方法的程序,处理器被配置为用于执行所述存储器中存储的程序。本发明实施例所提供的应用程序的混淆方法、装置和服务器计算机程序产品,包括存储了处理器可执行的非易失的程序代码的计算机可读存储介质,程序代码包括的指令可用于执行前面方法实施例中的方法,具体实现可参见方法实施例,在此不再赘述。本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。最后应说明的是:以上实施例,仅为本发明的具体实施方式,用以说明本发明的技术方案,而非对其限制,本发明的保护范围并不局限于此,尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本
技术领域
的技术人员在本发明揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本发明实施例技术方案的精神和范围,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1