一种用于安卓应用程序的场景信息保护方法

文档序号:7894955阅读:212来源:国知局
专利名称:一种用于安卓应用程序的场景信息保护方法
技术领域
本发明涉及版权保护领域,尤其是涉及ー种应用程序的场景信息保护方法。
背景技术
随着智能手机的普及,智能手机的应用软件越来越多。随之而来的盗版问题也更加严重。安卓系统(Android系统)上常用的数据保护技术有代码混淆、应用授权和资源水印等。代码混淆对发布的应用程序进行重新组织和处理,使处理后的代码与处理前的代码功能完全相同,而混淆后的代码很难被反编译,即使反编译成功也很难得出程序的真正意义。混淆后的应用程序可以正常使用,因此不能保证应用程序不被共享。通常代码混淆只针对应用程序本身,对应用程序所使用的场景信息等资源数据并不提供保护。应用授权=Google为Android系统提供的反盗版机制主要是检查已安装的付费应用通过查询Android Market的授权服务器,并返回信息来识别当前用户的许可情况。这种反盗版的措施已经被黑客破解。资源水印很多应用程序开发者或第三方的应用商店,为了保护应用程序中所使用的资源数据。资源数据包括但不限于场景数据、地图数据及其他静态数据。通常在资源数据上加入ー些特殊的标记,作为水印。但这种方法仅仅是能够确定资源的所有者,而无法防止破解者对这些资源进行使用。在实际应用中,应用开发者往往会发布应用程序的完整副本,应用程序中的场景信息等静态数据作为资源,得不到有效保护。盗版者能够比较容易的获得这些资源,对资源进行非法的使用、共享和再分发。上述这些方法并不能有效解决应用程序中的场景信息被非法共享的问题。

发明内容
为了解决上述问题,本发明提出了一种可以根据设备标识和用户标识对应用程序所用到的场景信息进行保护的方法,具体实现方法如下。一种安卓应用程序场景信息的保护方法,所述安卓应用程序保存在本地设备中,所述本地设备与远程的云端服务器进行通信,所述方法包括
场景数据经加密后保存在云端服务器中;
当安卓应用程序需要使用所述场景数据时,向云端服务器请求所述场景数据;
云端服务器根据所述安卓应用程序的请求,检索到所述场景数据,然后将经加密的所述场景数据以密文形式发送给所述安卓应用程序;
所述安卓应用程序接收到云端服务器发送的经加密的所述场景数据之后,对经加密的所述场景数据进行解密;
所述场景数据经解密后再由所述安卓应用程序进行二次加密处理;经二次加密处理的所述场景数据以密文形式保存在所述本地设备中;
当所述安卓应用程序需要使用所述场景数据时,在所述本地设备的内存中对所述本地设备中已存储的经过二次加密处理的所述场景数据进行解密并使用解密后的所述场景数据;
当不再使用所述场景数据时,则删除经过解密后的所述场景数据。根据本发明的ー个方面,所述云端服务器在检索所述场景数据之前,对所述安卓应用程序的用户进行身份验证。根据本发明的ー个方面,所述场景数据包括所述安卓应用程序中需要使用的静态数据。根据本发明的ー个方面,在进行身份验证之后,云端服务器查询所述按照应用程 序的用户的授权信息;如果所述用户拥有该场景数据的授权,才检索所述场景数据。根据本发明的ー个方面,二次加密处理采用的加密算法是对称加密算法或非対称加密算法。根据本发明的ー个方面,将用户信息发送给云端服务器,云端服务器根据所述用户信息生成二次加密密钥并保存在云端服务器中;云端服务器将所述二次加密密钥将发送给的所述安卓应用程序;所述安卓应用程序利用所述二次加密密钥进行二次加密处理。根据本发明的ー个方面,将用户信息发送给云端服务器,云端服务器根据所述用户信息生成二次加密密钥并保存在云端服务器中;云端服务器将所述二次加密密钥将发送给的所述安卓应用程序;所述安卓应用程序利用所述二次加密密钥和所述用户信息生成本地密钥,再利用本地密钥进行二次加密处理。根据本发明的ー个方面,所述安卓应用程序根据用户信息得到本地加密密钥,然后利用得到的本地加密密钥进行二次加密处理。根据本发明的ー个方面,云端服务器根据其中所存储的用户信息,为每个用户生成ー对公私密钥,由本地设备保存公钥,由云端服务器保存私钥;
当需要加密时,所述安卓应用程序再产生ー个随机密钥,用产生的随机密钥对所述场景数据进行加密,得到第二加密密钥,然后利用所述公钥对所述第二加密密钥进行加密并保存到本地设备;
当需要解密时,所述安卓应用程序将第二加密密钥发送给云端服务器,云端服务器利 用其中所保存的所述私钥来解密出所述第二加密密钥,然后将已解密的第二加密密钥发送给所述安卓应用程序,由所述安卓应用程序根据已解密的第二加密密钥来解密。应用程序不再使用场景数据时,从内存中销毁明文形式的场景信息数据。运行应用程序的本地设备中不会存储明文形式的场景信息数据。应用程序与云端服务器之间的网络传输过程中不会出现明文形式的场景信息数据。


图I为本发明的示意图。 图2为本发明实施例I的流程图。图3为本发明实施例2的流程图。
图4为本发明实施例2的流程图。图5为本发明实施例3的流程图。图6为本发明实施例4的流程图。图7为本发明实施例5的流程图。
具体实施例方式应用程序将场景数据加密存储在云端服务器上,当应用程序需要使用场景数据时,向云端服务器请求场景数据,云端服务器根据应用程序的请求,检索到相应的场景数据,并将场景数据的密文发送给应用程序。应用程序接收到云端服务器发送的场景数据,对数据进行解密。数据解密后,在本地设备中对数据进行二次加密处理,将二次加密的密文数据保存在本地存储设备中。当应用程序需要使用场景数据时,在内存中对设备中存储的密文数据进行解密使用,当数据不再使用吋,销毁明文数据,本地设备中不保存明文数据。所述的应用程序指运行于使用Android操作系统的智能手机上的应用程序。所述的云端服务器,用于存储不同应用程序的场景数据;用于根据用户请求,进行用户身份认证,并获取用户的授权信息;用于根据用户请求,检索相应的场景数据。所述的场景数据,指应用程序中将会使用的静态数据(比如,场景图片、场景音乐等)。对于ー个应用程序的不同实例,场景数据都是相同的。在云端服务器,场景数据是加密存储在数据库中。由数据库引擎提供相关的检索功能。其中检索功能是以编程实现。根据本发明的ー个具体实施方式
,检索过程是通过应用程序ID进行检索,云端服务器存储场景数据时会根据应用程序ID (AppID)来标识场景数据是属于哪个应用的,检索时根据AppID即可来获取对应的场景数据。应用程序开发者 将应用程序中的部分场景数据保存到云端服务器中,应用程序中不包含这部分场景数据,当应用程序需要使用这部分场景数据时,将在使用时向服务器获取。云端服务器的身份认证服务器可以是单独的服务器,也可以与数据库服务器合井。用户的授权信息包括用户是否拥有对场景数据的使用权限。应用程序向云端服务器发送的请求中包括但不限于用户信息(比如,包含但不限于用户的账号名,UID)、设备信息(比如,所使用的智能设备的名称、型号之类)、应用程序信息(比如,所使用的应用程序名称,版本等信息)。该请求要求云端服务器返回相应的场景数据。云端服务器收到应用程序发送的请求后,根据请求中所包含的用户信息,进行用户身份认证。如果用户是合法用户,则根据应用程序所发送的请求所要求查找的场景数据,检索相应的场景数据并查询用户的授权信息。如果用户拥有该场景数据的授权,则将加过密的场景数据发送给客户端的应用程序。如果用户是非法用户,则无法获取用户数据,从而保护应用程序所用的场景数据不被非法获得。应用程序接接收到场景数据后,应用程序中的解密模块,将对场景数据进行解密。应用程序根据用户信息,对场景数据进行二次加密处理,并将二次加密处理之后的场景数据的密文存储到本地设备中。所述解密模块,属于应用程序的一部分,用于采用与云端服务器的加密算法相同的加密算法对场景数据进行二次加密处理,而且保证加密密钥安全。二次加密处理采用的加密算法可以是对称加密算法,包括但不限于AES、DES、TDES等。也可以使用非対称加密算法,包括但不限于RSA、ECC。加密处理所使用的加密密钥可以使用如下方法生成
I、当应用程序对本地的场景信息数据进行二次加密时,将用户信息(比如,用户名、用户账号)发送给云端服务器。云端服务器根据用户信息生成ー个密钥并保存在云端服务器中。云端服务器该密钥将发送给客户端(即本地设备)的应用程序。客户端的应用程序利用这个密钥进行加密。客户端的应用程序不在本地设备中保存该密钥。当需要解密数据吋,应用程序需要向云端服务器发送请求,云端服务器将密钥返回给客户端,由客户端的应用程序进行解密。2、当应用程序对本地的场景信息数据进行二次加密时,将用户信息发送给云端服务器,云端服务器生成ー个密钥并保存在云端服务器中。云端服务器该密钥将发送给客户端(即本地设备)的应用程序。应用程序将云端服务器发送的密钥和本地的用户信息进行组合(例如,密钥+用户名称或其他信息)生成一个新的本地密钥。利用这个密钥对场景信息数据进行加密。客户端的应用程序所在的本地设备不保存该密钥。当需要解密数据时,应用程序需要向云端服务器发送请求。云端服务器将密钥返回给客户端的应用程序。应用程序利用加密时相同的规则,生成解密密钥,对场景信息数据进行解密。3、当应用程序对本地的场景信息数据进行二次加密时,应用程序根据用户信息,通过加密算法(例如,约定的对称加密算法或非対称加密算法)进行计算,得到本地加密密钥,然后应用程序利用得到的本地加密密钥对场景信息数据进行加密。当需要解密已加密的场景信息数据时,根据相同的加密算法,由应用程序计算出解密密钥,利用解密密钥对已加密的场景信息数据进行解密。4、云端服务器根据其中所存储的用户信息,为每个用户生成ー对公私密钥,由客户端(本地设备)保存公钥,由云端服务器保存私钥。当需要加密时,由客户端的应用程序再产生ー个随机密钥,用产生的随机密钥对场景信息数据进行加密,然后由客户端应用程序利用公钥对随机密钥进行加密生成密文密钥并保存到本地设备中。当需要解密时,应用程序将密文密钥发送给云端服务器,云端服务器利用其中所保存的该用户的私钥来解密出随机密钥,然后将解密出的随机密钥发送给客户端的应用程序,由应用程序根据随机密钥来解密。实施例I
參见图2、图3,使用发明所述方法,对运行于Android系统上的游戏关卡数据进行保护,防止关卡数据被非法共享。关卡数据是场景数据的一种表现形式,不同游戏或应用的场景数据是不一样的。本实例中的场景数据指的是关卡数据,包括关卡图片,关卡相关音乐及
文字等。图2表示关卡数据从云端服务器下载到本地,然后进行二次加密的过程。图3表示的是应用程序使用关卡数据的过程。本实施例中所述的应用程序为游戏程序A,所述的场景数据为游戏的关卡数据。应用程序的开发者将游戏中的关卡数据保存到云端服务器上。如图2所示,首先,应用程序(即游戏程序A)启动。 当游戏程序A运行中需要新的关卡数据时,游戏程序A向云端服务器发送用户账号信息。tヒ如,包括但不限于用户的账户名、用户WD。云端服务器接收游戏程序A向云端服务器发送的用户账号信息之后,云端服务器利用该用户账号信息对应用程序的用户身份进行身份认证。云端服务器将身份认证结果返回给应用程序。
应用程序判断用户身份认证結果。如果身份认证合法,则应用程序继续向云端服务器发送关卡数据请求,如果用户身份不合法,则游戏程序A提示用户无法验证用户身份,结束请求过程。对于合法用户,游戏程序A继续向云端服务器发送关卡数据请求,发送的请求数据中包括用户账户信息、游戏程序信息。根据本发明的ー个具体实施方式
,游戏信息包括游戏名称、游戏当前关卡或请求的新关卡数字。云端服务器根据用户账户信息和游戏程序信息在关卡数据库中进行检索。检索到关卡数据之后,云端服务器利用其存储的加密密钥将检索到的关卡数据加密。然后以密文形式将加密后的关卡数据发送给游戏程序A。游戏程序A收到加密后的关卡数据后,由游戏程序A中的本地解密模块将密文形式的关卡数据解密。同时判断本地解密模块能否正确解密关卡数据。如果不能正确解密关卡数据,则结束该过程。如果本地解密模块能正确解密关卡数据,则应用程序向云端服务器发送二次加密密钥请求,向云端服务器请求云端服务器中所保存的加密密钥。所述二次加密密钥请求中包括用户信息。云端服务器接收到二次加密密钥请求,根据其中所包含的用户信息,生成二次加密密钥。然后将生成的二次加密密钥发送给游戏程序A。游戏程序A在收到二次加密密钥后,对关卡数据进行二次加密处理,并保存在本地存储设备中。如图3所示,当游戏程序A需要使用关卡数据时,游戏程序A读取其本地存储的已经过二次加密的关卡数据。如果关卡数据尚未解密,则继续判断用户是否已在云端服务器中登录。如果用户尚未登录到云端服务器,则在应用程序中进行用户登录。用户登录过程中,应用程序向云端服务器发送用户身份认证请求。云端服务器接收用户身份认证请求,并对用户身份进行认证。认证成功之后,则应用程序的用户登录成功。应用程序的用户登录成功之后,应用程序向云端服务器发送获取解密密钥请求,请求获取解密密钥。根据本发明的ー个具体实施方式
,这里采用对称加密算法,加密密钥与解密密钥是相同的。根据本发明的ー个具体实施方式
,还可以采用非対称加密算法,其中的加密密钥与解密密钥是不同的。云端服务器接收解密密钥请求,检索该用户的解密密钥,然后将解密密钥发送给应用程序。应用程序判断本地解密模块解密关卡数据是否正确。如果不正确,则退出该程序。。根据本发明的ー个具体实施方式
,判断正确与否的方式是根据相关标识来判断的。例如,当前关卡是个数字,解密后的新关卡为该数字+1,验证解密后的关卡数据是否为此值,又比如,关卡之间有对应的序列号之类。如果正确地解密关卡数据,则应用程序在客户端的内存中对关卡数据进行解密。应用程序使用解密后的明文数据,开启新的关卡,游戏继续进行。当游戏程序A退出,或用户进入其他关卡,则当前关卡数据不再使用吋,将内存中的明文数据销毁,结束整个流程。实施例2 參见图4,本实施例假设应用程序为A。应用程序A为关卡游戏类应用程序,应用程序A有10个关卡,应用程序A中每个不同的关卡有不同的场景信息,假设场景数据分别为T1-T10。根据本发明的实施例,应用程序A中的场景数据Tl-TlO都通过加密保存在云端服务器,用户使用应用程序A吋,默认打开第一道关卡,此时应用程序A向云端服务器请求对应关卡的场景数据Tl。云端服务器根据请求,将加密的场景数据Tl发送给应用程序A,本地设备收到密文数据后进行解密,然后A将用户信息(比如用户名Userl、用户账号Accountl)发送给云端服务器,服务器根据用户信息生成密钥K并保存在云端服务器中。云端服务器将此密钥K发送给客户端的应用程序A,应用程序A利用密钥K进行对场景数据Tl进行二次加密,客户端并不保存密钥K。用户在使用应用程序A时,当需要解密场景数据时,应用程序A向云端服务器发送请求,云端服务器将密钥K返回给本地,应用程序A通过此密钥解密出场景数据,即可供用户使用,以后关卡也是通过此种方式解密。实施例3
參见图5,与上实施例相同,本实施例假设应用程序为A,应用程序A为关卡游戏类应用程序,应用程序A有10个关卡,应用程序A中每个不同的关卡有不同的场景信息,假设场景数据分别为Tl--TlO。根据本发明的实施例,应用程序A中的场景数据Tl-TlO都通过加密保存在云端服务器。用户使用应用程序A吋,默认打开第一道关卡。此时应用程序A向云端服务器请求对应关卡的场景数据Tl。云端服务器根据请求,将加密的场景数据Tl发送给应用程序A,本地设备收到密文数据后进行解密。然后应用程序A将用户信息(比如用户名Userl、用户账号Accountl)发送给云端服务器。云端服务器根据用户信息生成密钥K保存在云端服务器中。云端服务器将此密钥K发送给客户端的应用程序A。应用程序A将密钥K和本地的用户信息进行组合,比如密钥K加上用户名称例如User I,或者密钥K加上单个其他用户信息比如用户账号Account I,或者密钥K加上多个用户信息进行组合,生成一个新的本地密钥K2。应用程序A利用本地密钥K2对场景信息Tl进行二次加密。应用程序A所在的客户端设备并不保存本地密钥K2。当需要解密场景数据时,应用程序A向云端服务器发送请求,云端服务器将密钥K返回给客户端的应用程序A,应用程序A利用加密时相同的规则,即与生成密钥K2相同的密钥K加上用户信息的组合,生成一个密钥K3,此密钥作为解密密钥。通过密钥K3对场景数据信息进行解密。实施例4
參见图6,本实施例假设应用程序为A,应用程序A为关卡游戏类应用程序,应用程序A有10个关卡,应用程序A中每个不同的关卡有不同的场景信息,假设场景数据分别为Tl—TlOo根据本发明的实施例,应用程序A中的场景数据Tl-TlO都通过加密保存在云端服务器,用户使用应用程序A吋,默认打开第一道关卡,此时应用程序A向云端服务器请求对应关卡的场景数据Tl,云端服务器根据请求,将加密的场景数据Tl发送给应用程序A,本地设备收到密文数据后进行解密,然后应用程序A对本地场景数据Tl进行二次加密时,应用程序A根据用户信息比如用户名Userl,通过对称加密算法进行计算(比如对称加密算法为AES)得到本地加密密钥K。 然后应用程序A利用本地加密密钥K对本地场景数据进行二次加密。当需要解密已加密的场景信息数据时,根据相同的计算规则,即采用AES加密算法,计算方式与生成密钥K相同计算出解密密钥K2,利用解密密钥K2对已加密的场景信息数据进行解密,以供用户使用。当使用对称加密算法进行加密计算生成的密钥K与密钥K2是相同的。若使用非对称算法,则K与K2不同。实施例5
參见图7,本实施例假设应用程序为游戏类应用程序B。根据本发明的一个实施例,应用程序B中场景数据都已通过加密保存至云端服务器,云端服务器已根据请求将加密的场景数据发送给客户端应用程序B。二次加密时,应用程序B将用户信息例如用户名Userl、用户账号Accountl发送给云端服务器,云端服务器根据此用户信息为每个用户生成ー对公私密钥。云端服务器将公钥发送给客户端设备,假设此公钥名称为MKey,由本地客户端设备保存公钥MKey,私钥由云端服务器保存。当需要加密时,由客户端应用程序B再产生ー个随机密钥Key,此随机密钥可通过对称或非対称加密算法或其他加密方式计算生成。用Key对场景信息数据进行加密,然后由客户端应用程序B利用公钥MKey对随机密钥Key进行加密生成新的密文密钥Key2保存至本地设备中。当需要解密时,应用程序B将密文密钥Key2发送给云端服务器,云端服务器利用所保存的该用户的私钥来解密出随机密钥Key,然后将此随机密钥Key发送给客户端应用程序B,应用程序B根据接收到的随机密钥Key来对场景数据进行解密。另外,上述实施例只是以游戏程序为实例。除了游戏程序之外,阅读程序、音乐播放程序等都需要场景数据,本领域的技术人员完全可以利用本发明的思想实现这些程序。以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所做的任何修改、等同替换以及改进等,均应包含在本发明的保护范围之内。
权利要求
1.一种保护安卓应用程序中场景数据的方法,所述安卓应用程序保存在本地设备中,所述本地设备与远程的云端服务器进行通信,其特征在于,所述方法包括 场景数据经加密后保存在云端服务器中; 当所述安卓应用程序需要使用所述场景数据时,向云端服务器请求所述场景数据; 云端服务器根据所述安卓应用程序的请求,检索到所述场景数据,然后将经加密的所述场景数据以密文形式发送给所述安卓应用程序; 所述安卓应用程序接收到云端服务器发送的经加密的所述场景数据之后,对经加密的所述场景数据进行解密; 所述场景数据经解密后再由所述安卓应用程序进行二次加密处理; 经二次加密处理的所述场景数据以密文形式保存在所述本地设备中; 当所述安卓应用程序需要使用所述场景数据时,在所述本地设备的内存中对所述本地设备中已存储的经过二次加密处理的所述场景数据进行解密并使用解密后的所述场景数据; 当不再使用所述场景数据时,则删除经过解密后的所述场景数据。
2.根据权利要求I所述的方法,其特征在于,所述云端服务器在检索所述场景数据之前,对所述安卓应用程序的用户进行身份验证。
3.根据权利要求I所述的方法,其特征在于,所述场景数据包括所述安卓应用程序中需要使用的静态数据。
4.根据权利要求2所述的方法,其特征在干,在进行身份验证之后,云端服务器查询所述按照应用程序的用户的授权信息;如果所述用户拥有该场景数据的授权,才检索所述场景数据。
5.根据权利要求1-4所述的方法,其特征在于,二次加密处理采用的加密算法是对称加密算法或非対称加密算法。
6.根据权利要求I所述的方法,其特征在干,将用户信息发送给云端服务器,云端服务器根据所述用户信息生成二次加密密钥并保存在云端服务器中;云端服务器将所述二次加密密钥将发送给的所述安卓应用程序;所述安卓应用程序利用所述二次加密密钥进行二次加密处理。
7.根据权利要求I所述的方法,其特征在干,将用户信息发送给云端服务器,云端服务器根据所述用户信息生成二次加密密钥并保存在云端服务器中;云端服务器将所述二次加密密钥将发送给的所述安卓应用程序;所述安卓应用程序利用所述二次加密密钥和所述用户信息生成本地密钥,再利用本地密钥进行二次加密处理。
8.根据权利要求I所述的方法,其特征在于,所述安卓应用程序根据用户信息得到本地加密密钥,然后利用得到的本地加密密钥进行二次加密处理。
9.根据权利要求I所述的方法,其特征在于,云端服务器根据其中所存储的用户信息,为每个用户生成ー对公私密钥,由本地设备保存公钥,由云端服务器保存私钥; 当需要加密时,所述安卓应用程序再产生ー个随机密钥,用产生的随机密钥对所述场景数据进行加密,然后利用所述公钥对随机密钥进行加密并将生成的密文密钥保存到本地设备; 当需要解密时,所述安卓应用程序将密文密钥发送给云端服务器,云端服务器利用其中所保存的所述私钥来解密出所述随机密钥,然后将已解密的随机密钥发送给所述安卓应用程序,由所述安卓应用程序根据已解密的随机密钥来解密。
全文摘要
本发明提出了一种对应用程序的场景信息进行保护的方法。具体包括将应用程序的场景信息保存在云端服务器,应用程序中使用该场景信息时,向云端服务器请求场景数据,云端服务器根据用户请求,将加密的场景数据发送给应用程序,本地设备收到密文数据后进行解密,然后,根据用户信息或设备信息等因子,对数据进行二次加密,本地存储设备只保存二次加密后的密文数据,应用程序在运行中需要用到场景数据时,才对数据进行解密;应用程序不再使用该场景数据时,将明文销毁。数据加密时,与用户信息或设备信息进行绑定,破解者无法通过复制的方法共享应用程序场景信息,从而达到防止应用程序的场景信息被非法复制的目的。
文档编号H04L29/06GK102694794SQ20121013660
公开日2012年9月26日 申请日期2012年5月6日 优先权日2012年5月6日
发明者其他发明人请求不公开姓名, 韩勇 申请人:北京深思洛克软件技术股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1