• 标 题:winrar2.71的破解和对暴破的一点想法 (4千字)
  • 作 者:kingtall
  • 时 间:2001-4-16 16:19:05
  • 链 接:http://bbs.pediy.com

软件名称:winrar 2.71
软件说明: 著名的windows平台压缩工具
软件大小:589 KB
下载地址:ftp://zdftp.zdnet.com/pub/private/sWlIB/utilities/file_utilities/winrar.exe

我个人认为winrar比winzip好用,打开一个压缩包时,里面的目录结构一目了然;而且选extract to进行解压时,路径默认为压缩包的文件名,所以一般不用自己输入路径。保护方法为keyfile保护。2.71版有40天的时间限制,主窗体标题中有(evaluation copy)字样,about框中有40 days trial copy的字样,老是出现注册对话框要你注册。该版本的保护非常弱,破解非常简单,在此给出一种方法(肯定有更多的破解方法,但我的目的是能用就行,懒得想太多)。


用w32dasm调入winrar.exe,用search菜单中的find text项找evaluation copy,只找到一处,就是下面这一段

:0041BA0D E8820B0400              call 0045C594
:0041BA12 83C40C                  add esp, 0000000C
:0041BA15 803DCC6C460000          cmp byte ptr [00466CCC], 00      ;注意
:0041BA1C 752E                    jne 0041BA4C

* Possible Reference to String Resource ID=00873: "evaluation copy"
                                  |
:0041BA1E 6869030000              push 00000369
:0041BA23 E894C6FEFF              call 004080BC
:0041BA28 50                      push eax

关闭w32dasm,打开trw2000,装入winrar.exe,下bpx 41ba15,g,trw很快弹出。看看[466ccc]的值是多少...答对了,是0。按F10到下一句,让我们输入rfl z跳过下面对SR id=873(十进制的369): "evaluation copy"的引用,然后g全速运行。程序界面出来了,怎么样,标题中的evaluation copy字样不见了吧。但about框中还是有40 days trial copy,注册框也还是经常跳出来。不要着急,回想刚才的程序,凭经验几乎可以断定[466ccc]这个全局变量中放的就是注册标志,0代表没有注册,非零代表注册。现在用trw重新装入winrar,bc清中断,然后下bpx 167:466ccc w,看看哪句话修改了[466ccc]的值,g吧。trw弹出时可以看到

426353 e8905d0100    call 43c0e8
426e58 a2cc6c4600    mov [466ccc],al
426e5d 53            push ebx

现在al=0,[466ccc]中已经是0了,把它改为1(下e 466ccc,敲1)。g,trw第二次弹出

41af44 e89f110200    call 43c0e8
41af49 a2cc6c4600    mov [466ccc],al

[466ccc]中又是0,再把它改回1。g,程序界面出来,怎么样,天下太平了吧,about框中的40 day trial copy也变成了register to。
这两段程序都调用了子程序43c0e8,然后把al赋给466ccc。al怎么变成0的呢?进去看看吧。用trw重新装入winrar,bc清中断,然后下bpx 167:43c0e8,g。trw弹出后按F10往下走,走不多远就看见:

43c11c e8ab030000    call 43c4cc
43c121 84c0          test al,al
43c123 7511          jnz 43c136        ; no jump
43c125 33c0          xor eax,eax        ; eax清零了
43c127 8b55c8        mov edx,[ebp-38]
43c12a 64891500000000 mov [fs:00],edx
43c131 e950030000    jmp 43c486        ; 跳这么远,估计没戏了吧。

跟到43c486,果然pop几下就返回了。这下该怎么改就清楚了,只需要改两个字节,把43c125的33c0换成b001就行了(mov al,1)。


对于暴破的信心和偏爱来自这样一个假定:9x%的程序都是通过比较来判断使用者的合法性的,可以通过改变比较转移的方向或目的地址来暴破。另外有y%的程序是通过散转的方式确定转移的正确地址,未必不能破解。

下面是我个人对于暴破的一点经验:

1.首先使用程序,看看未注册的程序有哪些表现,如标题、about框中的未注册字样若有未注册字样,就用w32dasm找一找,若找到的语句上面有条件比较可以跳过未注册字样,那离成功就不远了。就像上面的例子。

2.若第一步不行,就看看弹出来的提示框、注册框。如果你能看出这个框是个messagebox,可以下bpx messageboxa。若是一个(非)模态对话框,可以下bpx createdialog,bpx dialogbox等等。不行就下bpx lockmytask,比较稳。然后关闭注册框,一般trw都会弹出(delphi编的程序除外),按F12直到回到程序的天空,看看是那句话弹出的注册框(一般是messageboxa,或),能不能跳过。若你能找到条件转移语句能跳过注册框,那就差不多了。

3.若还是中断不了,还有一招笨办法,就是用trw装入程序,按F10一步一步从头跟起(当然加壳的要先脱壳)。若带过一个call后弹除了注册框,那就记下位置,下次用F8进入call中再来,如disketer 1.0。经验多了以后就会知道什么编的程序大体是什么结构,怎样做可以提高跟踪效率...

4.不少程序是通过读取系统日期来判断是否过期的,所以下bpx getsystemtime 或bpx getlocaltime,也有可能找到比较的关键点。如Snagit 5.1.0。

5.若程序是用序列号注册的,那就可以与注册号破解相结合。看看程序是怎样判断你输入的注册号的合法性。能找到序列号或算出序列号当然好了,找不到也没关系。程序员都是很懒的(嘘!不要让他们听到),这段程序通常也会放在程序的开头,判断用户的合法性,没注册的就弹出一个注册框给你看。所以这也经常帮助我们找到关键点,去掉开始的注册框,甚至把程序变成注册版。我就是这样破解the bat 1.51的。

6.还有一招,就是比较一下程序注册前和注册后,在某些关键点的运行有何差别,是跳呢还是不跳。条件是你有一个正确的注册码(废话,有了注册码还用破解吗?否,对于一个狂热的暴破分子来说,最重要的不是注册,而是破解)。当然也可以比较程序过期前后的差别。BugTrapper 3.0.97我就是这样破的,还有Ulead Photo Impact 6.0 trial。不过要小心,有不少程序一旦注册或过期,就很难恢复到原来的状态了。所以一定要看好你的注册表,备份好你的系统,要是有两台计算机供你使用,那就太幸福了。

写了这么多,好累,比破解还累。

  • 标 题:WinRAR注册算法 (784字)
  • 作 者:1212
  • 时 间:2001-4-16 17:28:21

2.50及以前的版本使用的是winrar作者自己设计的一个变形算法,虽然强度一般,但是挺有创意(能写出keygen寥寥无几)。从2.60开始,winrar开始使用ecc(椭圆曲线密码)作为注册认证算法的数学基础,从密码学的角度上讲,winrar的ecc256(实际上不到256bits,只有241bits)大致相当于rsa2560(可怕)。

在winrar v2.8b2及以前的winrar中,作者使用的ecc库有一个严重的错误,就是在把keyfile中的ascii方式的hex转换成bin时,没有考虑到长度限制的问题。这样,就可以精心构造一个keyfile,把原有的栈值改变,从而达到注册winrar的目的。但是这种注册方法有一个缺点,就是如果你在rar压缩文件中加入了av信息,那么其它“正版”用户仍然会发现你的rar文件是坏的。

v2.8b3之后,作者修正了这个bug。

顺便说一句:

restorator v2.50 (这个比exescope强多了)
clonecd v2.x
winrar v2.6+

三个程序使用的是同一个曲线方程,幂值为272。