新闻中心
消费主张 IT业界 今日观察 消费警示 曝光台 热点专栏 奇闻趣事 一语惊人 专利之窗 动态备忘
领券购
生活必须 吃货优选 学习艺术 旅游出行 手机电脑 电子电器 热血男装 热销女装
图片中心
美女欣赏 风景欣赏 艺术欣赏 实物图片 制作美图 生活图片
下载中心
手机软件 语文数学 常用软件 红绿软件 信息社政 音体美合 科学自然 英语外语
映讯频道
浓缩电影 邻国热剧 一技之长 艺术无界 教育教学 纪录之窗 战争片 动作片 情感片 国内片 喜剧片 恐怖片 科幻片 大陆剧 港澳台剧 动漫片 明星云集 欧美剧集
聚划算
数码产品 服装服饰 家电家具 装潢装饰 商旅游玩 生活必备 二手特色 健康保健
FLASH频道
MTV类 运动游戏 益智游戏 女生游戏 休闲游戏 电脑运用 有声故事 有声艺术
社会专题
美文园地 制作教程 历史天空 游山玩水 美食天下 科技科幻 天文地理 时尚酷玩 健康保健 寻医问药 有书有道 农村特色 幽默笑话 汽车电子 星新一代 教育咨询 天下军事 硬件网络 黑白社会 靓丽女人 代码效果 免费资源 便民服务 办公达人 玄幻奇幻 软件技术
关闭
当前位置:首页社会专题硬件网络
如何防止软件被暴力破解

一、认识“暴破”手段

首先探讨一下破解组织的“暴破”手段。无论是技术多么精湛的组织,他们都会遵守以下的基本步骤来完成“暴破”。

1.判断软件是否加“壳”。

2.运行“暴破”工具,显示软件的源程序。

3.进行软件源程序的分析,找到注册信息语句。

4.修改注册信息的源程序,让注册功能不再生效,或者让注册码显示出来。

从上面的步骤中不难看到,软件之所以被轻易地“暴破”,主要还是因为开发者粗心大意,或者编译技术不完善导致源程序存在诸多漏洞而造成的。只要开发者在编写源程序时设置多层障碍,便可以在一定程度上防止“暴破”(笔者并不敢夸下“海口”,说自己的方法可以完全杜绝“暴破”,但起码可以增强软件的注册保护性能)。

二、防止“暴破”的方法

给软件“加壳”和添加反跟踪代码

1.软件发布前需要将可执行程序进行“加壳”处理,使其他人无法直接修改源程序。“加壳”可以利用很多优秀的“加壳”工具,且最好采用两种以上的工具对程序进行“加壳”。此外,还应尽可能地利用这些工具提供的反跟踪功能。

小提示:

开发者最好是设计自己的“加壳”方法。如果采用现成的工具,建议不要选择流行的,因为这些工具已被广泛研究,有了通用的“脱壳”办法。

2.除了“加壳”处理外,最好在软件开发的过程中嵌入反跟踪代码,防止“暴破”工具找到软件的注册漏洞。

软件的反跟踪方式较多,比较常见的有利用花指令随机改变关键代码的内存地址。下面看一个例子。

程序最初的源代码如下:

start_: xor eax,1 add eax,2 jmp label1 label1: xor eax,3 add eax,4 xor eax,5 end start_

先将源程序进行编译,然后用W32Dasm进行反汇编,得到的反汇编结果与源代码相同。接着我们将上述源程序作如下修改:

start_: xor eax,1 add eax,2 jnz label1 \\注意这里,用两句条件跳转代替了:jmp label1 jz label1 db 0E8h \\注意这个无用的字节和源程序的区别

label1: xor eax,3 add eax,4 xor eax,5 end start_

再把源程序进行编译,然后用W32Dasm进行反汇编。由此得到如下结果:W32Dasm反汇编的结果和事先写的汇编指令不一样,从反汇编的结果中已经无法理解程序的“真实”功能了。这是因为上述改动在W32Dasm的反汇编工作中做了“错误指引”,从而使得它犯下错误。

增加注册认证算法的难度

注册认证部分的源程序是“破解组织”进行“暴破”的突破口,注册认证算法的难易度直接影响软件被“暴破”的几率。增加注册认证算法的难度可以从以下方面入手。

1.选择相对复杂的算法进行注册开发(现行的加密算法中可以选择RSA算法)。当然,最好的方法还是自己编写算法。如果采用一些常见的密码学的算法,这跟引狼入室没有多大的区别,毕竟这些常见的算法已经被“暴破”高手们研究透彻了,哪里还有安全可言,而采用自己设计的算法就不同了,人的思维有所区别,这就在很大程度上增加了破解的难度。

2.检查注册信息代码编写得越分散越好。如果将注册模块编写到一起,就好比将财宝放在保险箱里,虽然非常坚固难以打开,但对于开锁高手而言,一旦打开它,里面的财宝尽失。具体的操作方法是:软件在注册时,不要让其调用同一个函数或判断同一个全局标志。

3.在检查注册信息的时候插入大量的无用运算代码。这样做的目的是误导解密者,让他们以为找到了真正的破解方法,在尝试以后却发现无效。这好比战场上的士兵用“迷彩服”与稻草来伪装自己一样,敌人很难发现他们到底在哪里。

增加注册信息步骤

增加注册认证算法的难度后,还需要在注册信息的步骤上下功夫,以此巩固防“暴破”的城墙。

1.可以使用优秀的随机数算法来让软件的注册方式带有随机性。譬如,除了启动时检查注册码外,还可以在软件运行的某个时段随机检查注册码。

2.采用一机一码的保护方式。这样设计以后,一台计算机上的注册码就无法在另外一台计算机上使用,就像很多软件以机器码为基础生成注册码一样。

3.删除试用版的功能代码。如果试用版与正式版是分开的两个版本。在试用版中不要仅仅锁定相关的菜单,而是彻底删除相关的功能代码。

增强软件自身源程序的完整性

在共享软件的开发过程中,除了对局部的注册代码进行加强外,还必须要考虑软件本身程序的完整性。可以通过以下方面进行加强。

1.增加对软件自身的完整性检查。这包括对磁盘文件和内存映像的检查,防止有人未经允许修改程序以达到破解的目的。

2.隐藏注册信息代码。不要采用例如“IsLicensedVersion( )”和“key.dat”等常见的注册代码名称。另外所有与软件保护相关的字符串都不要以明文形式存放在可执行文件中,最好是动态生成。

提示:输入修改代码都可运行!
1
酒精度
84
顶一下
相关阅读
内容加载中……