公开/公告号CN105574371A
专利类型发明专利
公开/公告日2016-05-11
原文格式PDF
申请/专利权人 中国地质大学(武汉);
申请/专利号CN201510926243.2
申请日2015-12-14
分类号G06F21/16(20130101);G06F21/14(20130101);
代理机构42102 湖北武汉永嘉专利代理有限公司;
代理人许美红
地址 430074 湖北省武汉市洪山区鲁磨路388号
入库时间 2023-12-18 15:12:16
法律状态公告日
法律状态信息
法律状态
2018-11-16
授权
授权
2016-06-08
实质审查的生效 IPC(主分类):G06F21/16 申请日:20151214
实质审查的生效
2016-05-11
公开
公开
技术领域
本发明涉及移动互联网安全,与信息隐藏和软件保护领域相关,尤其一种涉及安卓系统下基于文本水印的的信息隐藏与软件保护方法。
背景技术
Android系统的APP格式为APK,APK是类似SymbianSis或Sisx的文件格式。通过将APK文件直接传到Android模拟器或Android手机中执行即可安装。apk文件和sis一样,把androidsdk编译的工程打包成一个安装程序文件,格式为apk。APK文件其实是zip格式,但后缀名被修改为apk,通过Google公司的反编译软件apktool反编译后,可以看到AndroidManifest.xml文件,Dex是DalvikVMexecutes的简称,即AndroidDalvik执行程序。
利用APP进行信息隐藏目前是一个崭新的课题,例如,用户可以在APP中隐藏某些信息,然后提交给应用商店,其他用户可以下载该应用,然后恢复出APP中隐藏的信息。这种隐藏通信可以实现一对多(海量)的通信方式,且十分隐秘。另外,通过信息隐藏的基本技术,还可以进行安卓APP应用软件的版权保护。通常APP的软件保护方法包括加密、加壳、反逆向以及反编译等,但这些方法速度慢,操作复杂,容易被攻破。
发明内容
本发明的发明目的在于,提供一种操作简单,不易被发现的信息隐藏方法,实现隐秘通信、版权保护以及恶意软件来源检测和监视。
为达到上述目的,本发明提供一种基于文本水印的安卓应用程序信息隐
藏方法,包括以下步骤:
S1、将需要隐藏的信息M进行加密处理,并按照规定格式保存到数组B[1,...,N-1]中,得到密文数组,其中N为整数;
S2、分析出AndroidManifest.xml文件中可以利用的位置,按照规定的格式将密文数组隐藏到相应位置中,并生成APK文件;
S3、从APK文件中提取AndroidManifest.xml文件,并从AndroidManifest.xml文件中解密隐藏的信息M。
本发明所述的信息隐藏方法中,步骤S2具体包括以下步骤:
S2.1、扫描AndroidManifest.xml文件,直到扫描到符合隐藏条件的语句为止;在符合隐藏要求的AndroidManifest.xml文件语句后,根据当前语句特征,按照规定格式将密文数组隐藏到当前语句的相应位置,隐藏完成后继续向文件后方扫描,以此类推;
S2.2、完成密文数组的隐藏后,生成新的AndroidManifest.xml文件,与DEX文件打包生成APK文件。
步骤S3具体包括以下步骤:
S3.1、从APK文件中提取AndroidManifes.xml文件;
S3.2、依次从头扫描AndroidManifest.xml文件中符合隐藏特征的语句,并从中逐单位提取密文数组中的值,形成密文C;
S3.3、将密文C解密,得到隐藏的信息M,完成信息提取。
本发明所述的信息隐藏方法中,步骤S1中将需要隐藏的信息M进行加密处理,具体包括:将需要隐藏的信息M加密,得到密文C,并将密文C转化为长度为N的二进制信息,N为整数。
本发明所述的信息隐藏方法中,AndroidManifest.xml文件中具备隐藏信息特征的字段包括:<application></application>结构中具备隐藏信息特征的字段;</>结构中具备隐藏信息特征的字段。
本发明所述的信息隐藏方法中,步骤S2“按照规定的格式将密文数组隐藏到相应位置中”具体为:选取一个随机数T,且0<T<10,需要隐藏的信息为B[i],i为整数,若B[i]为0则选取T为偶数,若B[i]为1则选取T为奇数,并将B[i]信息隐藏在文本文件中:
1)若将信息隐藏在<application></application>结构中,则在<application></application>结构的结尾后方加上B[i]*K个空<application></application>结构,K为整数;
2)若将信息隐藏在</activity>结构中,则在</activity>结构的结尾后方加上<activity>android:name="com.number.T"</activity>结构;
3)若将信息隐藏在</>结构中,则在</>结构的结尾后方加上注释符//和B[i]*K个“*”字符,K为整数。
本发明所述的信息隐藏方法中,步骤S1中按照规定的单位进行编号,具体包括:以比特为单位,或以字节为单位,或以双字节为单位进行编号。
本发明所述的信息隐藏方法中,对隐藏的信息M进行加密方式具体包括:古典密码体制、对称密钥密码体制或者非对称钥密码体制。
本发明还提供一种安卓系统下基于文本水印的隐秘通信方法,包括以下步骤:
(1)发送方利用上述信息隐藏方法,将待传递的信息隐藏到AndroidManifest.xml文件的相应位置中,并生成APK文件;
(2)发送方将APK文件提交到某个网上应用商店;
(3)接收方从该网上应用商店下载APK文件;
(4)接收方从APK文件中提取出AndroidManifest.xml文件;
(5)接收方从AndroidManifest.xml文件中提取出隐藏信息。
本发明还提供一种安卓系统下基于文本水印的版权保护方法,其特征在于,包括以下步骤:
(1)开发方利用上述信息隐藏方法将版权保护信息隐藏到AndroidManifest.xml文件的相应位置中,并生成APK文件;
(2)开发方将APK文件提交到网上应用商店;
(3)软件使用方从该网上应用商店下载APK文件;
(4)软件使用方从APK文件中提取出AndroidManifest.xml文件;
(5)软件使用方从AndroidManifest.xml文件中提取隐藏的版权保护信息,并检验版权信息是否真实有效,从而确定是否为重打包的盗版APK文件。
本发明还提供一种安卓系统下基于文本水印的恶意软件来源检测和追踪方法,其特征在于,该方法具体包括以下步骤:
(1)网上应用商店从上传的APK文件中分解出AndroidManifest.xml文件;
(2)网上应用商店利用上述信息隐藏方法将APK文件上传者的身份标识信息和/或该网上应用商店的标识信息隐藏到AndroidManifest.xml文件的相应位置中,并重新生成APK文件并再该网上应用商店中发布以供他人下载;
(3)在病毒检测机构检测到该APK文件为恶意软件时,从该APK文件中提取出AndroidManifest.xml文件,并从AndroidManifest.xml文件中提取出隐藏的APK文件上传者的身份标识信息,从而确定该恶意软件的制作者。
本发明的有益技术效果:本发明利用信息隐藏技术将需要隐藏的信息嵌入到APP中的XML文本文件中,与APP直接交付,且不影响APP的运行,使软件保护具有更好的性能,如发布的APK文件总体大小不变,比加密加壳等保护方式的APK文件大小小,软件下载的延迟少,以及更好的用户体验,启动APK文件时比起加密加壳等软件保护方式的等待时间更短。此外,通过本发明的信息隐藏方法可以实现隐秘通信、版权保护以及恶意软件来源检测和监视。
附图说明
下面将结合附图及实施例对本发明作进一步说明,附图中:
图1是本发明实施例基于文本水印的安卓应用程序信息隐藏方法流程图;
图2是图1中步骤S2的具体流程图;
图3是图1中步骤S3的具体流程图;
图4是本发明实施例安卓系统下基于文本水印的隐秘通信方法流程图;
图5是本发明实施例安卓系统下基于文本水印的版权保护方法流程图;
图6是本发明实施例安卓系统下基于文本水印的恶意软件来源检测和追踪方法流程图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
本发明实施例一种安卓系统下基于文本水印的安卓应用程序保护方法,如图1所示,包括以下步骤:
S1、将需要隐藏的信息M进行加密处理,并按照规定格式保存到数组B[1,...,N-1],N为整数;
S2、分析出AndroidManifest.xml文件中可以利用的位置,按照规定的格式密文(即保存了密文的数组)隐藏到相应位置中,并生成APK文件;
S3、从APK文件中提取AndroidManifest.xml文件,并从AndroidManifest.xml文件中解密隐藏的信息M。
本发明的一个实施例中,在步骤S1中,将需要隐藏的信息M进行加密,并对加密后的信息转化为二进制数,例如:当进行信息隐藏时,将需要隐藏的有意义的明文信息M1,例如隐藏文本文件或一张图片,使用某种加密方式如流密码RC4加密为密文信息C1,并将信息转化为二进制数;或当信息隐藏用于软件保护时,将软件的保护信息,例如:包含软件版权信息、软件密钥、开发者信息的明文信息M2,使用流密码RC4加密为密文信息C2,并将信息转化为二进制数;转化完成后,将得出的二进制数,例如:11010100,并计算其长度为N=8,依比特单位存入数组B[i]中,存入结果为:
B[0]=1;
B[1]=1;
B[2]=0;
B[3]=1;
B[4]=0;
B[5]=1;
B[6]=0;
B[7]=0;
由此完成隐藏信息M的处理。
本发明的一个实施例中,如图2所示,上述步骤S2具体包括以下步骤:
S2.1、从头扫描AndroidManifest.xml文件,直到扫描到符合隐藏条件的语句为止,在符合隐藏要求的AndroidManifest.xml文件语句后,根据当前语句特征,按照规定格式将密文隐藏到当前语句的相应位置,隐藏完成后继续向文件后方扫描,以此类推。
具体操作例如,从AndroidManifest.xml文件开头进行字段的扫描,第一次扫描到符合隐藏条件的字段,例如:扫描到存在</>字段后,判断其为符合隐藏条件的字段,则在</>字段后按照</>对应的隐藏方法添加隐藏信息,具体操作例如,扫描到AndroidManifest.xml文件中符合隐藏条件的语句</>后,若此时要隐藏的信息为B[0]=1时,在</>字段后方添加注释//和T1个字符*,其中T1为奇数,且0<T1<10;若此时要隐藏的信息为B[2]=0时,在</>字段后方添加注释//和T3个字符“*”,其中T3为偶数,且0<T3<10。完成一个比特位的隐藏后,从文本文件此时隐藏完成的位置开始继续向下扫描,直至找到下一个符合隐藏条件的语句进行信息的隐藏,以此类推,由此完成信息的隐藏。
以下举例步骤S1实例中的信息隐藏,若需要隐藏的信息为:11010100,信息隐藏具体操作如下,从AndroidManifest.xml文件头部开始扫描,直至扫描到符合隐藏条件的语句:
1)第一次扫描到符合隐藏条件字段,为/>字段:
B[0]=1,取奇数T=5,插入信息:
//*****
2)第二次扫描到符合隐藏条件字段,为</application>字段:
B[1]=1,取奇数T=3,插入信息:
<application></application>
<application></application>
<application></application>
3)第三次扫描到符合隐藏条件字段,为</activity>字段:
B[2]=0,取偶数T=4,插入信息:
<activity>android:name="com.number.4"</activity>
4)第四次扫描到符合隐藏条件字段,为</activity>字段:
B[3]=1,取奇数T=1,插入信息:
<activity>android:name="com.number.1"</activity>
5)第五次扫描到符合隐藏条件字段,为</application>字段:
B[4]=0,取偶数T=6,插入信息:
<application></application>
<application></application>
<application></application>
<application></application>
<application></application>
<application></application>
6)第六次扫描到符合隐藏条件字段,为</>字段:
B[5]=1,取奇数T=7,插入信息:
//*******
7)第七次扫描到符合隐藏条件字段,为</activity>字段:
B[6]=0,取偶数T=4,插入信息:
<activity>android:name="com.number.4"</activity>
8)第八次扫描符合隐藏条件字段,为</activity>字段:
B[7]=0,取偶数T=8,插入信息:
<activity>android:name="com.number.8"</activity>
由此完成信息11010100的隐藏。
经过分析,AndroidManifest.xml文件中符合隐藏条件的区域包括:
1.<application></application>结构中:
1)</application>:<application></application>结构的结尾,表示一个application结构的完结,也表示可以作为另一个application结构的开始,则其后的区域符合隐藏条件;
2)</activity>:<activity></activity>结构的结尾,表示一个activity结构的完结,也表示可以作为另一个activity结构的开始,则其后的区域符合隐藏条件;
2.</>结构的结尾/>,表示一个</>结构的完结,也表示可以作为另一个</>结构开始,则其后的区域符合隐藏条件;
经过分析,AndroidManifest.xml文件中与符合隐藏条件的区域对应的隐藏方法包括:
1.<application></application>结构中:
1)</application>:<application></application>结构的结尾,隐藏方法为,选取一个随机数T,T为整数且0<T<10,需要隐藏的信息为B[i],若B[i]为0则选取T为偶数,若B[i]为1则选取T为奇数,将B[i]信息隐藏在文本文件的方法为,在<application></application>结构的结尾后方加上B[i]*K个空<application></application>结构;
2)</activity>:<activity></activity>结构的结尾,隐藏方法为,选取一个随机数T,T为整数且0<T<10,需要隐藏的信息为B[i],若B[i]为0则选取T为偶数,若B[i]为1则选取T为奇数,将B[i]信息隐藏在文本文件的方法为,在<activity></activity>结构的结尾后方加上<activity>android:name="com.number.T"</activity>结构;
2.</>结构的结尾/>,隐藏方法为,选取一个随机数T,T为整数且0<T<10,需要隐藏的信息为B[i],若B[i]为0则选取T为偶数,若B[i]为1则选取T为奇数,将B[i]信息隐藏在文本文件的方法为,在</>结构的结尾后方加上注释符//和B[i]*K个“*”字符。
S2.2、逐比特完成密文11010100的隐藏后,保存生成新的AndroidManifest.xml文件,打包生成APK文件,完成对信息的隐藏处理。
本发明的一个实施例中,如图3所示,步骤S3具体包括以下步骤:
S3.1、信息提取时,通过反编译软件apktool反编译出AndroidManifest.xml文件;
S3.2、依次从头扫描AndroidManifest.xml文件中符合隐藏特征的语句,并从中逐单位提取B[i]中的值,具体操作例如:
1)第一次扫描到符合隐藏特征的语句,发现//字段,解析//后方的*字符数量为奇数个,则提取出B[0]=1;
2)第二次扫描到符合隐藏特征的语句,发现<application></application>字段,解析此处有连续的3个<application></application>字段,则提取出B[1]=1;
3)第三次扫描到符合隐藏特征的语句,发现<activity>android:name="com.number.i"</activity>字段,其中i为整数,且0i10,解析出i=4,则提取出B[2]=0;
4)第四次扫描到符合隐藏特征的语句,发现<activity>android:name="com.number.i"</activity>字段,解析出i=1,则提取出B[3]=1;
5)第五次扫描到符合隐藏特征的语句,发现<application></application>字段,解析此处有连续的6个<application></application>字段,则提取出B[4]=0;
6)第六次扫描到符合隐藏特征的语句,发现//字段,解析//后方的*字符数量为奇数个,则提取出B[5]=1;
7)第七次扫描到符合隐藏特征的语句,发现<activity>android:name="com.number.i"</activity>字段,解析出i=4,则提取出B[6]=0;
8)第八次扫描到符合隐藏特征的语句,发现<activity>android:name="com.number.i"</activity>字段,解析出i=8,则提取出B[7]=0;
本例中密文C由二进制数表示,因此提取出的二进制信息11010100即为密文C。
S3.3、将密文解密。如将密文11010100解密,使用已知私钥通过RC4解密,最终提取出隐藏的明文内容M,完成信息提取。
利用上述实施例安卓系统下基于文本文件的信息隐藏方法可实现隐秘通信,实现在1对n的公开信道上的隐秘通信功能。如图4所示,利用上述实施例的隐秘通信方法具体步骤包括:
(1)发送方利用上述实施例的信息隐藏方法将待传递的信息隐藏到AndroidManifest.xml相应位置中,然后生成APK文件。
(2)发送方将APK提交到某个网上应用商店;
(3)接收方从该网上应用商店下载APK;
(4)接收方从APK文件中提取出AndroidManifest.xml文件;
(5)接收方从AndroidManifest.xml文件中提取出隐藏的信息,至此,完成了一次信息从发送方到接收方的传递过程。
利用上述实施例安卓系统下基于文本文件的信息隐藏方法还可实现版权保护。本发明的一个实施例中,版权能护方法可实现对APK开发方的权利保护,避免了盗版者通过将AndroidManifest.xml重新打包生成的盗版APK。如图5所示,本发明实施例的版权保护方法具体包括以下步骤:
(1)开发方利用上述实施例的信息隐藏方法将版权保护信息隐藏到AndroidManifest.xml相应位置中,然后生成APK文件。
(2)开发方将APK提交到网上应用商店;
(3)软件使用方从网上应用商店下载APK;
(4)软件使用方从APK文件中提取出AndroidManifest.xml文件;
(5)软件使用方从AndroidManifest.xml文件中提取出隐藏的版权保护信息,检验版权信息是否真实有效,从而确定是否为重打包的盗版APK。
上述实施例安卓系统下基于文本文件的信息隐藏方法还可实现恶意软件来源检测和监视功能,可实现对恶意APK发布者的追踪。如图6所示,本发明实施例恶意软件来源检测和追踪方法具体包括以下步骤:
(1)网上应用商店对于上传的APK,先分解出AndroidManifest.xml文件;
(2)网上应用商店利用上述实施例的信息隐藏方法将APK上传者的身份标识信息(如身份证号,企业代码等)和/或网上应用商店标识信息隐藏到AndroidManifest.xml相应位置中,然后再次生成APK文件,在应用商店中发布供人下载。
(3)当病毒检测机构发现了恶意软件APK,可从APK文件中提取出AndroidManifest.xml文件;病毒检测机构(在网上应用商店配合下),从AndroidManifest.xml文件中提取出隐藏的APK上传者的身份标识信息(如身份证号,企业代码等),从而可确定该恶意软件制作者的来源。
应当理解的是,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,而所有这些改进和变换都应属于本发明所附权利要求的保护范围。
机译: 用测试工具测试具有基于文本的屏幕的软件应用程序的方法,系统和制品,该测试工具用于具有使用对象的图形用户界面的软件应用程序的测试工具
机译: 用测试工具测试具有基于文本的屏幕的软件应用程序的方法,系统和制品,该测试工具用于具有使用对象的图形用户界面的软件应用程序的测试工具
机译: 基于应用程序编程接口(API)面向对象的软件开发和文本分析