题目:菜鸟破解《豪杰超级解霸3000英雄版》--注册算法
软件名称:豪杰超级解霸3000英雄版
软件来源:电脑爱好者合订本2003光盘
软件平台: Win9x/Me/NT4/2000 
软件简介:
《豪杰超级解霸3000英雄版》化腐朽为神奇,使模糊变清晰!解霸网络版播放器支持在线播放,全面兼容各种格式,新增支持WMV,WMA,ASF,MOV等多种文件,支持DVD导航,支持RM9文件的播放。
《豪杰超级解霸3000英雄版》是豪杰公司在2003年精心制作解霸系列的最新版本,在音视频技术功能上全新提升的更新版本。全新的界面方案,保留豪杰系列软件的方便易用性,并且提高了色彩和美观度。

破解目的:寻找注册码和注册算法
破解难度:相对简单
工具:softice,ollydbg,PEID

引子:
今天借了一个VCD,想休息一下,放松一下,结果用豪杰超级解霸3000英雄版播放的时候,每隔几分钟就善意提醒你注册。不堪其扰,我干脆趁今天晚上干掉它算了。也算是献给看雪论坛坛友的一份新年礼物!:)今天跟朋友出去玩了,晚上回来比较累,但是还是破解了这个软件。这个软件还是不错的,大家可能都知道了:)。该软件的帮助文件里面描述了强大的功能。我这里就不说了:)。软件我破解完了后,才发现最后一个关键地方给出了注册码。不过我是为了追踪算法,不是单纯为了找到注册码的,所以我还是完整地跟踪了下来,希望对菜鸟有启发。下面开始工作吧!希望你耐心看完俺的拙文!!可能比较长,因为算法就是比较长的。

拿出PEID检查一下是否带壳??一看不错,是VC编写的软件,不带壳,比较友善啊:)。下面运行HERO3000,弹出一个提示框,让你输入用户名和注册码,当然注册码的格式是固定的,由四段码组成的。HERO3000是调用的一个专门的注册程序,名字是AuthReg.exe。我输入wanggang, 注册码是1111-2222-3333-4444,当然不包括那个短杠的。Ctrl+D唤出SoftICE, 有大侠建议我用OD,我现在还不上手呢。先用SICE吧。:)希望大侠能够写出用OD破解的文章。下断点bpx hmemcpy,F5返回HERO对话框点击确定按钮,被拦住。大概按8次F12,然后按F10N次,来到下面代码处:
1. 从4023D0到0040243D代码段为读入你输入的假注册码,读用户名则在另外一个地方,40177A的CALL内。总共读取四段注册码。
004023D0  /$ 83EC 40         SUB ESP,40
004023D3  |. 8B0D 28AC4000   MOV ECX,DWORD PTR DS:[40AC28]
004023D9  |. 56              PUSH ESI
004023DA  |. 8B35 8C714000   MOV ESI,DWORD PTR DS:[<&USER32.GetWindowTextA>]
004023E0  |. 8D4424 04       LEA EAX,DWORD PTR SS:[ESP+4]  
004023E4  |. 6A 08           PUSH 8
004023E6  |. 50              PUSH EAX
004023E7  |. 51              PUSH ECX
004023E8  |. FFD6            CALL ESI         //读注册码第一段
004023EA  |. A1 24AC4000     MOV EAX,DWORD PTR DS:[40AC24]  //我们停在这里。
004023EF  |. 8D5424 09       LEA EDX,DWORD PTR SS:[ESP+9]
004023F3  |. 6A 08           PUSH 8
004023F5  |. 52              PUSH EDX
004023F6  |. 50              PUSH EAX
004023F7  |. FFD6            CALL ESI         //读注册码第二段         
004023F9  |. 8B15 30AC4000   MOV EDX,DWORD PTR DS:[40AC30]
004023FF  |. 8D4C24 0E       LEA ECX,DWORD PTR SS:[ESP+E]
00402403  |. 6A 08           PUSH 8
00402405  |. 51              PUSH ECX
00402406  |. 52              PUSH EDX
00402407  |. FFD6            CALL ESI         //读注册码第三段
00402409  |. 8B0D 2CAC4000   MOV ECX,DWORD PTR DS:[40AC2C]
0040240F  |. 8D4424 13       LEA EAX,DWORD PTR SS:[ESP+13]
00402413  |. 6A 08           PUSH 8
00402415  |. 50              PUSH EAX
00402416  |. 51              PUSH ECX
00402417  |. FFD6            CALL ESI         //读注册码第四段
00402419  |. 8B15 20AC4000   MOV EDX,DWORD PTR DS:[40AC20]
0040241F  |. 68 00010000     PUSH 100
00402424  |. B0 2D           MOV AL,2D
00402426  |. 68 60AD4000     PUSH AUTHREG.0040AD60
0040242B  |. 52              PUSH EDX
0040242C  |. 884424 1E       MOV BYTE PTR SS:[ESP+1E],AL
00402430  |. 884424 19       MOV BYTE PTR SS:[ESP+19],AL
00402434  |. 884424 14       MOV BYTE PTR SS:[ESP+14],AL
00402438  |. C64424 23 00    MOV BYTE PTR SS:[ESP+23],0
0040243D  |. FFD6            CALL ESI        // 把短杠"-"放在注册码的第5,10,15个位置。
0040243F  |. 8D4424 04       LEA EAX,DWORD PTR SS:[ESP+4]
00402443  |. 50              PUSH EAX        //注册码地址进栈
00402444  |. 68 60AD4000     PUSH AUTHREG.0040AD60   //用户名地址进栈
00402449  |. E8 F20F0000     CALL AUTHREG.00403440    //这个CALL就是根据用户名计算注册码的地方。F8跟入
0040244E  |. F7D8            NEG EAX
00402450  |. 1BC0            SBB EAX,EAX
00402452  |. 8D4C24 04       LEA ECX,DWORD PTR SS:[ESP+4]
00402456  |. F7D8            NEG EAX
00402458  |. 51              PUSH ECX
00402459  |. 68 60AD4000     PUSH AUTHREG.0040AD60
0040245E  |. A3 20D84000     MOV DWORD PTR DS:[40D820],EAX
00402463  |. E8 38000000     CALL AUTHREG.004024A0        //这个CALL是把注册信息写入注册表内                                                            。里面好象很长!!
00402468  |. 8B4424 50       MOV EAX,DWORD PTR SS:[ESP+50]
0040246C  |. 8B0D 44AD4000   MOV ECX,DWORD PTR DS:[40AD44]
00402472  |. 83C4 08         ADD ESP,8
00402475  |. 8D5424 04       LEA EDX,DWORD PTR SS:[ESP+4]
00402479  |. 52              PUSH EDX
0040247A  |. 68 30234000     PUSH AUTHREG.00402330
0040247F  |. 50              PUSH EAX
00402480  |. 6A 69           PUSH 69
00402482  |. 51              PUSH ECX
00402483  |. FF15 B8714000   CALL DWORD PTR DS:[<&USER32.DialogBoxParamA>]  //一开始这个                CALL显示错误信息,如果注册成功,则用这个CALL显示正确信息。实在是妙啊!!!
00402489  |. A1 20D84000     MOV EAX,DWORD PTR DS:[40D820]
0040248E  |. 5E              POP ESI
0040248F  |. 83C4 40         ADD ESP,40
00402492  \. C3              RETN
=============================================
3.我们在00402449 跟入这个函数,代码如下:
00403440  /$ 83EC 20         SUB ESP,20
00403443  |. 33C0            XOR EAX,EAX
00403445  |. B9 08000000     MOV ECX,8
0040344A  |. 53              PUSH EBX
0040344B  |. 56              PUSH ESI
0040344C  |. 57              PUSH EDI
0040344D  |. 8D7C24 0C       LEA EDI,DWORD PTR SS:[ESP+C]
00403451  |. F3:AB           REP STOS DWORD PTR ES:[EDI]
00403453  |. 8B4424 30       MOV EAX,DWORD PTR SS:[ESP+30]
00403457  |. 33FF            XOR EDI,EDI
00403459  |. 50              PUSH EAX
0040345A  |. E8 D1010000     CALL AUTHREG.00403630   //此CALL对输入的用户名计算,获得计算注册码的初始值。见后面分析。这个就是第一个注册码段的真实值。
0040345F  |. 894424 10       MOV DWORD PTR SS:[ESP+10],EAX
00403463  |. 83C4 04         ADD ESP,4
00403466  |> 8D743C 0C       /LEA ESI,DWORD PTR SS:[ESP+EDI+C] //此处到00403489是检查输入的假注册码是否是大写字符或空格?
0040346A  |. 0FBE06          |MOVSX EAX,BYTE PTR DS:[ESI]    
0040346D  |. 83F8 41         |CMP EAX,41           
00403470  |. 7C 08           |JL SHORT AUTHREG.0040347A
00403472  |. 83F8 5A         |CMP EAX,5A
00403475  |. 7F 03           |JG SHORT AUTHREG.0040347A
00403477  |. 83C0 20         |ADD EAX,20        //如果EAX是大写字母,给EAX加20,修正为小写字符。
0040347A  |> 50              |PUSH EAX
0040347B  |. 47              |INC EDI
0040347C  |. E8 7F020000     |CALL AUTHREG.00403700      //此CALL比较每个字符是否是41h,5Ah,6Fh,30h,61h,7Ah,31h,39h,3Fh等,可以看出这些值是比较特殊的字符。
00403481  |. 83C4 04         |ADD ESP,4
00403484  |. 8806            |MOV BYTE PTR DS:[ESI],AL   //把变换后的假注册码依次保存起来
00403486  |. 83FF 04         |CMP EDI,4
00403489  |.^7C DB           \JL SHORT AUTHREG.00403466  //未完,继续循环。
0040348B  |. 33C9            XOR ECX,ECX  //ECX为计数器,初始化为0。
0040348D  |. 8B7424 34       MOV ESI,DWORD PTR SS:[ESP+34] //此处到004034B3比较真假注册码。
00403491  |> 0FBE040E        /MOVSX EAX,BYTE PTR DS:[ESI+ECX]  //依次取变换后的用户名字符(真注册码)。
00403495  |. 83F8 41         |CMP EAX,41                 //比较是否为41h
00403498  |. 7C 08           |JL SHORT AUTHREG.004034A2
0040349A  |. 83F8 5A         |CMP EAX,5A                 //比较是否为5Ah
0040349D  |. 7F 03           |JG SHORT AUTHREG.004034A2
0040349F  |. 83C0 20         |ADD EAX,20     //如果EAX是大写字母,给EAX加20,修正为小写字符。
004034A2  |> 0FBE540C 0C     |MOVSX EDX,BYTE PTR SS:[ESP+ECX+C] //把假注册码字符符号扩展后,依次送入EDX。
004034A7  |. 3BD0            |CMP EDX,EAX    //真假注册码进行比较!
004034A9  |. 0F85 2C010000   |JNZ AUTHREG.004035DB  //不相等则通向地狱。此处一定用E命令,把你的假注册码修正为计算出来的真注册码。
004034AF  |. 41              |INC ECX        //ECX为计数器增1。
004034B0  |. 83F9 04         |CMP ECX,4      //比较是否到达4??
004034B3  |.^7C DC           \JL SHORT AUTHREG.00403491  //ECX没有到4,继续循环。
004034B5  |. 8B4424 0C       MOV EAX,DWORD PTR SS:[ESP+C]
004034B9  |. 33DB            XOR EBX,EBX     //以下开始计算第二个注册码段。
004034BB  |. 8D1480          LEA EDX,DWORD PTR DS:[EAX+EAX*4]  //EDX=5*EAX
004034BE  |. 8D0450          LEA EAX,DWORD PTR DS:[EAX+EDX*2]  //EAX=EDX*2+EAX
004034C1  |. 03C0            ADD EAX,EAX        //EAX=EAX*2
004034C3  |. 894424 10       MOV DWORD PTR SS:[ESP+10],EAX    //保存这个结果。
004034C7  |> 8D7C1C 10       /LEA EDI,DWORD PTR SS:[ESP+EBX+10] //取前面计算的真注册码的地址
004034CB  |. 8A07            |MOV AL,BYTE PTR DS:[EDI]   //把第二段依次送入AL。
004034CD  |. 50              |PUSH EAX
004034CE  |. 53              |PUSH EBX
004034CF  |. 43              |INC EBX
004034D0  |. E8 3B010000     |CALL AUTHREG.00403610   //此CALL依次对注册码计算变换,得到第二段注册码。
004034D5  |. 83C4 08         |ADD ESP,8
004034D8  |. 33C9            |XOR ECX,ECX
004034DA  |. 8AC8            |MOV CL,AL
004034DC  |. 51              |PUSH ECX
004034DD  |. E8 1E020000     |CALL AUTHREG.00403700   //此CALL比较每个字符是否是41h,5Ah,6Fh,30h,61h,7Ah,31h,39h,3Fh等,可以看出这些值是比较特殊的字符。
004034E2  |. 83C4 04         |ADD ESP,4
004034E5  |. 8807            |MOV BYTE PTR DS:[EDI],AL  //把变换好的值送回原来的位置。
004034E7  |. 83FB 04         |CMP EBX,4
004034EA  |.^7C DB           \JL SHORT AUTHREG.004034C7  //未完,继续循环。
004034EC  |. 33C9            XOR ECX,ECX      //计数器清零。
004034EE  |> 0FBE440E 05     /MOVSX EAX,BYTE PTR DS:[ESI+ECX+5] //此处到00403511第二段注册码进行比较。
004034F3  |. 83F8 41         |CMP EAX,41
004034F6  |. 7C 08           |JL SHORT AUTHREG.00403500
004034F8  |. 83F8 5A         |CMP EAX,5A
004034FB  |. 7F 03           |JG SHORT AUTHREG.00403500
004034FD  |. 83C0 20         |ADD EAX,20
00403500  |> 0FBE540C 10     |MOVSX EDX,BYTE PTR SS:[ESP+ECX+10]
00403505  |. 3BD0            |CMP EDX,EAX
00403507  |. 0F85 D9000000   |JNZ AUTHREG.004035E6
0040350D  |. 41              |INC ECX
0040350E  |. 83F9 04         |CMP ECX,4
00403511  |.^7C DB           \JL SHORT AUTHREG.004034EE
00403513  |. 8B4424 10       MOV EAX,DWORD PTR SS:[ESP+10] //第二段注册码送EAX
00403517  |. 8B4C24 10       MOV ECX,DWORD PTR SS:[ESP+10] //同时第二段注册码送ECX
0040351B  |. 334424 0C       XOR EAX,DWORD PTR SS:[ESP+C]  //第二段和第一段异或运算。
0040351F  |. 33DB            XOR EBX,EBX
00403521  |. 83C0 08         ADD EAX,8     //EAX=EAX+8。
00403524  |. 8D1449          LEA EDX,DWORD PTR DS:[ECX+ECX*2] //EDX=3*ECX
00403527  |. 0FAF4424 0C     IMUL EAX,DWORD PTR SS:[ESP+C]    // EAX=EAX*(第一段注册码)
0040352C  |. 03C2            ADD EAX,EDX     //EAX=EAX+EDX
0040352E  |. 894424 14       MOV DWORD PTR SS:[ESP+14],EAX    //EAX保存
00403532  |> 8D7C1C 14       /LEA EDI,DWORD PTR SS:[ESP+EBX+14] 
00403536  |. 43              |INC EBX
00403537  |. 0FBE07          |MOVSX EAX,BYTE PTR DS:[EDI]
0040353A  |. 50              |PUSH EAX
0040353B  |. E8 C0010000     |CALL AUTHREG.00403700 //功能见上面注释。
00403540  |. 83C4 04         |ADD ESP,4
00403543  |. 8807            |MOV BYTE PTR DS:[EDI],AL
00403545  |. 83FB 04         |CMP EBX,4
00403548  |.^7C E8           \JL SHORT AUTHREG.00403532
0040354A  |. 33C9            XOR ECX,ECX
0040354C  |> 0FBE440E 0A     /MOVSX EAX,BYTE PTR DS:[ESI+ECX+A] //下面到00403548 比较第三段注册码!
00403551  |. 83F8 41         |CMP EAX,41
00403554  |. 7C 08           |JL SHORT AUTHREG.0040355E
00403556  |. 83F8 5A         |CMP EAX,5A
00403559  |. 7F 03           |JG SHORT AUTHREG.0040355E
0040355B  |. 83C0 20         |ADD EAX,20
0040355E  |> 0FBE540C 14     |MOVSX EDX,BYTE PTR SS:[ESP+ECX+14]
00403563  |. 3BD0            |CMP EDX,EAX
00403565  |. 0F85 86000000   |JNZ AUTHREG.004035F1
0040356B  |. 41              |INC ECX
0040356C  |. 83F9 04         |CMP ECX,4
0040356F  |.^7C DB           \JL SHORT AUTHREG.0040354C
下面开始计算第四段注册码:
00403571  |. 8B4424 10       MOV EAX,DWORD PTR SS:[ESP+10]   //第二段送EAX
00403575  |. 8B4C24 14       MOV ECX,DWORD PTR SS:[ESP+14]   //第三段送ECX
00403579  |. 0FAF4424 14     IMUL EAX,DWORD PTR SS:[ESP+14]  //EAX=EAX*(第三段注册码)
0040357E  |. 83C0 05         ADD EAX,5     //EAX=EAX+5
00403581  |. 8D1449          LEA EDX,DWORD PTR DS:[ECX+ECX*2] //EDX=3*ECX
00403584  |. 0FAF4424 0C     IMUL EAX,DWORD PTR SS:[ESP+C]    // EAX=EAX*(第一段注册码)
00403589  |. 33FF            XOR EDI,EDI
0040358B  |. 8D0450          LEA EAX,DWORD PTR DS:[EAX+EDX*2] //EAX=EAX+2*EDX
0040358E  |. 894424 18       MOV DWORD PTR SS:[ESP+18],EAX    //保存EAX。
00403592  |> 8D5C3C 18       /LEA EBX,DWORD PTR SS:[ESP+EDI+18] //下面这个循环处理你输入第四段假注册码。
00403596  |. 47              |INC EDI
00403597  |. 0FBE03          |MOVSX EAX,BYTE PTR DS:[EBX]
0040359A  |. 50              |PUSH EAX
0040359B  |. E8 60010000     |CALL AUTHREG.00403700
004035A0  |. 83C4 04         |ADD ESP,4
004035A3  |. 8803            |MOV BYTE PTR DS:[EBX],AL
004035A5  |. 83FF 04         |CMP EDI,4
004035A8  |.^7C E8           \JL SHORT AUTHREG.00403592
004035AA  |. 33C9            XOR ECX,ECX       //下面这个循环进行第四段注册码的比较。
004035AC  |> 0FBE440E 0F     /MOVSX EAX,BYTE PTR DS:[ESI+ECX+F]
004035B1  |. 83F8 41         |CMP EAX,41
004035B4  |. 7C 08           |JL SHORT AUTHREG.004035BE
004035B6  |. 83F8 5A         |CMP EAX,5A
004035B9  |. 7F 03           |JG SHORT AUTHREG.004035BE
004035BB  |. 83C0 20         |ADD EAX,20
004035BE  |> 0FBE540C 18     |MOVSX EDX,BYTE PTR SS:[ESP+ECX+18]
004035C3  |. 3BD0            |CMP EDX,EAX
004035C5  |. 75 35           |JNZ SHORT AUTHREG.004035FC
004035C7  |. 41              |INC ECX
004035C8  |. 83F9 04         |CMP ECX,4
004035CB  |.^7C DF           \JL SHORT AUTHREG.004035AC
004035CD  |. B8 01000000     MOV EAX,1     //成功注册标志
004035D2  |. 5F              POP EDI
*
*略掉10多行
*
004035FC  |> 33C0            XOR EAX,EAX  //如果失败则EAX清零。:(
004035FE  |. 5F              POP EDI
004035FF  |. 5E              POP ESI
00403600  |. 5B              POP EBX
00403601  |. 83C4 20         ADD ESP,20
00403604  \. C2 0800         RETN 8
=============================================
4.F8跟踪0040345A处的CALL,代码如下:
00403630  /$ 81EC 00020000   SUB ESP,200
00403636  |. 33C0            XOR EAX,EAX
00403638  |. B9 80000000     MOV ECX,80
0040363D  |. 53              PUSH EBX
0040363E  |. 56              PUSH ESI
0040363F  |. 33DB            XOR EBX,EBX
00403641  |. 57              PUSH EDI
00403642  |. 55              PUSH EBP
00403643  |. 8D7C24 10       LEA EDI,DWORD PTR SS:[ESP+10]
00403647  |. F3:AB           REP STOS DWORD PTR ES:[EDI]
00403649  |. 8BB424 14020000 MOV ESI,DWORD PTR SS:[ESP+214]
00403650  |. 56              PUSH ESI  
00403651  |. FF15 F4704000   CALL DWORD PTR DS:[<&KERNEL32.lstrlenA>]  //取用户名串长
00403657  |. 3D 00020000     CMP EAX,200  //与200H比较,相信你用户名不会大于512个字符。
0040365C  |. 8BE8            MOV EBP,EAX
0040365E  |. 76 12           JBE SHORT AUTHREG.00403672
00403660  |. BD 00020000     MOV EBP,200
00403665  |. 8D7C24 10       LEA EDI,DWORD PTR SS:[ESP+10]
00403669  |. B9 80000000     MOV ECX,80
0040366E  |. F3:A5           REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]
00403670  |. EB 0C           JMP SHORT AUTHREG.0040367E
00403672  |> 8D4424 10       LEA EAX,DWORD PTR SS:[ESP+10]
00403676  |. 56              PUSH ESI
00403677  |. 50              PUSH EAX
00403678  |. FF15 E4704000   CALL DWORD PTR DS:[<&KERNEL32.lstrcpyA>] //用户名复制到其他地址。
0040367E  |> 8BC5            MOV EAX,EBP
00403680  |. 99              CDQ    //EDX清零。
00403681  |. 83E2 03         AND EDX,3        //EDX与3相与。
00403684  |. 03C2            ADD EAX,EDX
00403686  |. C1F8 02         SAR EAX,2        //EAX算术右移2位。
00403689  |. F7C5 03000000   TEST EBP,3  //EBP与3相与,改变标志位Z
0040368F  |. 8BF0            MOV ESI,EAX
00403691  |. 74 01           JE SHORT AUTHREG.00403694  //如果Z=1跳转。
00403693  |. 46              INC ESI
00403694  |> 33FF            XOR EDI,EDI    
00403696  |. 85ED            TEST EBP,EBP
00403698  |. 7E 17           JLE SHORT AUTHREG.004036B1
0040369A  |> 8B443C 10       /MOV EAX,DWORD PTR SS:[ESP+EDI+10]//用户名地址送EAX
0040369E  |. 50              |PUSH EAX   //用户名地址进栈
0040369F  |. 57              |PUSH EDI
004036A0  |. 47              |INC EDI
004036A1  |. E8 6AFFFFFF     |CALL AUTHREG.00403610   
004036A6  |. 88443C 17       |MOV BYTE PTR SS:[ESP+EDI+17],AL
004036AA  |. 83C4 08         |ADD ESP,8
004036AD  |. 3BFD            |CMP EDI,EBP
004036AF  |.^7C E9           \JL SHORT AUTHREG.0040369A //循环处理用户名。
004036B1  |> 33FF            XOR EDI,EDI
004036B3  |. 85F6            TEST ESI,ESI
004036B5  |. 7E 1A           JLE SHORT AUTHREG.004036D1
004036B7  |> 035CBC 10       /ADD EBX,DWORD PTR SS:[ESP+EDI*4+10]//由用户名转换得到的16进制数累加到EBX内。
004036BB  |. 8BC7            |MOV EAX,EDI
004036BD  |. 83E0 1F         |AND EAX,1F
004036C0  |. 47              |INC EDI
004036C1  |. 50              |PUSH EAX
004036C2  |. 53              |PUSH EBX
004036C3  |. E8 18000000     |CALL AUTHREG.004036E0  //用户名4位一组进行变换。
004036C8  |. 83C4 08         |ADD ESP,8
004036CB  |. 8BD8            |MOV EBX,EAX
004036CD  |. 3BFE            |CMP EDI,ESI
004036CF  |.^7C E6           \JL SHORT AUTHREG.004036B7 //循环取下一组用户名
004036D1  |> 8BC3            MOV EAX,EBX
004036D3  |. 5D              POP EBP
004036D4  |. 5F              POP EDI
004036D5  |. 5E              POP ESI
004036D6  |. 5B              POP EBX
004036D7  |. 81C4 00020000   ADD ESP,200
004036DD  \. C3              RETN
=============================================
后记:
终于用了1个小时跟踪,毕竟是自己独立完成的,我可是没参考任何大侠的文章。我接着趁热打铁用了1个小时写完这个破解教程。感觉这次破解很顺利,如愿以尝了!心里非常高兴!所以写了这篇文章,跟大家分享我的愉快!但我没有骄傲哦!令我感到意外的是,超级解霸的保护也太弱了,与这个大名鼎鼎的软件公司好象不太匹配!不过这是好事啊!没有了保护,就没有了破解!:)希望菜鸟能够从中吸取点什么,我就足矣了!非常感谢您能够耐心看完,毕竟看其他人的文章可能有些不适应的。;)
注册码的分析过程已经很明显了,写注册机那是水到渠成的事情了。我以后会自己练习写的。:)祝菜鸟学习进步!破解愉快!
另外,OD的确不错,显示的注解比较清晰。
总结:
Username :      wanggang
Registercode:   7zq3-sqq3-3ydq-tb3r

这个软件在注册表内的HLM\Software\Classes\写入如下键:超级解霸3000等。
  
完成日期:2006年1月1日凌晨1:30

Qduwg
qduwg@163.com