CN103473488A - 一种android应用程序防盗版的方法及系统 - Google Patents
一种android应用程序防盗版的方法及系统 Download PDFInfo
- Publication number
- CN103473488A CN103473488A CN2013104263251A CN201310426325A CN103473488A CN 103473488 A CN103473488 A CN 103473488A CN 2013104263251 A CN2013104263251 A CN 2013104263251A CN 201310426325 A CN201310426325 A CN 201310426325A CN 103473488 A CN103473488 A CN 103473488A
- Authority
- CN
- China
- Prior art keywords
- file
- application program
- code
- client
- program
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 31
- 238000013475 authorization Methods 0.000 claims description 4
- 238000000638 solvent extraction Methods 0.000 abstract 1
- 238000010586 diagram Methods 0.000 description 3
- 241000700605 Viruses Species 0.000 description 1
- 208000027418 Wounds and injury Diseases 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000006378 damage Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 239000012467 final product Substances 0.000 description 1
- 208000014674 injury Diseases 0.000 description 1
Images
Landscapes
- Storage Device Security (AREA)
Abstract
本发明提出了一种android应用程序防盗版的方法及系统,包括将android应用程序程序分成两部分:关键程序和不完整的部分应用程序,两者结合才能正常运行。将两部分都上传至服务器,服务器对关键代码进行加密处理,用户下载了不完整的部分程序后,首次运行需向服务器申请关键程序。获得服务器认证后方可下载关键程序,然后在客户端解密关键程序并存储到安全空间,经判断为合法权限后方可加载关键程序,以正常运行应用程序。首次运行之后,关键程序存储在安全空间,每次运行无需再从服务器下载。本发明不增加开发者的工作量,能过有效的防止应用程序被逆向工程和盗版。
Description
技术领域
本发明涉及移动终端技术领域,尤其涉及一种android应用程序防盗版的方法及系统。
背景技术
随着移动互联网的飞速发展,移动终端操作系统已经形成ios与android两大主阵营。基于android操作系统的应用程序采用主流编程语言Java。Java程序编译后生成字节码,运行在虚拟机上。对于android系统,采用Java编写的应用程序经编译后运行在Dalvik VM上的DEX字节码,应用程序所有的字节码文件打包成APK文件安装到android系统。当前,Java编程语言工具并没有对Java字节码采取有效保护措施,同时Java字节码文件的结构本身特点使其易于被逆向工程,从而存在源码安全问题。
因此,在目前的市场上,android应用程序正面临严重的盗版问题,被盗版的应用程序可能被植入病毒、广告,还可能被二次打包以及篡改,这些都严重损害了应用程序的开发者以及消费者的权益。针对这一情况,移动互联网的各个产业链都在做一些努力,来保护android应用程序的安全。目前,普遍采用的加密技术手段有:代码混淆、加密、水印等,但采用这些技术手段都给开发者带来了一定的工作量,而且即使采用了这些技术,应用程序仍然可以被逆向。Google曾经有提供LVL的反盗版机制,但很快就被破解了。因此,目前android应用市场上的盗版行为仍然十分盛行。
发明内容
为解决上述问题,本发明提出了一种android应用程序防盗版的方法及系统,该方法不增加开发者的工作量,能过有效的防止应用程序被逆向工程和盗版。
为实现上述目的,本发明的技术方案为:
一种android应用程序防盗版的方法,包括如下步骤:
S10:将android应用程序拆分成两部分代码:代码一中加入一个桩类(Stub.java)代码后编译成生成文件一;代码二编译生成文件二,上传所述两部分文件至服务器;
S20:客户端下载运行所述android应用程序的文件一,其中桩(Stub)首先运行判断该客户端是否是第一次运行该应用程序,如果是则继续以下步骤,否则执行步骤S60;
S30:客户端向服务器申请认证和下载文件二,服务器对所述申请进行认证,认证通过则继续,否则终止程序运行;
S40:服务器对应用程序对应的文件二进行加密并发送给客户端;
S50:客户端所述应用程序文件一的桩(Stub)解密文件二并将其存入到安全空间;
S60:客户端启动可加载内核模块(LKM)程序判断应用程序桩(Stub)是否有权限访问安全空间的文件二,如果判断通过,则加载文件二,应用程序运行,否则终止程序运行。
其中,所述代码二为应用程序的的启动代码或者核心算法,所述代码一为应用程序除代码二以外的其它代码。
其中,所述文件一为APK文件,文件二为JAR文件。
进一步的,所述安全空间是在客户端的应用程序存储空间内开辟的一块存储区域。
进一步的,所述步骤S60包括:可加载内核模块程序(LKM)判断应用程序进程ID号是否与安全空间中对应的文件二提供的ID号一致,如果一致则加载运行,否则终止应用程序运行。
此外,本发明还提供了一种采用上述方法的android应用程序防盗版系统,包括服务器端和客户端,其中所述服务器端包括:
存储模块:用于存储程序发布者上传的android应用程序的文件一和文件二;其中:所述文件一由android应用程序被拆分成两部分后的代码一加入一个桩类(Stub.java)代码后编译成生成,所述文件二由应用程序的另一部分代码二编译生成;
认证模块:对客户端的申请进行认证,认证通过则启动加密模块,否则终止程序运行;
加密模块:对文件二进行加密并将加密后的文件二发送给客户端;
所述客户端包括:
判断模块:判断下载的android应用程序的文件一是否是第一次在该客户端运行,如果是则向服务器端申请认证和下载文件二,否则启动可加载内核模块程序(LKM);
安全空间:设置于客户端的应用程序存储空间内的一块存储区域,只有获得授权的应用程序进程可以访问所述安全空间;
解密模块:对从服务器端收到的文件二进行解密并将其存入安全空间;
可加载内核模块(LKM):判断应用程序桩(Stub)是否有权限访问安全空间的文件二,如果判断通过,则加载文件二,应用程序运行,否则终止程序运行。
进一步的,所述代码二为应用程序的的启动代码或者核心算法,所述代码一为应用程序除代码二以外的其它代码。
进一步的,所述文件一为APK文件,文件二为JAR文件。
进一步的,所述可加载内核模块程序(LKM)用于判断应用程序进程ID号是否与安全空间中对应的文件二提供的ID号一致,如果一致则加载运行,否则终止应用程序运行。
本发明的技术构思是:程序开发者将自己开发的程序分成两部分,一部分为关键程序,一部分为不完整的部分应用程序,两者结合才能正常运行。将两部分都上传到android应用程序市场服务器上。应用程序市场服务器对关键代码进行加密处理,用户下载了不完整的部分程序后,首次运行需向服务器申请关键程序。获得服务器认证后方可下载关键程序,然后在客户端解密关键程序并存储到安全空间,经判断为合法权限后方可动态加载关键程序,从而可以正常运行应用程序。首次运行之后,关键程序存储在安全空间,每次运行不再需要从服务器下载。非法拷贝的不完整部分应用程序由于不能获得关键程序,将无法运行。
与现有技术相比,本发明至少具有以下优点:(1)相比于目前一些主要的Android应用软件商店提供的版权保护措施,该方案不仅能保护Android应用软件的版权,由于盗版拷贝缺少应用软件的关键程序部分,将不能逆向获得应用软件的源码,因此还能对Android应用软件的源代码起到很好的保护作用。(2)由于本发明方法通过只针对应用软件中的开发者提供的关键程序加密,而不是针对应用程序完整的APK加密,大大提高了加密和解密的执行效率。
附图说明
图1是本发明的方法流程示意图。
图2是本发明实施例中的android应用程序配置图。
图3是本发明实施例中android应用程序防盗版系统服务器端原理框图。
图4是本发明实施例中android应用程序防盗版系统客户端原理框图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
如图1所示,一种android应用程序防盗版的方法,包括如下步骤:
S10:将android应用程序拆分成两部分代码:代码一中加入一个桩类(Stub.java)代码后编译成生成文件一;代码二编译生成文件二,上传所述两部分文件至服务器;
如图2所示,在本实施例中,优选将android应用程序源码10拆分成以下两部分:文件二为应用程序的关键源码13,可以是应用程序的启动代码或者核心算法,这部分的代码量建议小一些,便于加密和传输,并将其编译成JAR文件14;文件一为应用程序的其它源码12,其中加入一个桩(Stub.java)类,编译生成APK文件12。桩的作用有三个,其一,android客户端启动应用程序运行时,桩负责向应用程序市场服务器申请认证和关键程序,其二,当服务器通过认证并把加密后的关键程序传输给客户端后,桩负责解密关键程序并存入安全空间,其三,运行时桩负责动态加载关键程序。
S20:客户端下载运行所述android应用程序的APK文件,其中桩(Stub)首先运行判断该客户端是否是第一次运行该应用程序,如果是则继续以下步骤,否则执行步骤S60;
S30:客户端向服务器申请认证和下载应用程序的JAR文件,服务器对所述申请进行认证,认证通过则继续,否则终止程序运行;
S40:服务器对应用程序对应的JAR文件进行加密并发送给客户端;
S50:客户端的应用程序APK文件的桩(Stub)解密JAR文件并将其存入到安全空间;所述安全空间是在客户端的应用程序存储空间内开辟的一块存储区域,只有获得授权的应用程序进程可以访问安全空间。
S60:客户端启动可加载内核模块(LKM)程序判断应用程序桩(Stub)是否有权限访问安全空间的JAR文件;通过判断应用程序进程ID号是否与安全空间中对应的JAR文件提供的ID号一致来判断是否有权限,如果ID号一致则判断通过,加载应用程序的JAR文件,应用程序运行,否则终止程序运行。
其中,非法拷贝的应用程序APK文件,其桩(Stub)没有向服务器申请相应的认证权限,因此无法通过LKM模块判断,也就无法启动应用程序运行。
客户端首次运行该应用程序之后,应用程序的JAR文件存储在安全空间,以后每次运行,只需动态加载即可,不再需要向服务器申请下载。
同时,本发明还提供了一种采用上述方法的android应用程序防盗版系统,包括服务器端和客户端,
如图3所示,所述服务器端20包括:
存储模块21:用于存储程序发布者上传的android应用程序的APK文件和JAR文件;
认证模块22:对客户端的申请进行认证,认证通过则启动加密模块23,否则终止程序运行;
加密模块23:对JAR文件进行加密并将加密后的JAR文件发送给客户端。
如图4所示,所述客户端30包括:
判断模块34:判断下载的android应用程序的APK文件是否是第一次在该客户端运行,如果是则向服务器端申请认证和下载JAR文件,否则启动可加载内核模块程序(LKM)35;
安全空间32:设置于客户端的用户应用程序存储空间内的一块存储区域,只有获得授权的应用程序进程可以访问所述安全空间32;
解密模块33:对从服务器端收到的JAR文件进行解密并将其存入安全空间;
可加载内核模块(LKM)35:判断应用程序桩(Stub)是否有权限访问安全空间的JAR文件,如果判断通过,则加载JAR文件,应用程序运行,否则终止程序运行。
其中,可加载内核模块(LKM)35通过判断应用程序进程ID号是否与安全空间32中对应的JAR文件提供的ID号一致来判断是否有权限,如果ID号一致则判断通过,加载应用程序的JAR文件,应用程序运行,否则终止程序运行。
以上实施例仅用以说明本发明的技术方案而非限定,仅仅参照较佳实施例对本发明进行了详细说明。本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或等同替换,而不脱离本发明技术方案的精神和范围,均应涵盖在本发明的权利要求范围当中。
Claims (9)
1.一种android应用程序防盗版的方法,其特性在于,包括如下步骤:
S10:将android应用程序拆分成两部分代码:代码一中加入一个桩类(Stub.java)代码后编译成生成文件一;代码二编译生成文件二,上传所述两部分文件至服务器;
S20:客户端下载运行所述android应用程序的文件一,其中桩(Stub)首先运行判断该客户端是否是第一次运行该应用程序,如果是则继续以下步骤,否则执行步骤S60;
S30:客户端向服务器申请认证和下载文件二,服务器对所述申请进行认证,认证通过则继续,否则终止程序运行;
S40:服务器对应用程序对应的文件二进行加密并发送给客户端;
S50:客户端所述应用程序文件一的桩(Stub)解密文件二并将其存入到安全空间;
S60:客户端启动可加载内核模块(LKM)程序判断应用程序桩(Stub)是否有权限访问安全空间的文件二,如果判断通过,则加载文件二,应用程序运行,否则终止程序运行。
2.根据权利要求1所述的android应用程序防盗版的方法,其特征在于,所述代码二为应用程序的的启动代码或者核心算法,所述代码一为应用程序除代码二以外的其它代码。
3.根据权利要求2所述的android应用程序防盗版的方法,其特征在于,所述文件一为APK文件,文件二为JAR文件。
4.根据权利要求1所述的android应用程序防盗版的方法,其特征在于,所述安全空间是在客户端的应用程序存储空间内开辟的一块存储区域。
5.根据权利要求1至4中任一项所述的android应用程序防盗版的方法,其特征在于,所述步骤S60包括:可加载内核模块程序(LKM)判断应用程序进程ID号是否与安全空间中对应的文件二提供的ID号一致,如果一致则加载运行,否则终止应用程序运行。
6.一种采用权利要求1所述方法的android应用程序防盗版系统,其特性在于,包括服务器端和客户端,其中所述服务器端包括:
存储模块:用于存储程序发布者上传的android应用程序的文件一和文件二;其中:所述文件一由android应用程序被拆分成两部分后的代码一加入一个桩类(Stub.java)代码后编译成生成,所述文件二由应用程序的另一部分代码二编译生成;
认证模块:对客户端的申请进行认证,认证通过则启动加密模块,否则终止程序运行;
加密模块:对文件二进行加密并将加密后的文件二发送给客户端;
所述客户端包括:
判断模块:判断下载的android应用程序的文件一是否是第一次在该客户端运行,如果是则向服务器端申请认证和下载文件二,否则启动可加载内核模块程序(LKM);
安全空间:设置于客户端的应用程序存储空间内的一块存储区域,只有获得授权的应用程序进程可以访问所述安全空间;
解密模块:对从服务器端收到的文件二进行解密并将其存入安全空间;
可加载内核模块(LKM):判断应用程序桩(Stub)是否有权限访问安全空间的文件二,如果判断通过,则加载文件二,应用程序运行,否则终止程序运行。
7.根据权利要求6所述的android应用程序防盗版系统,其特征在于,所述代码二为应用程序的的启动代码或者核心算法,所述代码一为应用程序除代码二以外的其它代码。
8.根据权利要求7所述的android应用程序防盗版系统,其特征在于,所述文件一为APK文件,文件二为JAR文件。
9.根据权利要求6至8中的任一项所述的android应用程序防盗版系统,其特征在于,所述可加载内核模块(LKM)用于判断应用程序进程ID号是否与安全空间中对应的文件二提供的ID号一致,如果一致则加载运行,否则终止应用程序运行。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310426325.1A CN103473488B (zh) | 2013-09-18 | 2013-09-18 | 一种android应用程序防盗版的方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310426325.1A CN103473488B (zh) | 2013-09-18 | 2013-09-18 | 一种android应用程序防盗版的方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103473488A true CN103473488A (zh) | 2013-12-25 |
CN103473488B CN103473488B (zh) | 2016-04-06 |
Family
ID=49798335
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310426325.1A Expired - Fee Related CN103473488B (zh) | 2013-09-18 | 2013-09-18 | 一种android应用程序防盗版的方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103473488B (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104239757A (zh) * | 2014-09-30 | 2014-12-24 | 北京奇虎科技有限公司 | 应用程序防止逆向的方法及装置、运行方法及终端 |
CN104899481A (zh) * | 2015-06-17 | 2015-09-09 | 上海斐讯数据通信技术有限公司 | 防止应用程序反编译的系统及其方法 |
CN109211239A (zh) * | 2018-08-30 | 2019-01-15 | 中体彩科技发展有限公司 | 一种关联产品定位系统及其使用方法 |
CN112083970A (zh) * | 2020-09-10 | 2020-12-15 | 南京烽火星空通信发展有限公司 | 基于动态加载技术的移动终端数字取证方法和设备 |
CN112084490A (zh) * | 2020-09-09 | 2020-12-15 | 南京烽火星空通信发展有限公司 | 一种基于Linux内核调用实现软件源代码的保护方法及系统 |
CN115859337A (zh) * | 2023-02-14 | 2023-03-28 | 杭州大晚成信息科技有限公司 | 基于内核的防止设备破解方法、设备、服务器及介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20120113091A1 (en) * | 2010-10-29 | 2012-05-10 | Joel Solomon Isaacson | Remote Graphics |
CN102882871A (zh) * | 2012-09-28 | 2013-01-16 | 深圳市赛蓝科技有限公司 | 一种移动终端usb虚拟化映射方法 |
CN103177210A (zh) * | 2013-04-02 | 2013-06-26 | 中国人民大学 | 一种在Android中植入动态污点分析模块的方法 |
CN103207969A (zh) * | 2013-04-12 | 2013-07-17 | 百度在线网络技术(北京)有限公司 | 检测Android恶意软件的装置以及方法 |
CN103259806A (zh) * | 2012-02-15 | 2013-08-21 | 深圳市证通电子股份有限公司 | Android智能终端应用程序安全检测的方法及系统 |
-
2013
- 2013-09-18 CN CN201310426325.1A patent/CN103473488B/zh not_active Expired - Fee Related
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20120113091A1 (en) * | 2010-10-29 | 2012-05-10 | Joel Solomon Isaacson | Remote Graphics |
CN103259806A (zh) * | 2012-02-15 | 2013-08-21 | 深圳市证通电子股份有限公司 | Android智能终端应用程序安全检测的方法及系统 |
CN102882871A (zh) * | 2012-09-28 | 2013-01-16 | 深圳市赛蓝科技有限公司 | 一种移动终端usb虚拟化映射方法 |
CN103177210A (zh) * | 2013-04-02 | 2013-06-26 | 中国人民大学 | 一种在Android中植入动态污点分析模块的方法 |
CN103207969A (zh) * | 2013-04-12 | 2013-07-17 | 百度在线网络技术(北京)有限公司 | 检测Android恶意软件的装置以及方法 |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104239757A (zh) * | 2014-09-30 | 2014-12-24 | 北京奇虎科技有限公司 | 应用程序防止逆向的方法及装置、运行方法及终端 |
CN104239757B (zh) * | 2014-09-30 | 2017-04-19 | 北京奇虎科技有限公司 | 应用程序防止逆向的方法及装置、运行方法及终端 |
CN104899481A (zh) * | 2015-06-17 | 2015-09-09 | 上海斐讯数据通信技术有限公司 | 防止应用程序反编译的系统及其方法 |
CN109211239A (zh) * | 2018-08-30 | 2019-01-15 | 中体彩科技发展有限公司 | 一种关联产品定位系统及其使用方法 |
CN112084490A (zh) * | 2020-09-09 | 2020-12-15 | 南京烽火星空通信发展有限公司 | 一种基于Linux内核调用实现软件源代码的保护方法及系统 |
CN112083970A (zh) * | 2020-09-10 | 2020-12-15 | 南京烽火星空通信发展有限公司 | 基于动态加载技术的移动终端数字取证方法和设备 |
CN115859337A (zh) * | 2023-02-14 | 2023-03-28 | 杭州大晚成信息科技有限公司 | 基于内核的防止设备破解方法、设备、服务器及介质 |
Also Published As
Publication number | Publication date |
---|---|
CN103473488B (zh) | 2016-04-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101471589B1 (ko) | 공통중간언어 기반 프로그램을 위한 보안 제공 방법 | |
CN103473488B (zh) | 一种android应用程序防盗版的方法及系统 | |
KR101391982B1 (ko) | 안드로이드 어플리케이션의 디컴파일 방지를 위한 암호화 방법 | |
US20210349712A1 (en) | Secure application distribution systems and methods | |
CN104318135B (zh) | 一种基于可信执行环境的Java代码安全动态载入方法 | |
CN101872404B (zh) | 一种保护Java软件程序的方法 | |
CN102087605A (zh) | 一种基于android平台应用安装控制方法及系统 | |
KR101284676B1 (ko) | 암호화 기반 사용자 인증 및 안드로이드 앱 불법복제 방지시스템 및 그 방법 | |
CN101957903A (zh) | 一种保护类文件的方法和装置 | |
CN104298932A (zh) | 一种so文件的调用方法及装置 | |
CN104239757A (zh) | 应用程序防止逆向的方法及装置、运行方法及终端 | |
WO2015192637A1 (zh) | 软件安装包的加固保护方法和装置 | |
CN104573490A (zh) | Android平台上已安装软件保护方法 | |
CN102576391A (zh) | 嵌入在shell代码中的软件许可 | |
CN112613037B (zh) | 一种代码校验方法及装置 | |
Gora et al. | A flexible design flow for software IP binding in FPGA | |
EP2460068A1 (en) | System and method for limiting execution of software to authorized users | |
WO2019149797A1 (en) | Enabling an encrypted software module in a container file | |
CN107257282B (zh) | 一种基于rc4算法的代码全包加密方法 | |
KR20170044850A (ko) | 안드로이드 어플리케이션 동적 로딩 방법 | |
KR20170022023A (ko) | 프로그램 실행 코드를 난독화하기 위한 장치 및 방법, 난독화된 프로그램 실행 코드를 복구하여 실행하기 위한 장치 및 방법 | |
CN112733094A (zh) | 一种Java应用程序的安全保护方法 | |
KR101667774B1 (ko) | 스크립트 프로그램을 위한 보안 제공 장치 및 방법 | |
Bahaa-Eldin et al. | A comprehensive software copy protection and digital rights management platform | |
CN102855439A (zh) | 一种执行文件自校验方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20160406 |
|
CF01 | Termination of patent right due to non-payment of annual fee |