应用程序的处理方法及装置的制造方法

文档序号:10471372阅读:227来源:国知局
应用程序的处理方法及装置的制造方法
【专利摘要】本发明公开了一种应用程序的处理方法和装置。所述方法包括:向所述应用程序添加壳程序;使用壳程序的可执行文件来替代所述应用程序的可执行文件;创建与所述壳程序的可执行文件相关联的壳程序执行入口,以替代与所述应用程序的可执行文件相对应的应用程序执行入口;向所述壳程序添加反调试代码,其中,所述壳程序的可执行文件在检测到应用程序正被非法调试时,调用反调试代码对所述应用程序的调试结果进行修改。这样通过跳出通常反调试手段的终止程序的固有思维,以混淆的调试结果来从逻辑上提升应用的破解难度。另外,该方法还可以与使用链接库及llvm等手段结合,由此为应用程序提供全方位的保护。
【专利说明】
应用程序的处理方法及装置
技术领域
[0001]本申请涉及应用程序保护,尤其涉及一种应用程序的处理方法和装置。
【背景技术】
[0002]计算机与网络技术的快速发展与普及催生了庞大的软件产业。由于利益牵扯,软件业从发展之初就面临着非法破解的问题。早年通常是为了个人使用而进行的初级破解(例如,获取注册码以逃避购买),现今则是为了拿到源码将他人的劳动成果直接改头换面为新的应用程序。随着移动终端和游戏社区的兴旺发展,一个成功运营的应用通常能够带来巨大的利益,而这使得对应用的逆向破解变得愈发猖獗。
[0003]因此,开发者需要不断完善应用自身的安全机制,以提升应用本身被逆向破解的难度。

【发明内容】

[0004]为了进一步完善应用的安全机制,本申请提出了一种应用程序的处理方法和装置,其通过改变现有的反调试思路来混淆破解者的逻辑判断,由此提升逆向难度,提高应用的保护水平。
[0005]根据本申请的一个发明,提供了一种应用程序的处理方法,包括:向所述应用程序添加壳程序;使用壳程序的可执行文件来替代所述应用程序的可执行文件;创建与所述壳程序的可执行文件相关联的壳程序执行入口,以替代与所述应用程序的可执行文件相对应的应用程序执行入口;向所述壳程序添加反调试代码,其中,所述壳程序的可执行文件在检测到应用程序正被非法调试时,调用所述反调试代码对所述应用程序的调试结果进行修改。
[0006]与现有的会终止调试的反调试策略不同,本申请通过入口隐藏以及能够混淆调试结果以混乱应用破解者逻辑推导的反调试代码来加大逆向难度,提高应用的保护水平。
[0007]优选地,对所述应用程序添加壳程序可以包括:使用加密算法对所述应用程序的可执行文件进行加密;以及保存经加密的所述应用程序的可执行文件与所述应用程序执行入口并将与所述加密算法相对应的解密代码写入所述壳程序。
[0008]由此,通过对应用加密并保存隐藏入口,进一步加大破解难度,提高应用的保护水平。
[0009]优选地,壳程序的可执行文件在检测到应用程序未被非法调试的情况下,调用解密代码对已加密的应用程序的可执行文件进行解密。
[0010]由此,在未被非法调试的情况下,可以正常执行应用程序。
[0011]优选地,对所述应用程序添加壳程序的步骤还可以包括:将反重打包代码写入所述壳程序;压缩添加了所述壳程序的所述应用程序,以得到加壳程序;对所述加壳程序进行签名以得到原始签名值;以及将所述原始签名值上传到服务器,其中,在所述加壳程序运行时,所述壳程序的可执行文件调用所述反重打包代码,以获取所述加壳程序的签名值并将所述签名值上传所述服务器,以便所述服务器通过判断所述加壳程序的签名值与所述原始签名值是否相同来判断所述加壳应用是否已被重打包。
[0012]由此,通过服务器端保存来实现对加壳程序的签名。此外,由于签名值的比较在服务器端而非本地进行,因此提升了反重打包的力度,从而进一步提高了应用的逆向难度。
[0013]优选地,可以将所述反调试代码、所述解密代码和所述反重打包代码中的至少一项写入所述壳程序的动态链接库。
[0014]由此,通过将各类反逆向代码写入链接库,使得破解者无法直接从更容易破解的可执行文件中获取上述代码,从而进一步提高应用的逆向难度。
[0015]优选地,可以将所述反调试代码、所述解密代码和所述反重打包代码中的至少一项写入所述壳程序的静态链接库。
[0016]这样,由于使用静态库能够隐藏相应的链接符号,因此加大了破解者的逆向难度,从而进一步提升应用的保护水平。
[0017]优选地,还可以使用Ilvm对所述加壳应用进行编译。由此在不影响原程序流程运行结果的前提下对程序的代码混淆膨胀,让破解者难以找出源程序的代码关联,从而进一步提升逆向难度。
[0018]根据本申请的另一个发明,提供了一种应用程序的处理装置,包括:加壳单元,用于向所述应用程序添加壳程序;可执行文件替代单元,使用壳程序的可执行文件来替代所述应用程序的可执行文件;入口替代单元,创建与所述壳程序的可执行文件相关联的壳程序执行入口,以替代与所述应用程序的可执行文件相对应的应用程序执行入口 ;代码添加单元,用于向所述壳程序添加反调试代码,其中,所述壳程序的可执行文件在检测到所述应用程序正被非法调试时,调用所述反调试代码对所述应用程序的调试结果进行修改。
[0019]优选地,所述装置还可以包括:加密单元,用于使用加密算法对所述应用程序的可执行文件进行加密;以及保存单元,用于保存经加密的所述应用程序的可执行文件与所述应用程序执行入口并将与所述加密算法相对应的解密代码写入所述壳程序。
[0020]优选地,所述装置还可以包括反重打包单元,用于:将反重打包代码写入所述壳程序;压缩添加了所述壳程序的所述应用程序,以得到加壳程序;对所述加壳程序进行签名以得到原始签名值;以及将所述原始签名值上传到服务器,其中,在所述加壳程序运行时,所述壳程序的可执行文件调用所述反重打包代码,以获取所述加壳程序的签名值并将所述签名值上传到所述服务器,以便所述服务器通过判断所述加壳程序的签名值与所述原始签名值是否相同来判断所述加壳应用是否已被重打包。
[0021]优选地,所述代码写入单元将所述反调试代码、所述解密代码和所述反重打包代码中的至少一项写入所述壳程序的动态链接库。
[0022]优选地,所述代码写入单元将所述反调试代码、所述解密代码和所述反重打包代码中的至少一项写入所述壳程序的静态链接库。
[0023]优选地,所述处理装置还可以包括编译单元,用于使用Ilvm对所述加壳应用进行编译。
[0024]通过使用上述反逆向方法和装置,能够层层提升应用的逆向难度,混淆破解者的视听,由此从实质上改善应用的保护水平。
【附图说明】
[0025]通过结合附图对本公开示例性实施方式进行更详细的描述,本公开的上述以及其它目的、特征和优势将变得更加明显,其中,在本公开示例性实施方式中,相同的参考标号通常代表相同部件。
[0026]图1是用于实施本发明的示例性计算系统的框图。
[0027]图2是根据本发明的一个实施例的应用程序的处理方法的流程图。
[0028]图3是根据本发明的一个实施例的应用程序的处理装置的示意图。
【具体实施方式】
[0029]下面将参照附图更详细地描述本公开的优选实施方式。虽然附图中显示了本公开的优选实施方式,然而应该理解,可以以各种形式实现本公开而不应被这里阐述的实施方式所限制。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。
[0030]当前,随着各类在线社区和移动终端数量的日益庞大,产生了大量的第三方应用。由于可见的非法所得巨大,应用的逆向分析技术日益发展,加之大多数应用开发人员不懂逆向工程,使得对应用内源码的保护几乎形同虚设。非法拷贝、逆向工程、反编译、调试、破解、二次打包、内存截取等手段不断威胁着应用安全,不仅危害了使用者,也给正常应用开发者造成严重的损害。
[0031]另外,虽然Windows和OS系统下的应用也存在破解问题,但例如安卓的开源系统由于为应用开发者提供了更多的功能接口而面临更为严峻的破解问题。
[0032]鉴于上述问题,本发明提出了一种新颖的反逆向机制,并且能够在优选实施例中与加壳、反重打包、将相关代码写入链接库等手段相结合,为应用(尤其是安卓应用)提供全方位的保护。
[0033]图1是用于实施本发明的示例性计算系统10的框图。该计算系统包括但不限于一个或多个处理器110、存储器120和输入输出装置130。处理器110连接至存储器120和输入输出装置130。在一个实施例中,上述组件也可以彼此相连,例如通过总线。该计算系统10可以采用例如服务器的形式实现,并且还可以包括用于实现其必需功能的其他组件,例如通信装置等。应当理解,图1所述的结构框图仅仅是为了示例的目的,而不是对本发明范围的限制。在某些情况下,可以根据具体情况增加或减少某些设备。
[0034]图2是根据本发明的一个实施例的一种应用程序的处理方法的流程图。该反逆向分析方法可由图1所示的计算系统10,尤其是其中的处理器110执行。例如,存储器120上可以存储指令,并且所述指令在被处理器110执行时,可以实现该程序处理方法。在步骤S210,向所述应用程序添加壳程序。在步骤S220,使用壳程序的可执行文件来替代所述应用程序的可执行文件。在步骤S230,创建与所述壳程序的可执行文件相关联的壳程序执行入口,以替代与所述应用程序的可执行文件相对应的应用程序执行入口。在步骤S240,向所述壳程序添加反调试代码,其中,所述壳程序的可执行文件在检测到所述应用程序正被非法调试时,调用所述反调试代码对所述应用程序的调试结果进行修改。
[0035]由于破解者在对应用进行破解时需要对应用进行逆向分析,而通常的手段之一便是调试(在这里的调试指代非法调试,不同于开发者进行的debug)。开发者在保护自己软件防止被逆向时则会相应地进行反调试来阻止破解者调试自己的程序。具体的实现代码可以通过检测程序自身运行环境来判断应用是否正处于被调试的状态,由此进行相应的操作。现有技术中,如果检测到了被调试就调用退出代码或报错,让调试者无法继续进行调试。然而,检测到反调试直接退出或报错,反而让有经验的破解者知道应用本身存在反调试机制,然后就可以顺势找出反调试代码并加以破解。本发明则是跳出了开发者已有的思路,在检测到软件被调试时不是简单的退出程序,而是给出一个跟正确结果不同但又不影响程序正常运行的值来迷惑破解者,提高破解者进行逆向的难度。
[0036]具体地,例如应用程序在获知自己正被非法调试时,或者壳程序的可执行文件在检测到所述应用程序正被非法调试时,会向数据服务器发送相应的网络请求,而反调试代码会将这些请求打上特殊的标签,服务器会根据打了标签的请求返回一些请求数据,而这些请求数据是并不是正常的请求数据。从而达到混淆的目的。
[0037]例如,假设一个Root提权程序在执行过程中将需要用到的关键算法通过网络下发,动态加载算法代码然后调用。Root提权程序运行的结果有两种:显示root成功,显示root失败。如果加入通常的反调试代码,则当检测到调试后会直接退出或报错。但如果加入本发明的反调试代码,则当检测到调试后可以通过网络下发不正确的算法代码。显然此不正确的算法代码在程序中无法达到跟正常运行时的结果,但是逆向者根本没法确定下发的这个不正确的算法是不正确的,由此逆向者就不知道自己逆向的算法是否正确,从而达到混淆逆向者逻辑的目的。
[0038]在一个优选实施例中,对所述应用程序添加壳程序可以包括:使用加密算法对所述应用程序的可执行文件进行加密;以及保存经加密的所述应用程序的可执行文件与所述应用程序执行入口并将与所述加密算法相对应的解密代码写入所述壳程序。由此,通过加密和保存隐藏的入口来进一步提升应用的保护强度。
[0039]壳程序的可执行文件在检测到所述应用程序未被非法调试的情况下,调用所述解密代码对已加密的所述应用程序的可执行文件进行解密。由此,在未被非法调试的情况下,可以正常执行应用程序。
[0040]在一个优选实施例中,对所述应用程序添加壳程序还可以包括:将反重打包代码写入所述壳程序;压缩添加了所述壳程序的所述应用程序,以得到加壳程序;对所述加壳程序进行签名以得到原始签名值;以及将所述原始签名值上传到服务器,以便服务器保存原始签名值,其中,在所述加壳程序运行时,所述壳程序的可执行文件调用所述反重打包代码,以获取所述加壳程序的签名值并将所述签名值上传所述服务器,以便所述服务器通过判断所述加壳程序的签名值与所述原始签名值是否相同来判断所述加壳应用是否已被重打包。由此,由于两签名的验证在服务器上进行,就提高了加壳程序发布以后修改程序伪造签名通过验证的难度,从而进一步提升应用的保护强度。
[0041]在一个优选实施例中,可以将上述反调试代码、解密代码和反重打包代码中的至少一项写入所述壳程序的链接库。壳程序的链接库显然仍属于壳程序的一部分。另外,在某些情况下,壳程序和原本的应用程序可以共用一个链接库。通过将上述代码写入链接库而非直接写入可执行程序中,能够增加破解者找到上述代码的难度,由此提升应用的保护强度。
[0042]例如,可以针对不同的系统对其中的so文件或者bin文件编译代码使用动态库或是静态库。动态链接库把调用的函数所在文件模块和调用函数在文件中的位置等信息链接进目标程序,程序运行的时候再从系统中其它文件模块中寻找相应函数代码,因此需要相应文件模块的支持,程序中会有符号存在。静态连接库把库文件中用到的函数代码直接链接进目标程序,程序运行的时候不再需要其它的库文件,程序中没有任何符号存在,破解难度更大。但相对于使用动态库而言静态库生成的文件大小会大很多,因此两种方法各有利弊,可以根据实际情况加以选择。
[0043]优选地,还可以使用Ilvm对所述加壳程序进行编译,由此就可以在不影响原程序流程运行结果的前提下对程序的代码混淆膨胀,让破解者难以找出源程序的代码关联,增加破解难度。
[0044]图2所示的上述方法及其优选实施例可由对应的处理装置实施。图3是根据本发明的一个实施例的应用程序的处理装置30的示意图。处理装置30包括加壳单元310,用于对所述应用程序添加壳程序。处理装置30还包括可执行文件替代单元320,用于使用壳程序的可执行文件来替代所述应用程序的可执行文件。处理装置30还包括入口替代单元330,用于创建与所述壳程序的可执行文件相关联的壳程序执行入口,以替代与所述应用程序的可执行文件相对应的应用程序执行入口。处理装置30还包括代码添加单元340,用于向所述壳程序添加反调试代码,其中,在所述壳程序的可执行文件在检测到应用程序正被非法调试时,调用所述反调试代码对所述应用程序的调试结果进行修改。
[0045]在一个优选实施例中,应用程序的处理装置30还可以包括加密单元和保存单元。加密单元可以使用加密算法对所述应用程序的可执行文件进行加密。保存单元则可保存经加密的所述应用程序的可执行文件与所述应用程序执行入口并将与所述加密算法相对应的解密代码写入所述壳程序。
[0046]壳程序的可执行文件在检测到所述应用程序未被非法调试的情况下,调用所述解密代码对已加密的所述应用程序的可执行文件进行解密。由此,在未被非法调试的情况下,可以正常执行应用程序。
[0047]在一个优选实施例中,应用程序的处理装置30还可以包括反重打包单元。反重打包单元可以将反重打包代码写入所述壳程序;压缩经加壳操作的所述应用以得到加壳应用;对所述加壳应用进行签名以得到原始签名值;以及将所述原始签名值上传到服务器,以便服务器保存原始签名值,其中,在加壳应用运行时壳程序的可执行文件调用所述反重打包代码,以获取所述加壳应用的签名值并将所述签名值上传到所述服务器,以便所述服务器通过判断所述加壳应用的签名值与所述原始签名值是否相同来判断所述加壳应用是否已被重打包。
[0048]优选地,代码写入单元310将所述反调试代码、所述解密代码和所述反重打包代码中的至少一项写入所述壳程序的动态链接库或是静态链接库。
[0049]优选地,处理装置30还可以包括编译单元,用以使用Ilvm对所述加壳程序用进行编译。
[0050]上文中已经参考附图详细描述了根据本发明的应用程序处理方法和装置。本发明的上述机制可以适用于各类操作系统,尤其适用于更容易被破解的安卓系统。
[0051]此外,根据本发明的方法还可以实现为一种计算机程序,该计算机程序包括用于执行本发明的上述方法中限定的上述各步骤的计算机程序代码指令。或者,根据本发明的方法还可以实现为一种计算机程序产品,该计算机程序产品包括计算机可读介质,在该计算机可读介质上存储有用于执行本发明的上述方法中限定的上述功能的计算机程序。本领域技术人员还将明白的是,结合这里的公开所描述的各种示例性逻辑块、模块、电路和算法步骤可以被实现为电子硬件、计算机软件或两者的组合。
[0052]附图中的流程图和框图显示了根据本发明的多个实施例的系统和方法的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标记的功能也可以以不同于附图中所标记的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
[0053]以上已经描述了本发明的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术的改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。
【主权项】
1.一种应用程序的处理方法,包括: 向所述应用程序添加壳程序; 使用壳程序的可执行文件来替代所述应用程序的可执行文件; 创建与所述壳程序的可执行文件相关联的壳程序执行入口,以替代与所述应用程序的可执行文件相对应的应用程序执行入口 ; 向所述壳程序添加反调试代码,其中,所述壳程序的可执行文件在检测到所述应用程序正被非法调试时,调用所述反调试代码对所述应用程序的调试结果进行修改。2.如权利要求1所述的方法,对所述应用程序添加壳程序的步骤包括: 使用加密算法对所述应用程序的可执行文件进行加密;以及 保存经加密的所述应用程序的可执行文件与所述应用程序执行入口,并将与所述加密算法相对应的解密代码写入所述壳程序。3.如权利要求2所述的方法,其中, 所述壳程序的可执行文件在检测到所述应用程序未被非法调试的情况下,调用所述解密代码对已加密的所述应用程序的可执行文件进行解密。4.如权利要求3所述的方法,其中,对所述应用程序添加壳程序的步骤包括: 将反重打包代码写入所述壳程序; 压缩添加了所述壳程序的所述应用程序,以得到加壳程序; 对所述加壳程序进行签名以得到原始签名值;以及 将所述原始签名值上传到服务器, 其中,在所述加壳程序运行时,所述壳程序的可执行文件调用所述反重打包代码,以获取所述加壳程序的签名值并将所述签名值上传到所述服务器,以便所述服务器通过判断所述加壳程序的签名值与所述原始签名值是否相同来判断所述加壳应用是否已被重打包。5.如权利要求4所述的方法,其中,所述反调试代码、所述解密代码和所述反重打包代码中的至少一项被写入所述壳程序的动态链接库或静态链接库。6.如权利要求4所述的方法,还包括: 使用Ilvm对所述加壳程序进行编译。7.一种应用程序的处理装置,包括: 加壳单元,用于向所述应用程序添加壳程序; 可执行文件替代单元,用于使用壳程序的可执行文件来替代所述应用程序的可执行文件; 入口替代单元,用于创建与所述壳程序的可执行文件相关联的壳程序执行入口,以替代与所述应用程序的可执行文件相对应的应用程序执行入口; 代码添加单元,用于向所述壳程序添加反调试代码,其中,所述壳程序的可执行文件在检测到所述应用程序正被非法调试时,调用所述反调试代码对所述应用程序的调试结果进行修改。8.如权利要求7所述的装置,还包括: 加密单元,用于使用加密算法对所述应用程序的可执行文件进行加密;以及保存单元,用于保存经加密的所述应用程序的可执行文件与所述应用程序执行入口,并将与所述加密算法相对应的解密代码写入所述壳程序。9.如权利要求8所述的装置,还包括反重打包单元,用于: 将反重打包代码写入所述壳程序; 压缩添加了所述壳程序的所述应用程序,以得到加壳程序; 对所述加壳程序进行签名以得到原始签名值;以及 将所述原始签名值上传到服务器, 其中,在所述加壳程序运行时,所述壳程序的可执行文件调用所述反重打包代码,以获取所述加壳程序的签名值并将所述签名值上传到所述服务器,以便所述服务器通过判断所述加壳程序的签名值与所述原始签名值是否相同来判断所述加壳应用是否已被重打包。10.如权利要求9所述的装置,其中,所述代码写入单元将所述反调试代码、所述解密代码和所述反重打包代码中的至少一项写入所述壳程序的动态链接库或静态链接库。11.如权利要求9所述的装置,还包括: 编译单元,用于使用I Ivm对所述加壳程序进行编译。
【文档编号】G06F21/14GK105825085SQ201610149680
【公开日】2016年8月3日
【申请日】2016年3月16日
【发明人】钟炳杰
【申请人】广州彩瞳网络技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1