著录项信息
专利名称 | 一种android应用程序防盗版的方法及系统 |
申请号 | CN201310426325.1 | 申请日期 | 2013-09-18 |
法律状态 | 授权 | 申报国家 | 中国 |
公开/公告日 | 2013-12-25 | 公开/公告号 | CN103473488A |
优先权 | 暂无 | 优先权号 | 暂无 |
主分类号 | G06F21/14 | IPC分类号 | G;0;6;F;2;1;/;1;4查看分类表>
|
申请人 | 浙江大学城市学院 | 申请人地址 | 浙江省杭州市拱墅区湖州街51号
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
权利人 | 浙江大学城市学院 | 当前权利人 | 浙江大学城市学院 |
发明人 | 霍梅梅;吴明晖;蔡建平;吴剑钟;孙霖;王云武 |
代理机构 | 杭州宇信知识产权代理事务所(普通合伙) | 代理人 | 张宇娟 |
摘要
本发明提出了一种android应用程序防盗版的方法及系统,包括将android应用程序程序分成两部分:关键程序和不完整的部分应用程序,两者结合才能正常运行。将两部分都上传至服务器,服务器对关键代码进行加密处理,用户下载了不完整的部分程序后,首次运行需向服务器申请关键程序。获得服务器认证后方可下载关键程序,然后在客户端解密关键程序并存储到安全空间,经判断为合法权限后方可加载关键程序,以正常运行应用程序。首次运行之后,关键程序存储在安全空间,每次运行无需再从服务器下载。本发明不增加开发者的工作量,能过有效的防止应用程序被逆向工程和盗版。
1.一种android应用程序防盗版的方法,其特性在于,包括如下步骤:
S10:将android应用程序拆分成两部分代码:代码一中加入一个桩类代码后编译成生成文件一;代码二编译生成文件二,上传所述两部分文件至服务器;
S20:客户端下载运行所述android应用程序的文件一,其中桩首先运行判断该客户端是否是第一次运行该应用程序,如果是则继续以下步骤,否则执行步骤S60;
S30:客户端向服务器申请认证和下载文件二,服务器对所述申请进行认证,认证通过则继续,否则终止程序运行;
S40:服务器对应用程序对应的文件二进行加密并发送给客户端;
S50:客户端所述应用程序文件一的桩解密文件二并将其存入到安全空间;
S60:客户端启动可加载内核模块程序判断应用程序桩是否有权限访问安全空间的文件二,如果判断通过,则加载文件二,应用程序运行,否则终止程序运行。
2.根据权利要求1所述的android应用程序防盗版的方法,其特征在于,所述代码二为应用程序的的启动代码或者核心算法,所述代码一为应用程序除代码二以外的其它代码。
3.根据权利要求2所述的android应用程序防盗版的方法,其特征在于,所述文件一为APK文件,文件二为JAR文件。
4.根据权利要求1所述的android应用程序防盗版的方法,其特征在于,所述安全空间是在客户端的应用程序存储空间内开辟的一块存储区域。
5.根据权利要求1至4中任一项所述的android应用程序防盗版的方法,其特征在于,所述步骤S60包括:可加载内核模块程序判断应用程序进程ID号是否与安全空间中对应的文件二提供的ID号一致,如果一致则加载运行,否则终止应用程序运行。
6.一种采用权利要求1所述方法的android应用程序防盗版系统,其特性在于,包括服务器端和客户端,其中所述服务器端包括:
存储模块:用于存储程序发布者上传的android应用程序的文件一和文件二;其中:所述文件一由android应用程序被拆分成两部分后的代码一加入一个桩类代码后编译生成,所述文件二由应用程序的另一部分代码二编译生成;
认证模块:对客户端的申请进行认证,认证通过则启动加密模块,否则终止程序运行;
加密模块:对文件二进行加密并将加密后的文件二发送给客户端;
所述客户端包括:
判断模块:判断下载的android应用程序的文件一是否是第一次在该客户端运行,如果是则向服务器端申请认证和下载文件二,否则启动可加载内核模块程序;
安全空间:设置于客户端的应用程序存储空间内的一块存储区域,只有获得授权的应用程序进程可以访问所述安全空间;
解密模块:对从服务器端收到的文件二进行解密并将其存入安全空间;
可加载内核模块:判断应用程序桩是否有权限访问安全空间的文件二,如果判断通过,则加载文件二,应用程序运行,否则终止程序运行。
7.根据权利要求6所述的android应用程序防盗版系统,其特征在于,所述代码二为应用程序的的启动代码或者核心算法,所述代码一为应用程序除代码二以外的其它代码。
8.根据权利要求7所述的android应用程序防盗版系统,其特征在于,所述文件一为APK文件,文件二为JAR文件。
9.根据权利要求6至8中的任一项所述的android应用程序防盗版系统,其特征在于,所述可加载内核模块用于判断应用程序进程ID号是否与安全空间中对应的文件二提供的ID号一致,如果一致则加载运行,否则终止应用程序运行。
一种android应用程序防盗版的方法及系统\n技术领域\n[0001] 本发明涉及移动终端技术领域,尤其涉及一种android应用程序防盗版的方法及系统。\n背景技术\n[0002] 随着移动互联网的飞速发展,移动终端操作系统已经形成ios与android两大主阵营。基于android操作系统的应用程序采用主流编程语言Java。Java程序编译后生成字节码,运行在虚拟机上。对于android系统,采用Java编写的应用程序经编译后运行在Dalvik VM上的DEX字节码,应用程序所有的字节码文件打包成APK文件安装到android系统。当前,Java编程语言工具并没有对Java字节码采取有效保护措施,同时Java字节码文件的结构本身特点使其易于被逆向工程,从而存在源码安全问题。\n[0003] 因此,在目前的市场上,android应用程序正面临严重的盗版问题,被盗版的应用程序可能被植入病毒、广告,还可能被二次打包以及篡改,这些都严重损害了应用程序的开发者以及消费者的权益。针对这一情况,移动互联网的各个产业链都在做一些努力,来保护android应用程序的安全。目前,普遍采用的加密技术手段有:代码混淆、加密、水印等,但采用这些技术手段都给开发者带来了一定的工作量,而且即使采用了这些技术,应用程序仍然可以被逆向。Google曾经有提供LVL的反盗版机制,但很快就被破解了。因此,目前android应用市场上的盗版行为仍然十分盛行。\n发明内容\n[0004] 为解决上述问题,本发明提出了一种android应用程序防盗版的方法及系统,该方法不增加开发者的工作量,能过有效的防止应用程序被逆向工程和盗版。\n[0005] 为实现上述目的,本发明的技术方案为:\n[0006] 一种android应用程序防盗版的方法,包括如下步骤:\n[0007] S10:将android应用程序拆分成两部分代码:代码一中加入一个桩类(Stub.java)代码后编译成生成文件一;代码二编译生成文件二,上传所述两部分文件至服务器;\n[0008] S20:客户端下载运行所述android应用程序的文件一,其中桩(Stub)首先运行判断该客户端是否是第一次运行该应用程序,如果是则继续以下步骤,否则执行步骤S60;\n[0009] S30:客户端向服务器申请认证和下载文件二,服务器对所述申请进行认证,认证通过则继续,否则终止程序运行;\n[0010] S40:服务器对应用程序对应的文件二进行加密并发送给客户端;\n[0011] S50:客户端所述应用程序文件一的桩(Stub)解密文件二并将其存入到安全空间;\n[0012] S60:客户端启动可加载内核模块(LKM)程序判断应用程序桩(Stub)是否有权限访问安全空间的文件二,如果判断通过,则加载文件二,应用程序运行,否则终止程序运行。\n[0013] 其中,所述代码二为应用程序的的启动代码或者核心算法,所述代码一为应用程序除代码二以外的其它代码。\n[0014] 其中,所述文件一为APK文件,文件二为JAR文件。\n[0015] 进一步的,所述安全空间是在客户端的应用程序存储空间内开辟的一块存储区域。\n[0016] 进一步的,所述步骤S60包括:可加载内核模块程序(LKM)判断应用程序进程ID号是否与安全空间中对应的文件二提供的ID号一致,如果一致则加载运行,否则终止应用程序运行。\n[0017] 此外,本发明还提供了一种采用上述方法的android应用程序防盗版系统,包括服务器端和客户端,其中所述服务器端包括:\n[0018] 存储模块:用于存储程序发布者上传的android应用程序的文件一和文件二;其中:所述文件一由android应用程序被拆分成两部分后的代码一加入一个桩类(Stub.java)代码后编译成生成,所述文件二由应用程序的另一部分代码二编译生成;\n[0019] 认证模块:对客户端的申请进行认证,认证通过则启动加密模块,否则终止程序运行;\n[0020] 加密模块:对文件二进行加密并将加密后的文件二发送给客户端;\n[0021] 所述客户端包括:\n[0022] 判断模块:判断下载的android应用程序的文件一是否是第一次在该客户端运行,如果是则向服务器端申请认证和下载文件二,否则启动可加载内核模块程序(LKM);\n[0023] 安全空间:设置于客户端的应用程序存储空间内的一块存储区域,只有获得授权的应用程序进程可以访问所述安全空间;\n[0024] 解密模块:对从服务器端收到的文件二进行解密并将其存入安全空间;\n[0025] 可加载内核模块(LKM):判断应用程序桩(Stub)是否有权限访问安全空间的文件二,如果判断通过,则加载文件二,应用程序运行,否则终止程序运行。\n[0026] 进一步的,所述代码二为应用程序的的启动代码或者核心算法,所述代码一为应用程序除代码二以外的其它代码。\n[0027] 进一步的,所述文件一为APK文件,文件二为JAR文件。\n[0028] 进一步的,所述可加载内核模块程序(LKM)用于判断应用程序进程ID号是否与安全空间中对应的文件二提供的ID号一致,如果一致则加载运行,否则终止应用程序运行。\n[0029] 本发明的技术构思是:程序开发者将自己开发的程序分成两部分,一部分为关键程序,一部分为不完整的部分应用程序,两者结合才能正常运行。将两部分都上传到android应用程序市场服务器上。应用程序市场服务器对关键代码进行加密处理,用户下载了不完整的部分程序后,首次运行需向服务器申请关键程序。获得服务器认证后方可下载关键程序,然后在客户端解密关键程序并存储到安全空间,经判断为合法权限后方可动态加载关键程序,从而可以正常运行应用程序。首次运行之后,关键程序存储在安全空间,每次运行不再需要从服务器下载。非法拷贝的不完整部分应用程序由于不能获得关键程序,将无法运行。\n[0030] 与现有技术相比,本发明至少具有以下优点:(1)相比于目前一些主要的Android应用软件商店提供的版权保护措施,该方案不仅能保护Android应用软件的版权,由于盗版拷贝缺少应用软件的关键程序部分,将不能逆向获得应用软件的源码,因此还能对Android应用软件的源代码起到很好的保护作用。(2)由于本发明方法通过只针对应用软件中的开发者提供的关键程序加密,而不是针对应用程序完整的APK加密,大大提高了加密和解密的执行效率。\n附图说明\n[0031] 图1是本发明的方法流程示意图。\n[0032] 图2是本发明实施例中的android应用程序配置图。\n[0033] 图3是本发明实施例中android应用程序防盗版系统服务器端原理框图。\n[0034] 图4是本发明实施例中android应用程序防盗版系统客户端原理框图。\n具体实施方式\n[0035] 为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。\n[0036] 如图1所示,一种android应用程序防盗版的方法,包括如下步骤:\n[0037] S10:将android应用程序拆分成两部分代码:代码一中加入一个桩类(Stub.java)代码后编译成生成文件一;代码二编译生成文件二,上传所述两部分文件至服务器;\n[0038] 如图2所示,在本实施例中,优选将android应用程序源码10拆分成以下两部分:文件二为应用程序的关键源码13,可以是应用程序的启动代码或者核心算法,这部分的代码量建议小一些,便于加密和传输,并将其编译成JAR文件14;文件一为应用程序的其它源码\n12,其中加入一个桩(Stub.java)类,编译生成APK文件12。桩的作用有三个,其一,android客户端启动应用程序运行时,桩负责向应用程序市场服务器申请认证和关键程序,其二,当服务器通过认证并把加密后的关键程序传输给客户端后,桩负责解密关键程序并存入安全空间,其三,运行时桩负责动态加载关键程序。\n[0039] S20:客户端下载运行所述android应用程序的APK文件,其中桩(Stub)首先运行判断该客户端是否是第一次运行该应用程序,如果是则继续以下步骤,否则执行步骤S60;\n[0040] S30:客户端向服务器申请认证和下载应用程序的JAR文件,服务器对所述申请进行认证,认证通过则继续,否则终止程序运行;\n[0041] S40:服务器对应用程序对应的JAR文件进行加密并发送给客户端;\n[0042] S50:客户端的应用程序APK文件的桩(Stub)解密JAR文件并将其存入到安全空间;\n所述安全空间是在客户端的应用程序存储空间内开辟的一块存储区域,只有获得授权的应用程序进程可以访问安全空间。\n[0043] S60:客户端启动可加载内核模块(LKM)程序判断应用程序桩(Stub)是否有权限访问安全空间的JAR文件;通过判断应用程序进程ID号是否与安全空间中对应的JAR文件提供的ID号一致来判断是否有权限,如果ID号一致则判断通过,加载应用程序的JAR文件,应用程序运行,否则终止程序运行。\n[0044] 其中,非法拷贝的应用程序APK文件,其桩(Stub)没有向服务器申请相应的认证权限,因此无法通过LKM模块判断,也就无法启动应用程序运行。\n[0045] 客户端首次运行该应用程序之后,应用程序的JAR文件存储在安全空间,以后每次运行,只需动态加载即可,不再需要向服务器申请下载。\n[0046] 同时,本发明还提供了一种采用上述方法的android应用程序防盗版系统,包括服务器端和客户端,\n[0047] 如图3所示,所述服务器端20包括:\n[0048] 存储模块21:用于存储程序发布者上传的android应用程序的APK文件和JAR文件;\n[0049] 认证模块22:对客户端的申请进行认证,认证通过则启动加密模块23,否则终止程序运行;\n[0050] 加密模块23:对JAR文件进行加密并将加密后的JAR文件发送给客户端。\n[0051] 如图4所示,所述客户端30包括:\n[0052] 判断模块34:判断下载的android应用程序的APK文件是否是第一次在该客户端运行,如果是则向服务器端申请认证和下载JAR文件,否则启动可加载内核模块程序(LKM)35;\n[0053] 安全空间32:设置于客户端的用户应用程序存储空间内的一块存储区域,只有获得授权的应用程序进程可以访问所述安全空间32;\n[0054] 解密模块33:对从服务器端收到的JAR文件进行解密并将其存入安全空间;\n[0055] 可加载内核模块(LKM)35:判断应用程序桩(Stub)是否有权限访问安全空间的JAR文件,如果判断通过,则加载JAR文件,应用程序运行,否则终止程序运行。\n[0056] 其中,可加载内核模块(LKM)35通过判断应用程序进程ID号是否与安全空间32中对应的JAR文件提供的ID号一致来判断是否有权限,如果ID号一致则判断通过,加载应用程序的JAR文件,应用程序运行,否则终止程序运行。\n[0057] 以上实施例仅用以说明本发明的技术方案而非限定,仅仅参照较佳实施例对本发明进行了详细说明。本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或等同替换,而不脱离本发明技术方案的精神和范围,均应涵盖在本发明的权利要求范围当中。
法律信息
- 2016-04-06
- 2014-03-12
实质审查的生效
IPC(主分类): G06F 21/14
专利申请号: 201310426325.1
申请日: 2013.09.18
- 2013-12-25
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 |
1
| |
2013-06-26
|
2013-04-02
| | |
2
| |
2013-07-17
|
2013-04-12
| | |
3
| |
2013-01-16
|
2012-09-28
| | |
4
| |
2013-08-21
|
2012-02-15
| | |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |