• 标 题:Mover98 V3.1 暴力破解 + 注册码破解(有实时检验、自校验,还有一个非常捉弄人的地方,小心 :D) (8千字)
  • 作 者:paulyoung
  • 时 间:2001-5-7 4:01:07
  • 链 接:http://bbs.pediy.com

Mover98 V3.1 暴力破解 + 注册码破解(有实时检验、自校验,还有一个非常捉弄人的地方,小心 :D)

作者:PaulYoung
时间:2001.05.06凌晨
软件简介:是一种搬移软件的工具,你可以利用它将已经安装的软件,从一个磁碟机(资料夹)整个搬动到另外一个磁碟机(资料夹)下,而且还可以正常的执行。连所有和该软件相关的资料夹、捷径、动态连结档等等,通通会一并的搬动。所以在软件搬移之后,不需要修改原来程序集或桌面上的程序捷径,一样还是可以开启软件。在使用方式上,Mover98提供一个精灵,你只要简单的回答几个问题,他就会帮你移动软件。你可以从程序集中选择要移动的软件,也可以直接到磁碟机中指定要搬动的软件资料夹。接下来,你只要指定储存软件的位置,Mover98就会把整个软件通通搬到新的位置下。还可以移动整个windows目录喔!但是Mover98在还没有注册之前,只能让你使用5次而已!
下载:http://www.yadown.com/longfei/patch/pmover9831-f.zip  (汉化修改版)
破解工具:TRW 2000 V1.03,HIEW V6.55,W32DASM V8.93
______________________________________________________________________________________________________________

一、暴力篇
  Mover98 V3.1 注册方式采用实时校验方式,即只有用户名和注册码完全正确时,注册键才会被激活。不过我这回采用另外一种办法,巧妙地破解了它。
  首先反汇编它。在“串式参考”处找到"Thank you for registering Mover98. "(注册成功的信息),双击后往上看:

:0047B27F 53                      push ebx
:0047B280 8BD8                    mov ebx, eax
:0047B282 33C0                    xor eax, eax
:0047B284 55                      push ebp
:0047B285 681DB34700              push 0047B31D
:0047B28A 64FF30                  push dword ptr fs:[eax]
:0047B28D 648920                  mov dword ptr fs:[eax], esp
:0047B290 8D55FC                  lea edx, dword ptr [ebp-04]
:0047B293 8B83F8010000            mov eax, dword ptr [ebx+000001F8]
:0047B299 E8FE61FAFF              call 0042149C
:0047B29E 8B45FC                  mov eax, dword ptr [ebp-04]
:0047B2A1 50                      push eax
:0047B2A2 8D55F8                  lea edx, dword ptr [ebp-08]
:0047B2A5 8B83F4010000            mov eax, dword ptr [ebx+000001F4]
:0047B2AB E8EC61FAFF              call 0042149C
:0047B2B0 8B45F8                  mov eax, dword ptr [ebp-08]
:0047B2B3 5A                      pop edx
:0047B2B4 E8BF42FEFF              call 0045F578        //无疑,这一定是验证注册码的了,进入看看(按菜单中有CALL字样的小图标)
:0047B2B9 84C0                    test al, al         
:0047B2BB 7445                    je 0047B302
:0047B2BD 6A00                    push 00000000
:0047B2BF 668B0D2CB34700          mov cx, word ptr [0047B32C]
:0047B2C6 B203                    mov dl, 03

* Possible StringData Ref from Code Obj ->"Thank you for registering Mover98. "
                                        ->"Happy moving ..."



**************************************************************************************************************

来到这里...这里肯定是验证注册码的关键了

* Referenced by a CALL at Addresses:
|:0045F6CA  , :0047B2B4  , :0047B3A8      //哇噻,共有三处验证注册码耶!
|
:0045F578 55                      push ebp
:0045F579 8BEC                    mov ebp, esp
:0045F57B 83C4F4                  add esp, FFFFFFF4
:0045F57E 53                      push ebx
:0045F57F 33C9                    xor ecx, ecx
:0045F581 894DF4                  mov dword ptr [ebp-0C], ecx
:0045F584 8955F8                  mov dword ptr [ebp-08], edx
:0045F587 8945FC                  mov dword ptr [ebp-04], eax
:0045F58A 8B45FC                  mov eax, dword ptr [ebp-04]
:0045F58D E82248FAFF              call 00403DB4
:0045F592 8B45F8                  mov eax, dword ptr [ebp-08]
:0045F595 E81A48FAFF              call 00403DB4
:0045F59A 33C0                    xor eax, eax
:0045F59C 55                      push ebp
:0045F59D 6808F64500              push 0045F608
:0045F5A2 64FF30                  push dword ptr fs:[eax]
:0045F5A5 648920                  mov dword ptr fs:[eax], esp
:0045F5A8 8B45FC                  mov eax, dword ptr [ebp-04]
:0045F5AB E85046FAFF              call 00403C00
:0045F5B0 83F805                  cmp eax, 00000005
:0045F5B3 7C11                    jl 0045F5C6
:0045F5B5 8B55FC                  mov edx, dword ptr [ebp-04]
:0045F5B8 B820F64500              mov eax, 0045F620
:0045F5BD E8CA48FAFF              call 00403E8C
:0045F5C2 85C0                    test eax, eax
:0045F5C4 7504                    jne 0045F5CA

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0045F5B3(C)
|
:0045F5C6 33DB                    xor ebx, ebx
:0045F5C8 EB23                    jmp 0045F5ED

______________________________________________________________________________________________________________

现在,可以暴力修改了
:0045F6CA E8A9FEFFFF              call 0045F578    //NOP 掉(@Offset0005eacah)
:0047B2B4 E8BF42FEFF              call 0045F578    //NOP 掉(@Offset0007a6b4h)
:0047B3A8 E8CB41FEFF              call 0045F578    //NOP 掉(@Offset0007a7a8h)

另外,需要说明的是,英文原版是有自校验功能的,但这个汉化修改版已去除了自检验,所以不用理会。
之前曾有位大哥发贴说过一种办法,其实可以有两种办法:

//******************** Program Entry Point ********
.
.
.
:0047DC53 E80843FBFF              call 00431F60
:0047DC58 84C0                    test al, al
:0047DC5A EB05                    jmp 0047DC61   //方法一:英文原版为 jne 0047DC61,改为jmp 0047DC61.
:0047DC5C E86F5BF8FF              call 004037D0    //方法二:可以NOP掉此Call  (@Offset 7d05c)


经过修改后,随便填一个用户名,注册名有无均可以注册成功了!!YEAH...
**************************************************************************************************************


二、注册码篇
  虽然暴力破解成功了,但我又心血来潮想解它的注册码,毕竟注册码方便得多啦。
  经检查发现,刚才胡乱填的注册信息存入在C:\WINDOWS\WIN.INI中,格式如下:
[Mover98]
Name=?????
ID=??????

  好,动手破了它!先填好假的用户名和注册码。
[Mover98]
Name=Paul Young  (注意注意!!!用户名必须不少于5个字节并且必须包含1个空格以上,Why?Come on,let me tell you!)
ID=78787878


  上面我们已经分析过了,0045F6CA,0047B2B4,0047B3A8三处都是验证注册码的,但不知为什么,我只能在0045F6CA处设断,其余两个不行,不过不要紧,破解继续。
  由于该软件是在启动时读取WIN.INI的信息来判断你是否为注册用户的,当然是在上面这三处判断啦,所以先用TRW 2000 下bpx 0045f6ca,g,退出,运行Mover98,中断在:0045F6CA call 0045F578处(D EAX or D EDX 可以发现它你填的用户名和注册码),F8进入,F10单步跟踪...

:0045F578 55                      push ebp
:0045F579 8BEC                    mov ebp, esp
:0045F57B 83C4F4                  add esp, FFFFFFF4
:0045F57E 53                      push ebx
:0045F57F 33C9                    xor ecx, ecx
:0045F581 894DF4                  mov dword ptr [ebp-0C], ecx
:0045F584 8955F8                  mov dword ptr [ebp-08], edx
:0045F587 8945FC                  mov dword ptr [ebp-04], eax
:0045F58A 8B45FC                  mov eax, dword ptr [ebp-04]
:0045F58D E82248FAFF              call 00403DB4
:0045F592 8B45F8                  mov eax, dword ptr [ebp-08]
:0045F595 E81A48FAFF              call 00403DB4
:0045F59A 33C0                    xor eax, eax
:0045F59C 55                      push ebp
:0045F59D 6808F64500              push 0045F608
:0045F5A2 64FF30                  push dword ptr fs:[eax]
:0045F5A5 648920                  mov dword ptr fs:[eax], esp
:0045F5A8 8B45FC                  mov eax, dword ptr [ebp-04]
:0045F5AB E85046FAFF              call 00403C00        //验证用户名
:0045F5B0 83F805                  cmp eax, 00000005  //不能小于5位
:0045F5B3 7C11                    jl 0045F5C6
:0045F5B5 8B55FC                  mov edx, dword ptr [ebp-04]
:0045F5B8 B820F64500              mov eax, 0045F620
:0045F5BD E8CA48FAFF              call 00403E8C      //D EDX =用户名,D EAX= (空格!!!)
:0045F5C2 85C0                    test eax, eax
:0045F5C4 7504                    jne 0045F5CA      //用户名不包含空格则跳(没有空格时显示no jump,有空格则jump)

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0045F5B3(C)
|
:0045F5C6 33DB                    xor ebx, ebx     //没有空格跳到此玩完
:0045F5C8 EB23                    jmp 0045F5ED

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0045F5C4(C)
|
:0045F5CA 8B45FC                  mov eax, dword ptr [ebp-04]
:0045F5CD E85AFFFFFF              call 0045F52C
:0045F5D2 8D55F4                  lea edx, dword ptr [ebp-0C]
:0045F5D5 E81A81FAFF              call 004076F4
:0045F5DA 8B45F4                  mov eax, dword ptr [ebp-0C]    //D EAX=真注册码(下面几处也可以)
:0045F5DD 8B55F8                  mov edx, dword ptr [ebp-08]
:0045F5E0 E82B47FAFF              call 00403D10
:0045F5E5 7504                    jne 0045F5EB
:0045F5E7 B301                    mov bl, 01
:0045F5E9 EB02                    jmp 0045F5ED

  看来,做一名 Cracker 有时真需要比女孩子更细心才行呀!!!!!
______________________________________________________________________________________________________________

欢迎光临我的网络小屋

"Cracker 初体验"

http://paulyoung.yeah.net