软件水印的嵌入和提取方法技术

技术编号:11204497 阅读:152 留言:0更新日期:2015-03-26 12:35
本申请公开了一种软件水印的嵌入和提取方法,在嵌入水印时,根据用户触发的事件流和待嵌入的水印信息,生成相应的水印代码,并嵌入到各事件对应的汇编代码段中。本发明专利技术,通过在水印和程序本身之间建立一种逻辑依赖关系,可以提高水印信息的隐藏性。采用本发明专利技术可以对Android平台应用软件进行有效保护。

【技术实现步骤摘要】

本专利技术涉及计算机软件安全技术,特别是涉及一种软件水印的嵌入和提取方法
技术介绍
目前,随着安卓移动智能终端的飞速发展,近年来围绕移动应用程序出现了一种新兴经济模型。然而,应用程序重打包给应用程序开发人员、应用商店及用户带来了巨大的风险。恶意用户通过应用程序重打包能够破坏开发者的收入来源,侵犯其知识产权。最近的研究表明,应用程序重打包是Android恶意软件在外进行传播最常见的机制之一。调查还表明,应用程序重打包成为手机银行应用的严重漏洞。面对这些安全威胁,需要对应用软件进行保护。目前国内外在软件保护领域做了大量的研究,提出了一些软件保护方法,并且构造了相应的软件保护工具。目前主要的软件保护方法可分为:代码混淆,软件水印,内容数字版权加密保护技术,应用加壳,代码克隆检测等。代码混淆(Obfuscated code)亦称花指令,是将计算机程序的代码,转换成一种功能上等价,但是难于阅读和理解的形式的行为。代码混淆可以用于程序源代码,也可以用于程序编译而成的中间代码。执行代码混淆的程序被称作代码混淆器。目前已经存在许多种功能各异的代码混淆器。代码混淆方法包括以下几种方式:(1)将代码中的各种元素,如变量,函数,类的名字改写成无意义的名字。比如改写成单个字母,或是简短的无意义字母组合,甚至改写成“__”这样的符号,使得阅读的人无法根据名字猜测其用途。(2)重写代码中的部分逻辑,将其变成功能上等价,但是更难理解的形式。比如将for循环改写成while循环,将循环改写成递归,精简中间变量,等等。(3)打乱代码的格式。比如删除空格,将多行代码挤到一行中,或者将一行代码断成多行等等。混淆器的作用不仅仅是保护代码,它也有精简编译后程序大小的作用。由于以上介绍的缩短变量和函数名以及丢失部分信息的原因,编译后jar文件体积大约能减少25%,这对当前费用较贵的无线网络传输是有一定意义的。软件水印(software watermark)技术是所有软件保护的研究中较新的一个领域,是数字水印技术的分支,软件所有者通过在软件中嵌入特有信息,来标识作者、发行商、所有者、使用者等信息,部分嵌入信息携带着版权保护信息和身份认证信息,可以鉴别出非法复制和盗用的软件产品。软件加壳是利用特殊的算法对EXE、DLL文件(Android中为dex文件)里的资源进行压缩,改变其原来的特征码,隐藏一些字符串等等,使一些资源编辑软件不能正常打开或者修改。在对Android dex文件加壳过程中,涉及到以下3种角色:加壳程序:加密源程序为解壳数据、组装解壳程序和解壳数据;解壳程序:解密解壳数据,并运行时通过DexClassLoader动态加载;源程序:需要加壳处理的被保护代码。内容数字版权加密保护技术(Digital Rights Management,DRM)指的是出版者用来控制被保护对象使用权的一些技术,这些技术保护的有数字化内容(例如:软件、音乐、电影)以及硬件,处理数字化产品的某个实例的使用限制。DRM首先建立应用授权中心,编码压缩后的应用内容,可以利用密钥(Key)进行加密保护(lock),加密的应用头部存放着KeyID和应用授权中心的URL。用户在使用时,根据应用头部的KeyID和URL信息,就可以通过应用授权中心的验证授权后送出相关的密钥解密(unlock),应用方可使用。上述传统的软件保护工具虽然仍被大多数开发者使用,某些算法强度也比较高,但是,各方法所实现的功能还是存在一定的局限性。具体而言,代码混淆、静态软件水印、应用加壳等应用保护方法,只能增加攻击者破解应用的难度,并不能阻止有经验的攻击者利用IDA等逆向工具手动分析破解Android应用。目前部分主流的软件保护工具,如Proguard、ApkProtect等都出现了相应的反混淆、脱壳工具,这些工具也侧面说明了上述这些方法的部分缺陷,破解难度较小。目前主流的应用商店如Google Play、亚马逊中国等,提供了自己的内容数字版权加密保护技术,开发者调用相应的工具库即可防止应用被破解和重新打包。但是这些保护机制存在部署难度较大、消耗大量开发成本等问题。例如,对于Google Play的内容数字版权加密保护技术,应用软件每次启动的时候都会验证证书,这一过程需要数据连接。而,很多应用软件都是离线工作,因此会导致应用软件无法启动。Android应用软件水印技术的主要需求在第三方商店以及手机厂商,开发者并不希望提供源码以供嵌入水印,使得基于Java源码的水印方法并不适用于Android应用保护。由于Android平台是使用dalvik虚拟机运行Android程序的,而dalvik虚拟机运行的是dalvik字节码,dalvik字节码有不同于汇编指令的指令特点,因此目前已有的基于x86等汇编指令的软件水印技术,也无法直接应用到Android基于Dalvik字节码指令中。由此可见,目前的软件保护方法不适用于对Android平台应用软件的保护。
技术实现思路
有鉴于此,本专利技术的主要目的在于提供一种软件水印的嵌入和提取方法,可以对Android平台应用软件进行有效保护。为了达到上述目的,本专利技术提出的技术方案为:一种软件水印的嵌入方法,包括:a、对待嵌入的水印进行拆分,得到一组水印值;b、启动待嵌入水印的软件,捕获用户触发的事件,并根据所捕获到的每个事件的原始信息,按照事件触发的时间顺序,生成事件密钥脚本文件;c、判断所述水印值的数量是否小于等于所述捕获的事件数量;如果是,则将每个所述水印值分别与所述事件密钥脚本文件中的事件建立一一对应关系,其中,不同水印值对应不同事件;否则,执行步骤b;d、将每个所述水印值转化为水印代码,并嵌入到该水印值所对应事件的汇编代码段中。一种软件水印的提取方法,用于对利用上述方法嵌入的水印进行提取,包括:根据所述事件密钥脚本文件,生成按照事件触发的时间顺序排列的事件流;按照所述事件触发的时间顺序,依次模拟所述事件流中每个事件的触发;并在所述事件的触发过程中提取相应的汇编代码段;从所提取到的每个所述事件的汇编代码段中,提取所嵌入的水印代码,并将所述水印代码转换成相应的水印值;对所转换得到的每个水印值的准确性和有效性进行判断,并删除其中无效或错误的水印值,得到嵌入到软件中的水印信息。综上所述,本专利技术提出的一种软件水印的嵌入和提取方法,通过在水印和程序本身之间建立一种逻辑依赖关系,可以提高水本文档来自技高网
...
软件水印的嵌入和提取方法

【技术保护点】
一种软件水印的嵌入方法,其特征在于,包括:a、对待嵌入的水印进行拆分,得到一组水印值;b、启动待嵌入水印的软件,捕获用户触发的事件,并根据所捕获到的每个事件的原始信息,按照事件触发的时间顺序,生成事件密钥脚本文件;c、判断所述水印值的数量是否小于等于所述捕获的事件数量;如果是,则将每个所述水印值分别与所述事件密钥脚本文件中的事件建立一一对应关系,其中,不同水印值对应不同事件;否则,执行步骤b;d、将每个所述水印值转化为水印代码,并嵌入到该水印值所对应事件的汇编代码段中。

【技术特征摘要】
1.一种软件水印的嵌入方法,其特征在于,包括:
a、对待嵌入的水印进行拆分,得到一组水印值;
b、启动待嵌入水印的软件,捕获用户触发的事件,并根据所捕获到的每个事件的
原始信息,按照事件触发的时间顺序,生成事件密钥脚本文件;
c、判断所述水印值的数量是否小于等于所述捕获的事件数量;如果是,则将每个
所述水印值分别与所述事件密钥脚本文件中的事件建立一一对应关系,其中,不同水
印值对应不同事件;否则,执行步骤b;
d、将每个所述水印值转化为水印代码,并嵌入到该水印值所对应事件的汇编代码
段中。
2.根据权利要求1所述的方法,其特征在于,所述生成事件密钥脚本文件包括:
对于所捕获到的每个事件,对事件的原始信息进行解析,生成相应的事件详细信
息,所述事件详细信息包括事件触发时间、事件类型及事件属性,按照事件触发的时
间顺序,将每个事件对应的所述事件详细信息写入到所述软件密钥脚本文件中。
3.根据权利要求1所述的方法,其特征在于,利用中国剩余定理,对待嵌入的水
印进行所述拆分。
4.根据权利要求1所述的方法,其特征在于,所述步骤d包括:
对于每个水印值,将该水印值转换成二进制数,按照1代表跳转语句目的地址大
于原地址,0代表跳转语句目的地址小于原地址的转换原则,根据n0=m0-k0和n1=m1-k1,
生成相应的Smali跳转语句,将所生成的Smali跳转语句嵌入到该水印值所对应事件
的汇编代码段中,进行所述嵌入后的汇编代码段满足:按照Smali跳转语句的先后顺
序和所述转换原则,依次将所述汇编代码段中的Smali跳转语句转换为0或1后,得
到的数值与该水印值对应的二进制数相同,并且所述汇编代码段中原有语...

【专利技术属性】
技术研发人员:胡阳雨徐国爱李承泽张程鹏董枫
申请(专利权)人:北京邮电大学
类型:发明
国别省市:北京;11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1