首页 > 范文大全 > 正文

论软件的破解与加密

开篇:润墨网以专业的文秘视角,为您筛选了一篇论软件的破解与加密范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘要:目前绝大多数软件都采取了加密技术,本文分析了软件破解中几个重要的术语和常见的软件破解方法,并介绍了软加密和硬加密技术。

关键词:软件加密;软件破解

中图分类号:TP309.7 文献标识码:A 文章编号:1007-9599 (2011) 18-0000-01

Software Cracking and Encryption

Sun Hangshuai

(Fuyun County People's Hospital of Xinjiang,Altay 836100,China)

Abstract:The vast majority of software encryption technology adopted,this paper analyzes the software to crack in terms of several important and common software crack method,and introduced the hard-soft encryption and encryption technology.

Keywords:Software encryption;Software cracking

现在的软件破解技术十分发达,国内外大型软件都有注册机制,却同时也不断地被破解,大多的软件厂商选择了购买加密产品或者加密技术来保护自己的软件,软件保护分为软加密和硬加密。

一、首先我们说明一下破解中几个专业术语

(一)断点,所谓断点就是程序被中断的地方,中断就是由于有不同事件发生,计算机暂停当前的任务,转而去执行另外的任务,然后再返回原先的任务继续执行。解密的过程就是等到程序去获取输入的注册码并准备和正确的注册码相比较的时候将它中断下来,然后我们通过分析程序,找到正确的注册码。

(二)领空,所谓程序的领空就是程序自己的领土,也就是我们要破解的程序自己程序码所处的位置。每个程序的编写都没有固定的格式,所以我们要在想要切入程序的时候中断程序,就必须不依赖具体的程序设置断点,也就是我们设置的断点应该是每个程序都会用到的东西。

(三)API,即Application Programming Interface的简写,是一个系统定义函数的大集合,它提供了访问操作系统特征的方法。API包含了几百个应用程序调用的函数,这些函数执行所有必须的与操作系统相关的操作,如内存分配、向屏幕输出和创建对象等,WINDOWS程序以API为基础来实现和系统打交道。无论什么样的应用程序,其底层最终都是通过调用各种API函数来实现功能的。

二、让我们看下基本的软件破解方法

(一)最常见的也是最简单的破解方法是暴力破解法,破解者直接利用编辑工具对可执行文件进行修改,也就是说通过修改可属性程序的源文件来达到破解目的。某些元件在验证用户注册信息和注册码时候如果用户输人的信息与软件通过的算法生成的注册码相等,程序就会注册成功,否则就会注册失败。

(二)我们知道所有正在运行的程序的数据,全部都要加载到内存中去,所以也可以利用内存破解。软件在进行注册码认证的时候会有个比较的过程,所以我们只须知道所要破解软件的注册码的内存地址。这种方法的优点是无须花大力气掌握软件注册码的算法,非常节省编写内存注册机的时间。步骤是先加载内存注册机,再通过它去获得内存中软件的真实注册码,或修改内存中软件相关的某些数据,来达到破解软件的目的。主要有两种方式,第一种直接从内存中得到注册码,第二种在内存中模拟已注册程序的运行环境。

(三)补丁破解和文件注册。补丁破解法是指用相关的补丁程序来修改软件,以达到破解软件的目的。此方法一般是破解软件的验证注册码或时间,基本上都是修改原程序的判断语句。比如程序试用期是一年,就可以把这个修改掉,来达到无限使用的目的。文件注册法就是把软件的注册内容放到一个文件里,以方便自己或别人用它来注册,主要有注册表导人和注册文件导人两种方式。

三、常见的软件保护方法

(一)利用注册码,软件的注册码一般都是一机唯一一个。下面看看如何实现:

第一、根据硬盘卷标和CPU序列号,生成机器码,编写public static string GetDiskVolumeSerialNum-ber()函数取得设备硬盘的卷标号,其次编写public static string getCpu()函数获得CPU的序列号,最后生成机器码,函数如下:

String Number;String public static string getsoftNum()

{strNum-=getCpu+GetDiskVolumeSerial-strsoftNum=strNum.Substring(0,24);//从生成的字符串中取出前24个字符做为机器码return strsoftNum;}

第二、根据机器码生成注册码,编写public static string getRegistNum()函数来实现。

第三、看注册状况,若没有注册,可定义试用天数,延迟,未注册画面等等,可编写private void CheckRegist0 Cpl数来实现。

(二)利用软加密,软加密就是不依靠特别硬件来实现的对软件的保护技术。当前国际上比较通用的软件都采取软加密的方式,例如windows系统、杀毒软件,它的最大优势在于极低的加密成本。目前主要有密码法、钥匙盘法、计算机硬件校验法等。目前比较流行的是使用外壳,外壳分为压缩壳和加密壳,一般采用加密壳,其原理是利用堆栈平衡原理,修改程序入口处代码,使其跳转到壳代码执行解密程序,将原程序代码解密后跳回原程序的OEP继续执行。目前比较强的加密壳采用的是动态解密代码、SMC,IAT加密技术,程序在运行过程中动态解密代码,执行完毕后立刻删除,并且对IAT加密,当需要调用API时用解密算法算出API的实际地址来调用,更有甚者,壳里有壳。目前常见的比较强的五大壳有:(I)EncryptPE,特点是对IAT加密比较强,(2)ASProtect,特点是采用多层SEH,很容易套牢,(3)ACProtect,特点是采用stolen code的办法,(4)Armadillo,特点是双进程互相检测,(5)themida,特点是采用虚拟机技术。好的加密效果在于让盗版者在破解被保护的软件时,被迫放弃攻击。

(三)利用硬件加密,硬加密就是我们所说的加密狗或加密锁,是一种插在计算机USB口或并口上的软硬件结合的加密产品,目前绝大部分都是USB口形式,是基于硬件保护技术,其目的是通过对软件与数据的保护防止知识产权被非法使用,是保证高档软件在市场生命周期中免受盗版侵害的功能强大的工具。加密狗一般都有几十或几百字节的非易失性存储空间可供读写,现在较新的狗内部还包含了单片机。软件开发者可以通过接口函数和软件狗进行数据交换,来检查软件狗是否插在接口上。加密狗内置的单片机里包含有专用于加密的算法软件,该软件被写入单片机后,就不能再被读出。这样,就保证了加密狗硬件不能被复制。同时,加密算法是不可预知、不可逆的。加密算法可以把一个数字或字符变换成一个整数。

软件破解和软件加密就是矛和盾的关系,好的加密效果在于破解被保护的软件时,付出巨大的代价或耗费极大的时间精力以至于最终被迫放弃攻击。有知识产权的软件破解是不道德的,是违法《计算机软件保护条例》的,如今软件的市场化,我们要去使用正版软件,我们要提高觉悟,力所能及的不使用盗版,支持的软件行业发展。