论文摘要
随着软件行业的发展,软件盗版现象也日益猖獗。盗版不仅损害正版软件使用者的利益而且很大程度上制约了软件行业自身的发展。特别是在国内各个软件公司都才起步的情况下,这无疑是灾难性的打击。防止盗版被提到紧迫的日程上来,所以本文将重点研究Windows环境下可执行文件的加密技术。现在加密发展己形成两个分支,一个就是传统的算法,另一个就是加密壳。越来越多的软件采用了密码学相关算法,传统算法通用性强且要求有很高的密码学和数学知识。但是理论上的算法不一定能在有限的计算机资源上实现,所以本文主要研究与计算机紧密结合的软件壳加密技术。加壳的中心思想不外乎只有两点,一是尽可能的隐藏所能隐藏的东西,二是尽最大能力的拖延破解者的时间,让破解者那颗并没有无限大的忍耐度的心再也受不了为止。早期的壳只是加密程序中涉及到的字符串部分,但随着调试技术的发展,这已远远不能满足加密的需求。代码级的加密是目前最前沿的加密手段。本文综合运用目前前沿的二进制级代码变形理论及各种反破解技术与汇编语言紧密联系,达到理论艺术与工程技术的完美结合。本文既是对变形理论安全程度的实践挑战又是对系统编程技术的挑战。目前许多加壳技术都是采用C++等高级语言实现,但变形理论是基于操作码变形的技术。这对高级语言来说望尘莫及,而汇编完全能胜任这样的工作。采用汇编编制的软件壳无论是从性能还是灵活性都是无与伦比的。本文主要研究壳的加密原理。研究过程中,首先要熟悉Windows运行机制、结构化异常处理机制和可执行文件的结构及装载过程。其次由于壳代码涉及机器码的变形,所以需要熟练掌握汇编指令和机器码的编码方式。最后,壳要具有保护被加壳软件的功能,就必须有自我保护的能力。如何将壳代码隐蔽的注入被保护软件并能在运行时透明的保护加壳软件不被动态跟踪,也是本文的重要课题。本文在深入研究上述基本知识的基础上,改进源于病毒的变形技术,使加密算法百变其身,从而最大限度迷惑破解者;改进目前常用的花指令技术,使软件壳具有迷惑目前最先进的调试器的能力;改进钩子函数的挂接方式,使壳具有反跟踪和扩展功能。世界上没有无坚不摧的盾,加壳技术随着破解技术的发展而改进。对加壳技术的要求,不能求全责备。理论上,任何一个壳被破解只是时间问题。壳的唯一的使命是保证在软件的生命周期内不被破解。这样的壳就是成功加壳。