根据领导的要求,最近在研究软件保护技术。
软件保护实际上是多年来都很难解决的一个问题,目前情况下,大多数软件都在发布之后很快出现破解版。这个问题实际上没有终极解决方案,只能说使用某种方法在技术上抵御破解,增加破解的难度和需要的时间。根本原因是,我们开发是用高级语言,而破解者使用的是汇编语言。我们开发主要是业务逻辑,而破解者是在CPU的角度在思考。不过你什么样的软件,最终都要编译为CPU可以理解的指令,而只要逆向研究人员能够对CPU的工作原理了然于胸,那逆向出某个软件的逻辑就只是时间的问题。
在软件保护这个方向上,工程师们想出了很多的处理办法,但这些手段都只能在一定层面上实现保护功能。这里罗列一下软件保护的主要研究内容:
1、代码混淆,主要是通过增加大量无用的混乱的指令,给代码的理解造成困难
2、代码校验,通过在代码中插入自我校验的功能,使得进程可以检测到自身是否被修改
3、SMC,主要是对代码进行动态的加解密,使得程序在磁盘上静态存储时与在内存中运行时是两个状态,进程自身对代码序列进行动态解密,这种方法可以抵御静态分析。
4、调试环境检测,通过软件方法检测当前进程是否被调试
5、信息隐藏,主要是通过加密将程序中所用到的字符串等进行加密
6、加壳,还可以分为给PE文件加上压缩壳、加密壳、虚拟机壳等
7、另外还有一些新的软件水印,软件防篡改,软件相似性分析等新的研究方向
目前比较好的保护方法是软件硬件化,也就是将一部分功能开发成硬件;或者软件功能分布化,就是将软件功能分开,使用时必须通过互联网,只有与服务器端正确对接才可以使用。
要做好软件保护首先要学会逆向和破解,不懂如何攻击就无法进行防御。