一种针对安卓程序代码的加密方法与流程

文档序号:12470971阅读:577来源:国知局
一种针对安卓程序代码的加密方法与流程

本发明涉及计算机软件技术领域,具体说涉及一种针对安卓程序代码的加密方法。



背景技术:

随着安卓(Android)操作系统的不断发展,Android系统的应用范围得到不断扩展。针对Android系统的应用程序也得到了极大的扩充,越来越多的Android程序被开发并投入应用。由于Android程序大部分由java代码编写,而反编译java代码难度很低。因此为了保护安卓应用程序的开发者以及使用者的合法权益,需要对Android程序的代码进行安全防护。

在现有技术中,常用的代码安全防护方法是代码混淆。即使用无意义的变量和方法名来使程序晦涩难懂,减少程序的可读性,增加破译难度。但是在这种方法下程序代码依然有迹可循,只要花费一定时间仍然可以破解程序。

进一步的,现有技术中还采用动态链接库的方式,将关键代码通过JNI技术移到动态链接库中,从而对关键代码实现加密保护。但是,针对这种方法,破解人员可通过反汇编动态链接库文件(后缀名为.so的文件)得到程序加密逻辑,从而破解关键代码。

因此,为了进一步提高Android程序代码的防护安全程度,需要一种针对安卓程序代码的加密方法。



技术实现要素:

为了进一步提高Android程序代码的防护安全程度,本发明提供了一种针对安卓程序代码的加密方法,所述方法包括:

在有加载需求时由服务器端根据加密算法对关键代码进行加密以生成加密代码,并将所述加密代码发送到客户端;

所述客户端调用加载所述加密代码;

当所述客户端运行完毕所述加密代码时删除所述加密代码。

在一实施例中,服务器端根据加密算法对关键代码进行加密以生成加密代码,其中,所述加密算法与所述客户端对应,在同一次加密交互周期中不得更换加密算法以及客户端。

在一实施例中,服务器端根据加密算法对关键代码进行加密以生成加密代码,其中,针对不同的客户端采用不同的加密算法。

在一实施例中,服务器端根据加密算法对关键代码进行加密以生成加密代码,其中,在每次发送所述加密算法前随机生成所述加密算法,每次发送都采用不同的加密算法。

在一实施例中,在每次发送所述加密算法前随机生成所述加密算法,其中,所述服务器端以随机无意义的方式产生随机加密类和函数签名。

在一实施例中,所述客户端调用加载所述加密代码,其中,所述客户端通过反射机制调用所述加密算法。

在一实施例中,当所述客户端运行完毕所述加密代码时向所述服务器发送所述加密代码的运行结果。

在一实施例中,当所述客户端运行完毕所述加密代码时向所述服务器发送所述加密代码的运行结果,其中,所述客户端对所述运行结果进行加密并将加密后的运行结果发送到所述服务器端。

在一实施例中,当所述服务器端接收到所述运行结果后对其进行验证。

在一实施例中,所述加密算法具有有效时间限制。

根据本发明的方法,关键代码不会长时间存于本地,大大降低了破译人员获取关键代码的可能性,使得关键代码的安全性得到有效提高。

本发明的其它特征或优点将在随后的说明书中阐述。并且,本发明的部分特征或优点将通过说明书而变得显而易见,或者通过实施本发明而被了解。本发明的目的和部分优点可通过在说明书、权利要求书以及附图中所特别指出的步骤来实现或获得。

附图说明

附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例共同用于解释本发明,并不构成对本发明的限制。在附图中:

图1是根据本发明一实施例的方法流程图;

图2是根据本发明一实施例的部分方法流程图。

具体实施方式

以下将结合附图及实施例来详细说明本发明的实施方式,借此本发明的实施人员可以充分理解本发明如何应用技术手段来解决技术问题,并达成技术效果的实现过程并依据上述实现过程具体实施本发明。需要说明的是,只要不构成冲突,本发明中的各个实施例以及各实施例中的各个特征可以相互结合,所形成的技术方案均在本发明的保护范围之内。

随着Android系统的不断发展,越来越多的Android程序被开发并投入应用。由于Android程序大部分由java代码编写,而反编译java代码难度很低。因此为了保护安卓应用程序的开发者以及使用者的合法权益,需要对Android程序的代码进行安全防护。

在现有技术中,常用的代码安全防护方法是代码混淆。即使用无意义的变量和方法名来使程序晦涩难懂,减少程序的可读性,增加破译难度。但是在这种方法下程序代码依然有迹可循,只要花费一定时间仍然可以破解程序。

进一步的,现有技术中还采用动态链接库的方式,将关键代码通过JNI技术移到动态链接库中,从而对关键代码实现加密保护。但是,针对这种方法,破解人员可通过反汇编动态链接库文件(后缀名为.so的文件)得到程序加密逻辑,从而破解关键代码。

为了进一步提高Android程序代码的防护安全程度,本发明提出了一种针对安卓程序代码的加密方法。

具体的,针对Android端的本地代码(硬代码)在安全防护方面的缺点,在本发明一实施例中,基于Android动态加载技术,不将加密的关键代码存放在本地,在有关键代码加载(执行)需求时:

由服务器端根据加密算法对关键代码进行加密以生成加密代码,并将加密代码发送到客户端;

客户端调用加载加密代码;

当客户端运行完毕加密代码时删除加密代码。

在整个流程中,加密代码(加密的关键代码)的存储位置主要在服务器。客户端只在需要加载关键代码时才获得加密代码(加密的关键代码),在其他时刻客户端并不保存关键代码。这使得关键代码的安全度大大提高。进一步的,关键代码以加密方式传输,并且,加密算法也是来自与服务器端。这样就防止了破解者截获传输数据从而获取关键代码的可能性。

接下来基于附图详细描述本发明一实施例的具体执行流程。附图的流程图中示出的步骤可以在包含诸如一组计算机可执行指令的计算机系统中执行。虽然在流程图中示出了各步骤的逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。

在一实施例中,如图1所示,在有关键代码加载需求时由客户端向服务器端发送加载请求(步骤S110);服务器端接收加载请求(步骤S120);然后根据加密算法对客户端需要加载的关键代码进行加密以生成加密代码(步骤S121);服务器端将加密代码发送到客户端(步骤S122);客户端接收加密代码(步骤S132)。

客户端接收到加密代码后加载运行(调用)加密代码以执行预期的操作(步骤S140)。具体的,客户端通过动态加载技术将加密代码加载到虚拟机中执行。

最后,当客户端运行完毕加密代码时,删除客户端上的所有的加密代码(步骤S160)。这样,加密代码就不会长时间存于本地,大大降低了破译人员获取加密代码的可能性,使得关键代码的安全性得到有效提高。

进一步的,在步骤S121中,服务器端用于加密关键代码的加密算法与提出加密请求客户端对应,在同一次加密交互周期中不得更换加密算法以及客户端。这样就维持了整个加密周期的加密算法匹配,避免了由于数据发送错误造成的关键代码外流。

进一步的,在步骤S121中,针对不同的客户端采用不同的加密算法。避免多个客户端采用同一加密算法,这样在单一客户端数据外泄时不会影响其他客户端,从而降低了关键代码被解密的可能性。

进一步的,虽然本发明一实施例中通过动态加载技术保证了加密代码不会长时间存在于本地,但如果破译人员发现了该加密手段,并在程序运行中将加密代码获取(pull)到本地,经过研究后仍然有破译的风险。针对这一问题,在本发明一实施例中,采用了随机加密的方法。服务器端在每次对关键代码进行加密前随机生成加密算法,每次都采用不同的加密算法。即,每次加密的逻辑都是随机产生的,该加密算法和请求的客户端一一对应。这样,即使破译人员截获了某次传输的加密程序块,也不能基于该加密程序块破解之后的加密传输。

进一步的,为了不在客户端暴露过多实现细节,在本发明一实施例中,服务器端以随机无意义的方式产生随机加密类和函数签名。与之对应的,在客户端中通过java反射的机制进行加密代码的调用(在步骤S140中)。

进一步的,为了更加有效地防止破译人员破译传输的加密代码,在本发明一实施例中,加密算法具有有效时间限制。这样,即使破译人员及时截获了本次传输的加密代码,但由于加密程序模块不可能在短时间内被破解,待到加密代码被破解时相应的加密算法已经过了有效期,最终破解的加密算法仍然无法被使用,这就最终达到了保护核心信息的目的。

进一步的,在本发明一实施例中,当客户端运行完毕加密代码后,还将加密代码的运行结果信息(本次操作的关键信息)发送到服务器端(步骤S150)。服务器端接收运行结果信息(关键信息)以确定下一步执行的操作(步骤S151)。具体的,在一实施例中,服务器端对运行结果信息进行验证以确定本次操作是否成功(步骤S152)。

为了保证运行结果信息(本次操作的关键信息)的安全,在一实施例中,客户端首先对运行结果信息(关键信息)进行加密(生成加密串)。然后将加密串发送到服务器端(步骤S150)。

进一步的,在一实施例中,服务器端接收到加密的运行结果信息后首先对加密串进行验证。由于加密算法被设置了有效时间,服务器端判断加密串是否已超过有效时间,如果没有,则对加密串解密获取运行结果信息(关键信息)。

接下来基于附图描述一具体应用实例。如图2所示,在一开始,首先由客户端请求逻辑包(dex包)(步骤S210)。

服务器端接收到客户端的请求后,生成随机算法并生成加密逻辑包(dex包,关键代码)(步骤S220)。然后服务器端暂存加密算法、客户端标识(在本实施例中,为国际移动设备标识IMEI)以及客户端的请求时间(步骤S221),并将加密逻辑包(dex包)发送到客户端(步骤S222)。

客户端动态加载加密逻辑包(dex包)(步骤S230),通过反射机制执行加载运行;运行完毕后将加密的运行结果信息(加密串)发送到服务器端(步骤S232)并删除客户端上的的加密逻辑包(不在本地保存)(步骤S233)。

服务器端接收到加密的运行结果信息后验证来源(客户端标识)以及是否超时(从请求时间到接收到加密串的当前时间之间的时间消耗是否超出加密算法预设的有效时间);如果没有超时,则解密(步骤S241)并向客户端返回成功信息(步骤S243);如果超时,则不解密,向客户端返回失败信息(步骤S242)。

客户端基于服务器端的信息判断当前操作是否成功(步骤S250);如果成功,则操作结束;如果不成功,则返回第一步重新操作。

综上,本发明的方法的创新之处在结合了随机加密算法和Android端可动态加载热代码并执行的特性。根据本发明的方法,加密代码不会长时间存于本地,大大降低了破译人员获取加密代码的可能性,使得关键代码的安全性得到有效提高。

虽然本发明所公开的实施方式如上,但所述的内容只是为了便于理解本发明而采用的实施方式,并非用以限定本发明。本发明所述的方法还可有其他多种实施例。在不背离本发明实质的情况下,熟悉本领域的技术人员当可根据本发明作出各种相应的改变或变形,但这些相应的改变或变形都应属于本发明的权利要求的保护范围。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1