首页
社区
课程
招聘
[讨论]破解有没有尽头呢?
发表于: 2009-5-12 00:04 7818

[讨论]破解有没有尽头呢?

2009-5-12 00:04
7818
我刚接触破解,就看到了这篇文章,不知道文章写的是真是假,难道破解真的有OVER的那天吗?上周未才买了加密解密,唉!高手给解释解释呀,让菜鸟也了解下破解的现状展望下破解的未来!多谢了!那篇文章如下!

软件暴力破解的原理和应对方法  

发布时间:2006.07.13 21:52     来源:超级下载    作者:

共享软件是目前世界上软件业比较热门的话题,国内更是如此。成千上万的中国程序员以极 大的热情投入到这个领域来,都憧憬着用辛勤的劳动获得丰厚的回报;但,实际并非如此,绝大多数的人都铩羽而归。值得注意的是:除了软件设计和技术上的原因外,最大的原因就是共享软件被破解(Crack)了……
  面对破解
  一个做共享软件的作者,面对的是已经形成团伙的众多破解高手,国内的什么CCG、BCG,国外的eGis、King、Core、TNT、DAMN和TMG,皆为水平一流的破解组织。全球盗版软件不少于80%都是由他们的破解的,技术实力连大软件公司都不可小视。
  看到这里,你是否已经灰心了?别怕,虽然目前我们理论上无法完全避免被破解,但如果能够有效地拖延被破解的时间,并充分打击破解者的自信心,是可以让破解者无法忍受这种折磨从而最终放弃的。
  破解,通常的做法有两种——暴力破解(爆破)和写注册机。笔者就自己积累的经验来依次讲解每种破解方法的原理和应对方法,某些关键的例程讲解(Delphi代码),使用C++和VB的朋友可以自己稍微修改一下。希望这能对一些新手有些帮助,能够更有效地保护自己的劳动成果。
  认识暴力破解
  暴力破解简称“爆破”,这是破解手段中最常见的,也是最简单的破解方法。该法最适合于对付没有CRC校验的软件,破解新手乐于采用。
  大凡共享软件,验证是否注册大多采用if条件语句来进行判断,即使你采用了什么RSA或ECC等强力加密算法,也免不了使用if条件语句。这里就是共享软件最为危险的地方,也是爆破手孜孜不倦所寻求的目标。
例如,你的注册函数类似如下:
  {利用RSA进行注册码的数字签名验证}
  if RSAVerify(MD5(Key),MD5(Code),e,n)then
  ShowMessage('注册成功!')
   else
   ShowMessage('注册失败!');
  {这里Key是用户输入的注册码,是由你发送给注册用户的,Code是根据用户输入的用户名自动计算出来的注册码,e是RSA算法的公匙,而n是RSA算法的模数。}
第一次过招
  上例注册函数即使使用了强劲的RSA算法进行注册码验证,但依然很容易被破解,我们只要把这里修改为:
  将逻辑判断改为否 
  if not RSAVerify(MD5)Key),MD5(Code),e,n)then
  ShowMessage('注册成功!')
    else
    ShowMessage('注册失败!');

  这时戏剧性的结果会产生:随便输入任何注册码都可以注册通过,相反输入正确的注册码却无法通过注册。
  要破解这样的软件就必须先反汇编或者跟踪你的程序,找到判断注册码的cmp、test等汇编指令后的关键跳转指令处,通常是je、jz之类的汇编指令,把它们修改为jne或jnz即可,这样常常只需要修改一个字节就可以完美破解了。
  目前大部分共享软件都是用以上方法进行判断,这也是为什么网上被破解的软件铺天盖地的主要原因。因为这样破解实在是太简单了……
  第二次过招
  其实只要把软件的关键代码嵌入到注册码或者注册文件中就可以充分防止破解。
  最简单的方法就是把关键代码(你的软件功能限制部分最关键而且最简单的一个函数)做成一个小DLL(动态链接库),用强力对称算法加密(密匙可以是主程序某一固定不变的部分或壳的特征Hash值)后生成一个注册文件(License文件,这格式只有你知道),或者Base64编码后生成一个注册表文件,用户可以双击导入注册表内。
  校验流程如下:已注册用户验证注册码时,先验证有没有文件,没有文件则自然受限制的功能无法使用。如果有注册文件,解密后即生成一个小临时文件。如果主程序被脱壳或者被修改(爆破),自然Hash值密码不符,解密出来的肯定都是垃圾码,没有一点用处。只有没有被修改的主程序才能正确地解码,而且当然只有解密正确的文件才是一个真正的DLL文件,才能被GetProcAddress函数找到欲调用的关键函数地址。这样只有已注册用户才可以享受到你的软件的全部功能了。如此一来,Cracker破解你的软件就变得很困难了。
  首先,他如果没有注册文件,即使他把主程序脱壳了,由于受限制的部分和注册文件是关联的,他也根本无法修补完整。
第二,即使他得到了你的注册文件,由于是加密文件,他也无法直接利用,这样就逼迫他去拆解你的算法,这可是他们最不愿意碰到的事情啊!如果到了这一步,只有真正对加密算法有研究的Cracker高手才会继续破解下去。
  第三,你是可以用些小技巧来使他的破解工作更加繁锁。这里我推荐大家使用DSA公开密匙加密算法,它和RSA一样,可以进行数字签名(RSA还可以加密,DSA则只能进行数字签名)。笔者这里选用它的原因就是它有一项非常实用的特性:随机数填充机制。即DSA每次签名都要使用一个随机数K,正因为有这个K的存在,即使是相同的用户名和机器识别码,由DSA加密过的每份注册文件都不会相同。这对Cracker拆解你的注册文件来说是一个极大的障碍。
  第四,即使他得到了解密后的DLL文件,他也需要大幅度地修改主程序或者把你的DLL部分的关键代码拆出来添到主可执行文件中。这就看他对PE文件格式理解得如何了。即使这样,如果你的程序中有大量的Hash校验和死机代码,你就耐心等着我们可爱的Cracker同志吐血吧……:)

  最后还要记住:用完这个DLL临时文件后立即从内存中卸载此DLL并删掉,而且注意在解密之前探测一下,系统中有没有FileMon这个威胁极大的探测器:
  {探测FileMon}
  function DetectFileMon:Boolean;
  begin
  if CreateFile(PChar('\\.\FILEVXD'),
  GENERIC_READ or GENERIC_WRITE,
  FILE_SHARE_READ or FILE_SHARE_WRITE
  nil,
  OPEN_EXISTING,
  FILE_ATTRIBUTE_NORMAL,
  0<> INVALID_HANDLE_VALUE then
  Result:= True //如果有,就Down机!
   else
  Result:= False;
   end;
  当然,你可以保护得更好一些:可以不采用临时DLL,而把解密后的关键代码用WriteProcessMemory这个API函数写入到主可执行文件自己进程被提交(Committed)的内存页面的指定位置去。这样由于磁盘上没有解密后的临时文件,破解更加困难。事实上,目前世界上最强劲的专业保护软件Amadillo就是用的这种方法。而且这种方法可以充分防止被调试器Dump。但实现起来比较困难,尤其是在WinNT 5以后的操作系统中。

  由于这种方法将注册文件和受限制代码惟一关联,爆破手拿到你的软件也只有干瞪眼。建议大家都给共享软件加上功能限制,这样比时间和次数限制更加安全。

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 0
支持
分享
最新回复 (22)
雪    币: 212
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
连微软都没有办法
2009-5-12 05:20
0
雪    币: 485
活跃值: (12)
能力值: ( LV9,RANK:490 )
在线值:
发帖
回帖
粉丝
3
我想破解没有OVER那一天.如果不努力学习的话,我等菜菜倒是有OVER的那一天.
M$不也只是眼睁睁的看着WINDOWS \OFFICE被搞!
所以,不怕没的破,只怕功夫不深.
发展才是硬道理.

不过要是法律规定谁CRACK就立马拉出去毙了,那可能就OVER了.
2009-5-12 07:51
0
雪    币: 93
活跃值: (11)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
我不同意楼上几位观点,破解当然有尽头,当人们物质生活和精神生活达到最理想化状态,所有软件全部开源的时候,或者所有正版软件价格低于破解成本的时候,破解的尽头就到了。
2009-5-12 09:49
0
雪    币: 504
活跃值: (10)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
5
永远没有尽头,事情没有完美的,自然有需要,除非没有人类
2009-5-12 09:51
0
雪    币: 209
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
就是就是,那是没有尽头的!!!
2009-5-12 09:58
0
雪    币: 2393
活跃值: (1387)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
最早, 而且廣義的破解 CRACK 很接近 PEDIY 的觀念.
並不是單純的, 在合法使用和非法使用之間的轉換.
而是依據個人喜好來修改軟件, 所以漢化也是 CRACK 的一種.

另外, LZ 所引用的文章裡面, 提到的那些方法.
對於裡面所提到的那些 Cracker 來說, 根本就抵不住他們的破解.
尤其是, 在 Windows 裡下, 只要能被正常運行, 就能被破解.
這是不變的信條.

補充一點, eGIS 是一個人, C.O.R.E. 才是組織.
上面提到的破解團體, 並非全部是國外的.
2009-5-12 09:59
0
雪    币: 2368
活跃值: (81)
能力值: (RANK:300 )
在线值:
发帖
回帖
粉丝
8
有尽头。计算机,网络...都消失的时候。
嘿嘿
2009-5-12 10:45
0
雪    币: 504
活跃值: (10)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
9
没有网络是没尽头,没有计算机那就尽头了
2009-5-12 10:55
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
破解无止境。
2009-5-12 11:19
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
没有计算机,还有人在开锁呢?这也是破解

破解没有终结的那一天!
2009-5-12 11:40
0
雪    币: 221
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
不错不错 不过为了兴趣就排除在外了
2009-5-12 12:34
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
我想是没有尽头的,除非没有人开发,软件开发和破解应该是并存的
    咱们破解的同时也会增强开发人员的加密技术,破解也就更进一级了
有点像病毒跟杀毒软件的关系
                               呵呵,只是我的一点看法
2009-5-12 17:32
0
雪    币: 244
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
WWX
14
支持,目前来说应该是的!

以后就很难说了
2009-5-12 17:57
0
雪    币: 339
活跃值: (10)
能力值: ( LV9,RANK:260 )
在线值:
发帖
回帖
粉丝
15
从哲学上讲,任何事物都是有两面性的;安全与破解在任一敏感领域都会存在。问题不在于“破解是否会有尽头”,而是看你如何看待这个问题。
有些人破解是为了满足某种不可告人的目的,而有些人则是纯粹得研究现行的理念与策略。
2009-5-13 09:57
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
一切都是为了学习 都是为了提高自己
2009-5-13 10:17
0
雪    币: 1769
活跃值: (54)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
17
只要我觉得好玩,就没有尽头,纯粹是当智力游戏的说。
2009-5-13 11:59
0
雪    币: 375
活跃值: (12)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
18
没软件破解我们去破解大自然去~

总得弄点东西来研究的吧~

否则寂寞死了。
2009-5-14 17:02
0
雪    币: 4634
活跃值: (936)
能力值: ( LV13,RANK:350 )
在线值:
发帖
回帖
粉丝
19
无尽的发展无上的追求,这才是真正的奥义
2009-5-14 18:25
0
雪    币: 145
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
只要兴趣没有消失,破解就没有止境!
2009-5-15 10:20
0
雪    币: 557
活跃值: (10)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
21
有收费软件就有破解
2009-5-15 16:39
0
雪    币: 218
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
只要想破就有东西可破
2009-5-16 10:35
0
雪    币: 107
活跃值: (10)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
23
破解,不是我们大家的最终目的。
我们的目的就是传说中的-----逆向工程学~~~
嗯,,在返编译,返跟踪的过程中,学习原作者的套路,思路~~

另外,大家都要遵守最基本的道德规范,尊重作者的劳动成果.....
这是我们每个人的义务.
2009-5-16 11:14
0
游客
登录 | 注册 方可回帖
返回
//