频道栏目
读书频道 > 安全 > 软件加密与解密
1.6.1 软件水印的例子
2012-08-25 16:28:19     我来说两句
收藏   我要投稿

本文所属图书 > 软件加密与解密

本书介绍了如何利用混淆、水印和防篡改等技术,来保护软件免受盗版、篡改和恶意逆向工程的危害,主要内容包括攻击者和防御者用来分析程序的各种主流方法,如何使用代码混淆技术使程序更难以被分析和理解,如何在...  立即去当当网订购
在下面给出的代码清单1-6中,你能找出几个水印"Bob"?我这样问你确实不公平。因为前面已经讲过,假设Doris所使用的算法是公开的,而唯一需要保密的是她输入程序的密钥。尽管如此,我还是要请你认真地读一下下面这段程序。首先,有一个东西很扎眼——有个字符串就叫"fingerprint"!有人现在可能已经在想了:藏的不咋地啊。不过这样实现的话,嵌入和提取水印倒是挺方便的,而且要是没别的用处的话,把它当成一个麻痹Axel的烟幕弹,使他因此就停下继续深入分析其他水印的脚步也不错。
代码清单1-6 软件水印的例子



再看看还有什么吗?我们来看code方法。Doris可以令a = 0, b = 1, …,o = 14, …,z = 25,这样就能把字符串"Bob"当成一个二十六进制数了,因为bob26= 1· 262 + 14· 261 + 1 = 104110[1],所以二十六进制数"Bob"就等于十进制数1041。然后Doris再把1041变成整数集合<0, 1, 2, 3, 4, 5, 6>的某个排列顺序:[2]
<0, 6, 5, 4, 2, 1, 3>

接下来,Doris就可以用这个排列顺序来调整code方法里switch语句的各个case分支出现的先后顺序了。如果需要提取水印,Doris只要把上述步骤反过来操作一遍就可以了。首先她把嵌有水印的这个方法找出来[3](输入提取函数的密钥应该就能找出这个方法),然后从switch语句中把这个排列顺序抄出来,并把它映射成十进制数1041,最后把1041解码成字符串"bob"。有很多种使用类似想法的水印嵌入技术,它们都是通过对程序中的某个方面进行重新排序的方法来完成水印的嵌入的。比如,最早公开的水印算法[104, 263](微软的一个专利)就是通过重排某个函数控制流图中的各个基本块在代码中出现的先后顺序来嵌入水印的。我们将在8.4节详细讨论这一算法。
最后让我们看看x=1-(3%(1-x)),这个语句到底是个什么玩意?实际上,Doris是使用了下面给出的这张转换表(图1-27),它把英文字母转换成了二进制的操作数/码对。



图 1-27
因此,由3个字母组成的字符串"bob"就变成了3个操作数—操作码对:1-、3%、1-,把它们连在一起就成了x=1-(3%(1-x))。这一方法与Monden等人提出的一个算法[252,263]颇有神似之处,我们将在8.7.1节详细讨论这一算法。
到现在为止,我们所讨论的3种水印嵌入算法都是静态的——我们直接把水印嵌入在程序的代码中。在上例中就是把水印嵌入程序的源代码里,但也可以把水印嵌入任何一种我们想要的程序表示形式(比如二进制可执行文件、Java的字节码或者任何一种在编译器中使用的程序中间代码)中去。第8章中将更加深入地讨论静态水印算法。
在这段代码中,最终发挥作用的是一种动态水印。为什么说它是动态的呢?因为这个水印只有在程序运行时,当程序接收到一个特定的输入时水印才会显示出来。在这个例子中,只有当Doris执行这个程序,并且输入密钥42时,语句



才会被执行,显示出嵌入的水印,如图1-28所示。





图 1-28
在第9章中,我们将会详细讨论这类水印。在实际运用中,动态水印当然不会像这个例子中这么简单:对于Axel来说找到弹出带有字符串窗口的代码简直太轻而易举了。相反,水印是隐藏在程序执行时的某个特定状态(寄存器、栈、堆等)中的。而程序的这一状态只有在程序获得了一个指定的而且是秘密的输入时才会被构造出来。我们只有使用调试器或者专用的识别器才能去检查程序的状态并从中提取出水印来。


[1]原文在这里印错了。中间乘以14的应该是26的一次方,而不是16的一次方。否则结果就是十进制的901,同时也不符合把Bob看成一个26进制数的想法。
[2]详见8.4小节中给出的算法8.3中int2perm函数。令V=1041,len=7。
[3]c#_ftnref3" name="_ftn3" title="">在这个例子中就是code方法。
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:1.6 软件水印
下一篇:1.6.2 攻击水印系统
相关文章
图文推荐
排行
热门
最新书评
特别推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站