标题:
[推荐]《超级解霸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