Board logo

标题: [推荐]《超级解霸3000》破解教程 [打印本页]

作者: lp乌鸦    时间: 2004-3-29 17:35     标题: [推荐]《超级解霸3000》破解教程

清风幻影《独孤九剑》中的一篇初级破解文章(转贴)
====================================================
对象:《超级解霸3000》英雄版
工具:  SoftIce 4.05 for Win9x(动态跟踪)
            UltraEdit-32 (十六进制编辑)
一、软件下载与安装
二、分析程序注册部分代码
运行AuthReg.exe注册程序,按如图1所示输入用户名,随意注册码如1111-2222-3333-4444,(此时若按确定会出现如图2所示注册失败对话框)按Ctrl+D切入WinIce窗口,下万能断点bpx hmemcpy。然后Ctrl+D返回,单击确定。
程序中断后按G 回车 4次,然后按8下F12来到如下注册码比较程序段
  
================================================================
注册码比较程序段
================
0167:0040243F  LEA       EAX,[ESP+04]
0167:00402443  PUSH      EAX        ;将输入的注册码压入堆栈  
0167:00402444  PUSH      0040AD60   ;将输入的用户名压入堆栈
0167:00402449  CALL      00403440   ;调用注册码判断子程序
0167:0040244E  NEG       EAX
......
运行到0167:00402449  CALL      00403440   ;调用注册码判断子程序
这一行时按F8跟踪进去来到如下子程序
请您参看注释,分析一下这段程序!不再赘述!
=================================================================
注册码比较子程序
===============
0167:00403440  SUB       ESP,20  
0167:00403443  XOR       EAX,EAX
0167:00403445  MOV       ECX,00000008
0167:0040344A  PUSH      EBX  
0167:0040344B  PUSH      ESI
0167:0040344C  PUSH      EDI  
0167:0040344D  LEA       EDI,[ESP+0C]
0167:00403451  REPZ STOSD  
0167:00403453  MOV       EAX,[ESP+30]  
0167:00403457  XOR       EDI,EDI
0167:00403459  PUSH      EAX  
0167:0040345A  CALL      00403630  
0167:0040345F  MOV       [ESP+10],EAX
0167:00403463  ADD       ESP,04  
0167:00403466  LEA       ESI,[EDI+ESP+0C]  
0167:0040346A  MOVSX     EAX,BYTE PTR [ESI]  
0167:0040346D  CMP       EAX,41            ;将输入的注册码大写转换为小写  
0167:00403470  JL        0040347A
0167:00403472  CMP       EAX,5A
0167:00403475  JG        0040347A
0167:00403477  ADD       EAX,20
0167:0040347A  PUSH      EAX
0167:0040347B  INC       EDI
0167:0040347C  CALL      00403700          ;生成第1组注册码
0167:00403481  ADD       ESP,04
0167:00403484  MOV       [ESI],AL
0167:00403486  CMP       EDI,04  
0167:00403489  JL        00403466
0167:0040348B  XOR       ECX,ECX
0167:0040348D  MOV       ESI,[ESP+34]
0167:00403491  MOVSX     EAX,BYTE PTR [ECX+ESI]  
0167:00403495  CMP       EAX,41         ;将计算出的注册码大写转换为小写  
0167:00403498  JL        004034A2
0167:0040349A  CMP       EAX,5A   
0167:0040349D  JG        004034A2
0167:0040349F  ADD       EAX,20  
0167:004034A2  MOVSX     EDX,BYTE PTR [ECX+ESP+0C]   
0167:004034A7  CMP       EDX,EAX (每次比较第1组4个字节中的一个字节)  
0167:004034A9  JNZ       004035DB(不相等就注册失败)
0167:004034AF  INC       ECX  
0167:004034B0  CMP       ECX,04   (循环比较4个字节)
0167:004034B3  JL        00403491
0167:004034B5  MOV       EAX,[ESP+0C]  
0167:004034B9  XOR       EBX,EBX
0167:004034BB  LEA       EDX,[EAX*4+EAX]
0167:004034BE  LEA       EAX,[EDX*2+EAX]
0167:004034C1  ADD       EAX,EAX  
0167:004034C3  MOV       [ESP+10],EAX  
0167:004034C7  LEA       EDI,[EBX+ESP+10]  
0167:004034CB  MOV       AL,[EDI]  
0167:004034CD  PUSH      EAX  
0167:004034CE  PUSH      EBX  
0167:004034CF  INC       EBX  
0167:004034D0  CALL      00403610  
0167:004034D5  ADD       ESP,08  
0167:004034D8  XOR       ECX,ECX
0167:004034DA  MOV       CL,AL  
0167:004034DC  PUSH      ECX  
0167:004034DD  CALL      00403700  
0167:004034E2  ADD       ESP,04
0167:004034E5  MOV       [EDI],AL
0167:004034E7  CMP       EBX,04  
0167:004034EA  JL        004034C7
0167:004034EC  XOR       ECX,ECX  
0167:004034EE  MOVSX     EAX,BYTE PTR [ECX+ESI+05]  
0167:004034F3  CMP       EAX,41  
0167:004034F6  JL        00403500   
0167:004034F8  CMP       EAX,5A   
0167:004034FB  JG        00403500  
0167:004034FD  ADD       EAX,20  
0167:00403500  MOVSX     EDX,BYTE PTR [ECX+ESP+10]  
0167:00403505  CMP       EDX,EAX    (比较第2组4个字节)  
0167:00403507  JNZ       004035E6   (不相等就注册失败)
0167:0040350D  INC       ECX
0167:0040350E  CMP       ECX,04
0167:00403511  JL        004034EE  
0167:00403513  MOV       EAX,[ESP+10]
0167:00403517  MOV       ECX,[ESP+10]  
0167:0040351B  XOR       EAX,[ESP+0C]  
0167:0040351F  XOR       EBX,EBX   
0167:00403521  ADD       EAX,08   
0167:00403524  LEA       EDX,[ECX*2+ECX]  
0167:00403527  IMUL      EAX,[ESP+0C]  
0167:0040352C  ADD       EAX,EDX  
0167:0040352E  MOV       [ESP+14],EAX  
0167:00403532  LEA       EDI,[EBX+ESP+14]
0167:00403536  INC       EBX
0167:00403537  MOVSX     EAX,BYTE PTR [EDI]  
0167:0040353A  PUSH      EAX   
0167:0040353B  CALL      00403700  
0167:00403540  ADD       ESP,04
0167:00403543  MOV       [EDI],AL
0167:00403545  CMP       EBX,04  
0167:00403548  JL        00403532
0167:0040354A  XOR       ECX,ECX
0167:0040354C  MOVSX     EAX,BYTE PTR [ECX+ESI+0A]   
0167:00403551  CMP       EAX,41         
0167:00403554  JL        0040355E
0167:00403556  CMP       EAX,5A  
0167:00403559  JG        0040355E  
0167:0040355B  ADD       EAX,20  
0167:0040355E  MOVSX     EDX,BYTE PTR [ECX+ESP+14]
0167:00403563  CMP       EDX,EAX     (比较第3组4个字节)
0167:00403565  JNZ       004035F1    (不相等就注册失败)  
0167:0040356B  INC       ECX
0167:0040356C  CMP       ECX,04
0167:0040356F  JL        0040354C
0167:00403571  MOV       EAX,[ESP+10]  
0167:00403575  MOV       ECX,[ESP+14]  
0167:00403579  IMUL      EAX,[ESP+14]
0167:0040357E  ADD       EAX,05
0167:00403581  LEA       EDX,[ECX*2+ECX]  
0167:00403584  IMUL      EAX,[ESP+0C]   
0167:00403589  XOR       EDI,EDI  
0167:0040358B  LEA       EAX,[EDX*2+EAX]  
0167:0040358E  MOV       [ESP+18],EAX   
0167:00403592  LEA       EBX,[EDI+ESP+18]     
0167:00403596  INC       EDI
0167:00403597  MOVSX     EAX,BYTE PTR [EBX]  
0167:0040359A  PUSH      EAX
0167:0040359B  CALL      00403700   
0167:004035A0  ADD       ESP,04  
0167:004035A3  MOV       [EBX],AL  
0167:004035A5  CMP       EDI,04   
0167:004035A8  JL        00403592  
0167:004035AA  XOR       ECX,ECX   
0167:004035AC  MOVSX     EAX,BYTE PTR [ECX+ESI+0F]
0167:004035B1  CMP       EAX,41
0167:004035B4  JL        004035BE
0167:004035B6  CMP       EAX,5A   
0167:004035B9  JG        004035BE
0167:004035BB  ADD       EAX,20   
0167:004035BE  MOVSX     EDX,BYTE PTR [ECX+ESP+18]  
0167:004035C3  CMP       EDX,EAX   (比较第4组4个字节)
0167:004035C5  JNZ       004035FC   (不相等就注册失败)                        
0167:004035C7  INC       ECX      
0167:004035C8  CMP       ECX,04   
0167:004035CB  JL        004035AC  
0167:004035CD  MOV       EAX,00000001   (EAX为1注册成功)
0167:004035D2  POP       EDI  
0167:004035D3  POP       ESI   
0167:004035D4  POP       EBX  
0167:004035D5  ADD       ESP,20  
0167:004035D8  RET       0008   
0167:004035DB  XOR       EAX,EAX
0167:004035DD  POP       EDI   
0167:004035DE  POP       ESI   
0167:004035DF  POP       EBX   
0167:004035E0  ADD       ESP,20  
0167:004035E3  RET       0008   (注册失败)  
0167:004035E6  XOR       EAX,EAX
0167:004035E8  POP       EDI
0167:004035E9  POP       ESI
0167:004035EA  POP       EBX  
0167:004035EB  ADD       ESP,20   
0167:004035EE  RET       0008    (注册失败)  
0167:004035F1  XOR       EAX,EAX   
0167:004035F3  POP       EDI   
0167:004035F4  POP       ESI  
0167:004035F5  POP       EBX  
0167:004035F6  ADD       ESP,20  
0167:004035F9  RET       0008 (注册失败)
0167:004035FC  XOR       EAX,EAX  
0167:004035FE  POP       EDI  
0167:004035FF  POP       ESI  
0167:00403600  POP       EBX  
0167:00403601  ADD       ESP,20   
0167:00403604  RET       0008    (注册失败)     
通过跟踪分析上面的程序段,我们当然可以通过修改程序流程,在内存中找到正确的注册码。但我们要把这个程序改造成一个万能注册机。
三、改造AuthReg.exe程序为万能注册机
㈠原理和代码
将每组数据比较的部分改成用真注册码覆盖假注册码,最后返回注册成功!程序会将正确的注册码记入注册表,即可实现万能注册!
修改方法如下,请您慢慢体会,不再赘述!
----------------------------------------
1、第1组注册码比较核心代码
0167:004034A2  MOVSX     EDX,BYTE PTR [ECX+ESP+0C]  (一次复制1个字节)
0167:004034A7  CMP       EDX,EAX (比较第1组4个字节)  
0167:004034A9  JNZ       004035DB(不相等就注册失败)
对应16进制代码
0F BE 54 0C 0C 3B D0 0F 85 2C 01 00 00
修改为
用计算出的真的第1组注册码覆盖我们输入的第1组注册码
0167:004034A2  MOVSX     EDX,WORD PTR [ECX+ESP+0C] (一次复制2个字节)
0167:004034A7  MOV       [ESI+ECX],DX
0167:004034AB  INC       ECX (因为一次复制了2个字节,故ECX的值多加一次)
0167:004034AC  NOP   
0167:004034AD  NOP  
0167:004034AE  NOP   
对应的16进制代码
0F BF 54 0C 0C 66 89 14 31 41 90 90 90
---------------------------------------
2、第2组注册码比较核心代码
0167:00403500  MOVSX     EDX,BYTE PTR [ECX+ESP+10]  
0167:00403505  CMP       EDX,EAX  
0167:00403507  JNZ       004035E6
对应的16进制代码
0F BE 54 0C 10 3B D0 0F 85 D9 00 00 00
修改为
用计算出的真的第2组注册码覆盖我们输入的第2组注册码
0167:00403500  MOVSX     EDX,WORD PTR [ECX+ESP+10]  
0167:00403505  MOV       [ESI+ECX+05],DX  
0167:0040350A  INC       ECX  
0167:0040350B  NOP   
0167:0040350C  NOP  
对应的16进制代码
0F BF 54 0C 10 66 89 54 31 05 41 90 90
--------------------------------------
3、第3组注册码比较核心代码
0167:0040355E  MOVSX     EDX,BYTE PTR [ECX+ESP+14]  
0167:00403563  CMP       EDX,EAX  
0167:00403565  JNZ       004035F1  
对应的16进制代码
0F BE 54 0C 14 3B D0 0F 85 86 00 00 00
修改为
用计算出的真的第3注册码覆盖我们输入的第3注册码
0167:0040355E  MOVSX     EDX,WORD PTR [ECX+ESP+14]  
0167:00403563  MOV       [ECX+ESI+0A],DX   
0167:00403568  INC       ECX     
0167:00403569  NOP      
0167:0040356A  NOP        
对应的16进制代码
0F BF 54 0C 14 66 89 54 0E 0A 41 90 90
---------------------------------------
4、第4组注册码比较核心代码
0167:004035C3  CMP       EDX,EAX   (比较第4组4个字节)
0167:004035C5  JNZ       004035FC   (不相等就注册失败)                           
0167:004035C7  INC       ECX      
0167:004035C8  CMP       ECX,04   
0167:004035CB  JL        004035AC  
0167:004035CD  MOV       EAX,00000001   (注册成功从这里返回)
0167:004035D2  POP       EDI  
0167:004035D3  POP       ESI   
0167:004035D4  POP       EBX  
0167:004035D5  ADD       ESP,20  
0167:004035D8  RET       0008   
0167:004035DB  XOR       EAX,EAX
0167:004035DD  POP       EDI   
0167:004035DE  POP       ESI   
0167:004035DF  POP       EBX   
0167:004035E0  ADD       ESP,20  
0167:004035E3  RET       0008   (注册失败返回)  
对应的16进制代码
0F BE 54 0C 18 3B D0 75 35 41 83 F9 04 7C DF B8  
01 00 00 00 5F 5E 5B 83 C4 20 C2 08 00 33 C0 5F
5E 5B 83 C4 20 C2 08 00
修改为
用计算出的真的第4组注册码覆盖我们输入的第4组注册码,并将EAX置1返回
0167:004035BE  MOVSX     EDX,WORD PTR [ECX+ESP+18]  
0167:004035C3  MOV       [ESI+ECX+0F],DX   
0167:004035C8  INC       ECX      
0167:004035C9  INC       ECX   
0167:004035CA  CMP       ECX,04   
0167:004035CD  JL        004035AC  
0167:004035CF  MOV       EAX,00000001  
0167:004035D4  NOP      
0167:004035D5  NOP     
0167:004035D6  NOP     
0167:004035D7  NOP   
0167:004035D8  NOP   
0167:004035D9  NOP   
0167:004035DA  NOP   
0167:004035DB  NOP   
0167:004035DC  NOP  
0167:004035DD  POP       EDI   
0167:004035DE  POP       ESI   
0167:004035DF  POP       EBX   
0167:004035E0  ADD       ESP,20  
0167:004035E3  RET       0008  
对应的16进制代码
0F BF 54 0C 18 66 89 54 31 0F 41 41 83 F9 04 7C  
DD B8 01 00 00 00 90 90 90 90 90 90 90 90 90 5F  
5E 5B 83 C4 20 C2 08 00
---------------------------------------------
㈡修改文件
这个程序没有加壳,故可以直接修改。用16进制编辑软件打开AuthReg.exe
查找:0F BE 54 0C 0C 3B D0 0F 85 2C 01 00 00
改成:0F BF 54 0C 0C 66 89 14 31 41 90 90 90
查找:0F BE 54 0C 10 3B D0 0F 85 D9 00 00 00
改成:0F BF 54 0C 10 66 89 54 31 05 41 90 90
查找:0F BE 54 0C 14 3B D0 0F 85 86 00 00 00
改成:0F BF 54 0C 14 66 89 54 0E 0A 41 90 90
查找:0F BE 54 0C 18 3B D0 75 35 41 83 F9 04 7C DF B8  
01 00 00 00 5F 5E 5B 83 C4 20 C2 08 00 33 C0 5F
5E 5B 83 C4 20 C2 08 00
改成:0F BF 54 0C 18 66 89 54 31 0F 41 41 83 F9 04 7C  
DD B8 01 00 00 00 90 90 90 90 90 90 90 90 90 5F  
5E 5B 83 C4 20 C2 08 00
修改完毕后,存盘返回。
再次运行AuthReg.exe,输入用户名user,随便输入注册码,单击确定,就会弹出如图3所示注册成功对话框。并且会把正确的注册码显示出来!(注:本教程仅限于技术研讨,绝不散发注册码和注册机,故将对话框中正确的注册码抹去!)这个程序已经被改造成为一个万能注册机了。
作者: 墓志铭    时间: 2004-4-1 10:08     标题: [推荐]《超级解霸3000》破解教程

    谢谢,有帮助……
作者: 墓志铭    时间: 2004-4-6 18:28     标题: [推荐]《超级解霸3000》破解教程






欢迎光临 黑色海岸线论坛 (http://bbs.thysea.com/) Powered by Discuz! 7.2