【破文作者】   rdsnow[BCG][PYG]
【 E-mail 】   rdsnow@163.com
【 作者QQ 】   83757177
【文章题目】   两款网页特效软件的注册
【软件名称】   ××网页特效制作管理精灵王 V3.75
               ××特效梦工厂 V2.0

----------------------------------------------------------------------------------------------
【加密方式】   序列号
【破解工具】   FlyOD V1.10、W32DASM V8.93
【软件限制】   NAG、使用次数限制、功能限制
【破解平台】   Microsoft Windows XP SP2

----------------------------------------------------------------------------------------------
 
【文章简介】

最近,单位要建立一个网站,以扩大宣传,要偶来负责,偶网页制作水平一般,于是找来了几个网页特效的程序,很多都是免费的,但也有几个共享软件需要注册,作者宣称没有采用强劲的加密算法,正好让偶等菜鸟学习一下。考虑这种类型的程序制作作者需要花费大量的精力去收集整理,所以隐去程序名,支持一下程序的作者。程序的注册很简单,高手就不要看了。

----------------------------------------------------------------------------------------------
【破解过程】

××网页特效制作管理精灵王 V3.75

加了ASPack 2.12 -> Alexey Solodovnikov的外壳,AspackDie V1.41脱掉,Borland Delphi 6.0 - 7.0编写。

004C0786   .  8D55 FC         LEA EDX,DWORD PTR SS:[EBP-4]
004C0789   .  8B83 2C030000   MOV EAX,DWORD PTR DS:[EBX+32C]
004C078F   .  E8 DC37F8FF     CALL Unpacked.00443F70            ;  读取注册码
004C0794   .  837D FC 00      CMP DWORD PTR SS:[EBP-4],0
004C0798   .  74 14           JE SHORT Unpacked.004C07AE
004C079A   .  8D55 F8         LEA EDX,DWORD PTR SS:[EBP-8]
004C079D   .  8B83 30030000   MOV EAX,DWORD PTR DS:[EBX+330]
004C07A3   .  E8 C837F8FF     CALL Unpacked.00443F70            ;  读取用户名
004C07A8   .  837D F8 00      CMP DWORD PTR SS:[EBP-8],0
004C07AC   .  75 1D           JNZ SHORT Unpacked.004C07CB
004C07AE   >  6A 40           PUSH 40
004C07B0   .  B9 38094C00     MOV ECX,Unpacked.004C0938
004C07B5   .  BA 40094C00     MOV EDX,Unpacked.004C0940         ;  对话框:用户名和注册码都必须输入,请检查!
004C07BA   .  A1 9C744C00     MOV EAX,DWORD PTR DS:[4C749C]
004C07BF   .  8B00            MOV EAX,DWORD PTR DS:[EAX]
004C07C1   .  E8 8639FAFF     CALL Unpacked.0046414C
004C07C6   .  E9 2D010000     JMP Unpacked.004C08F8
004C07CB   >  33C0            XOR EAX,EAX
004C07CD   .  55              PUSH EBP
004C07CE   .  68 E7084C00     PUSH Unpacked.004C08E7
004C07D3   .  64:FF30         PUSH DWORD PTR FS:[EAX]
004C07D6   .  64:8920         MOV DWORD PTR FS:[EAX],ESP
004C07D9   .  A1 348E4C00     MOV EAX,DWORD PTR DS:[4C8E34]
004C07DE   .  E8 F9FEFFFF     CALL Unpacked.004C06DC            ;  这个 Call就是校验注册码了
004C07E3   .  84C0            TEST AL,AL
004C07E5   .  0F84 B0000000   JE Unpacked.004C089B
004C07EB   .  B2 01           MOV DL,1
004C07ED   .  A1 C8164700     MOV EAX,DWORD PTR DS:[4716C8]
004C07F2   .  E8 D10FFBFF     CALL Unpacked.004717C8
004C07F7   .  8BF0            MOV ESI,EAX
004C07F9   .  BA 02000080     MOV EDX,80000002
004C07FE   .  8BC6            MOV EAX,ESI
004C0800   .  E8 6310FBFF     CALL Unpacked.00471868
004C0805   .  B1 01           MOV CL,1
004C0807   .  BA 6C094C00     MOV EDX,Unpacked.004C096C         ;  ASCII "Software\dingdongsoft\ddnettxw"
004C080C   .  8BC6            MOV EAX,ESI
004C080E   .  E8 B910FBFF     CALL Unpacked.004718CC
004C0813   .  8D55 F4         LEA EDX,DWORD PTR SS:[EBP-C]
004C0816   .  8B83 2C030000   MOV EAX,DWORD PTR DS:[EBX+32C]
004C081C   .  E8 4F37F8FF     CALL Unpacked.00443F70
004C0821   .  8B4D F4         MOV ECX,DWORD PTR SS:[EBP-C]
004C0824   .  BA 94094C00     MOV EDX,Unpacked.004C0994         ;  ASCII "sn"
004C0829   .  8BC6            MOV EAX,ESI
004C082B   .  E8 3812FBFF     CALL Unpacked.00471A68
004C0830   .  8D55 F0         LEA EDX,DWORD PTR SS:[EBP-10]
004C0833   .  A1 9C744C00     MOV EAX,DWORD PTR DS:[4C749C]
004C0838   .  8B00            MOV EAX,DWORD PTR DS:[EAX]
004C083A   .  E8 A532FAFF     CALL Unpacked.00463AE4
004C083F   .  8B55 F0         MOV EDX,DWORD PTR SS:[EBP-10]
004C0842   .  A1 7C734C00     MOV EAX,DWORD PTR DS:[4C737C]
004C0847   .  8B00            MOV EAX,DWORD PTR DS:[EAX]
004C0849   .  E8 5237F8FF     CALL Unpacked.00443FA0
004C084E   .  8D55 E8         LEA EDX,DWORD PTR SS:[EBP-18]
004C0851   .  8B83 30030000   MOV EAX,DWORD PTR DS:[EBX+330]
004C0857   .  E8 1437F8FF     CALL Unpacked.00443F70
004C085C   .  8B45 E8         MOV EAX,DWORD PTR SS:[EBP-18]
004C085F   .  8D55 EC         LEA EDX,DWORD PTR SS:[EBP-14]
004C0862   .  E8 35FCFFFF     CALL Unpacked.004C049C
004C0867   .  A1 7C734C00     MOV EAX,DWORD PTR DS:[4C737C]
004C086C   .  8B00            MOV EAX,DWORD PTR DS:[EAX]
004C086E   .  8B80 9C030000   MOV EAX,DWORD PTR DS:[EAX+39C]
004C0874   .  BA A0094C00     MOV EDX,Unpacked.004C09A0         ;  已经注册
004C0879   .  E8 BE50F9FF     CALL Unpacked.0045593C
004C087E   .  A1 7C734C00     MOV EAX,DWORD PTR DS:[4C737C]
004C0883   .  8B00            MOV EAX,DWORD PTR DS:[EAX]
004C0885   .  8B80 9C030000   MOV EAX,DWORD PTR DS:[EAX+39C]
004C088B   .  33D2            XOR EDX,EDX
004C088D   .  E8 6E51F9FF     CALL Unpacked.00455A00
004C0892   .  8BC3            MOV EAX,EBX
004C0894   .  E8 7700FAFF     CALL Unpacked.00460910
004C0899   .  EB 42           JMP SHORT Unpacked.004C08DD
004C089B   >  6A 10           PUSH 10
004C089D   .  B9 38094C00     MOV ECX,Unpacked.004C0938
004C08A2   .  BA AC094C00     MOV EDX,Unpacked.004C09AC         ;  用户名和注册码输入错误,请联系作者注册!
004C08A7   .  A1 9C744C00     MOV EAX,DWORD PTR DS:[4C749C]
004C08AC   .  8B00            MOV EAX,DWORD PTR DS:[EAX]
004C08AE   .  E8 9938FAFF     CALL Unpacked.0046414C

进入004C07DE     CALL Unpacked.004C06DC

………………
004C06F9  |.  8B83 2C030000   MOV EAX,DWORD PTR DS:[EBX+32C]
004C06FF  |.  E8 6C38F8FF     CALL Unpacked.00443F70            ;  计算假注册码的长度
004C0704  |.  8B45 FC         MOV EAX,DWORD PTR SS:[EBP-4]
004C0707  |.  50              PUSH EAX
004C0708  |.  8D55 F4         LEA EDX,DWORD PTR SS:[EBP-C]
004C070B  |.  8B83 28030000   MOV EAX,DWORD PTR DS:[EBX+328]
004C0711  |.  E8 5A38F8FF     CALL Unpacked.00443F70            ;  计算机器码的长度
004C0716  |.  8B45 F4         MOV EAX,DWORD PTR SS:[EBP-C]
004C0719  |.  8D55 F8         LEA EDX,DWORD PTR SS:[EBP-8]
004C071C  |.  E8 BFFEFFFF     CALL Unpacked.004C05E0            ;  计算注册码得到真注册码
004C0721  |.  8B55 F8         MOV EDX,DWORD PTR SS:[EBP-8]
004C0724  |.  58              POP EAX
004C0725  |.  E8 AE43F4FF     CALL Unpacked.00404AD8            ;  比较真假注册码
004C072A  |.  75 04           JNZ SHORT Unpacked.004C0730       ;  关键跳
004C072C  |.  B3 01           MOV BL,1                          ;  这句代码让Call返回1
004C072E  |.  EB 02           JMP SHORT Unpacked.004C0732
004C0730  |>  33DB            XOR EBX,EBX
004C0732  |>  33C0            XOR EAX,EAX                       ;  这句代码让Call返回0

进入004C071C     CALL Unpacked.004C05E0

………………
004C05FF  |.  55              PUSH EBP
004C0600  |.  68 CD064C00     PUSH Unpacked.004C06CD
004C0605  |.  64:FF30         PUSH DWORD PTR FS:[EAX]
004C0608  |.  64:8920         MOV DWORD PTR FS:[EAX],ESP
004C060B  |.  33F6            XOR ESI,ESI
004C060D  |.  8B45 FC         MOV EAX,DWORD PTR SS:[EBP-4]
004C0610  |.  E8 7F43F4FF     CALL Unpacked.00404994            ;  取得机器码的长度,作为循环次数
004C0615  |.  8BD8            MOV EBX,EAX
004C0617  |.  85DB            TEST EBX,EBX
004C0619  |.  7E 32           JLE SHORT Unpacked.004C064D
004C061B  |.  C745 F4 0100000>MOV DWORD PTR SS:[EBP-C],1
004C0622  |>  8D45 F0         /LEA EAX,DWORD PTR SS:[EBP-10]
004C0625  |.  50              |PUSH EAX
004C0626  |.  B9 01000000     |MOV ECX,1
004C062B  |.  8B55 F4         |MOV EDX,DWORD PTR SS:[EBP-C]
004C062E  |.  8B45 FC         |MOV EAX,DWORD PTR SS:[EBP-4]
004C0631  |.  E8 B645F4FF     |CALL Unpacked.00404BEC
004C0636  |.  8B45 F0         |MOV EAX,DWORD PTR SS:[EBP-10]
004C0639  |.  E8 4E45F4FF     |CALL Unpacked.00404B8C
004C063E  |.  8A00            |MOV AL,BYTE PTR DS:[EAX]
004C0640  |.  25 FF000000     |AND EAX,0FF
004C0645  |.  03F0            |ADD ESI,EAX
004C0647  |.  FF45 F4         |INC DWORD PTR SS:[EBP-C]
004C064A  |.  4B              |DEC EBX
004C064B  |.^ 75 D5           \JNZ SHORT Unpacked.004C0622      ;  循环求得机器码各位字符的ASC的和
004C064D  |>  8BC6            MOV EAX,ESI
004C064F  |.  B9 0C000000     MOV ECX,0C
004C0654  |.  99              CDQ
004C0655  |.  F7F9            IDIV ECX                          ;  求得的和除以0xC
004C0657  |.  69C0 DD870C00   IMUL EAX,EAX,0C87DD               ;  商乘以0xC87DD
004C065D  |.  8D55 EC         LEA EDX,DWORD PTR SS:[EBP-14]
004C0660  |.  E8 5788F4FF     CALL Unpacked.00408EBC            ;  转化为十进制字符串,得到字符串一
004C0665  |.  FF75 EC         PUSH DWORD PTR SS:[EBP-14]
004C0668  |.  8D55 E8         LEA EDX,DWORD PTR SS:[EBP-18]
004C066B  |.  6BC6 13         IMUL EAX,ESI,13                   ;  机器码各个字符的ASC的和乘以0x13
004C066E  |.  E8 4988F4FF     CALL Unpacked.00408EBC            ;  转化为十进制字符串,得到字符串二
004C0673  |.  FF75 E8         PUSH DWORD PTR SS:[EBP-18]
004C0676  |.  8D55 E4         LEA EDX,DWORD PTR SS:[EBP-1C]
004C0679  |.  8D86 DD870C00   LEA EAX,DWORD PTR DS:[ESI+C87DD]  ;  机器码各个字符的ASC的和加上0xC87DD
004C067F  |.  E8 3888F4FF     CALL Unpacked.00408EBC            ;  转化为十进制字符串,得到字符串三
004C0684  |.  FF75 E4         PUSH DWORD PTR SS:[EBP-1C]
004C0687  |.  8D55 E0         LEA EDX,DWORD PTR SS:[EBP-20]
004C068A  |.  69C6 D1020000   IMUL EAX,ESI,2D1                  ;  机器码各个字符的ASC的和乘以0x2D1
004C0690  |.  05 BE070000     ADD EAX,7BE                       ;  再加上0x7BE
004C0695  |.  E8 2288F4FF     CALL Unpacked.00408EBC            ;  转化为十进制字符串,得到字符串四
004C069A  |.  FF75 E0         PUSH DWORD PTR SS:[EBP-20]
004C069D  |.  8B45 F8         MOV EAX,DWORD PTR SS:[EBP-8]
004C06A0  |.  BA 04000000     MOV EDX,4
004C06A5  |.  E8 AA43F4FF     CALL Unpacked.00404A54            ;  连接上面得到的四个十进制字符串,这里得到的就是注册码了
004C06AA  |.  33C0            XOR EAX,EAX
004C06AC  |.  5A              POP EDX
004C06AD  |.  59              POP ECX
004C06AE  |.  59              POP ECX
004C06AF  |.  64:8910         MOV DWORD PTR FS:[EAX],EDX
004C06B2  |.  68 D4064C00     PUSH Unpacked.004C06D4
004C06B7  |>  8D45 E0         LEA EAX,DWORD PTR SS:[EBP-20]
004C06BA  |.  BA 05000000     MOV EDX,5
004C06BF  |.  E8 3C40F4FF     CALL Unpacked.00404700
004C06C4  |.  8D45 FC         LEA EAX,DWORD PTR SS:[EBP-4]
004C06C7  |.  E8 1040F4FF     CALL Unpacked.004046DC
004C06CC  \.  C3              RETN

应该看到注册码是怎样形成的了;

【注册机源码】

void CMy001Dlg::OnOK() 
{
  // TODO: Add extra validation here
  
  //CDialog::OnOK();
  UpdateData(true);
  long i,n=0;
  char cMechine[20],SN1[20],SN2[20],SN3[20],SN4[20];
  strcpy(cMechine,m_Edit1);

  //求机器码各个字符的ASC的总和
  for (i=0;i<m_Edit1.GetLength ();i++)  n += cMechine[i];

  //求注册码的第一部分
  i=n/12;
  i *= 0xC87DD;
  _itoa(i,SN1,10);

  //求注册码的第二部分
  i=n*19;
  _itoa(i,SN2,10);

  //求注册码的第三部分
  i=n+0xC87DD;
  _itoa(i,SN3,10);

  //求注册码的第四部分
  i=n*0x2D1+0x7BE;
  _itoa(i,SN4,10);

  //连接得到注册码
  m_Edit2="";  
  m_Edit2 = m_Edit2+SN1+SN2+SN3+SN4;
  UpdateData(false);
}

----------------------------------------------------------------------------------------------

××特效梦工厂 V2.0

UPX 0.89.6 - 1.02 / 1.05 - 1.24 -> Markus & Laszlo的外壳,用UPX自己脱掉,Borland Delphi 6.0 - 7.0编写

004E11D4  |.  8D55 F8         LEA EDX,DWORD PTR SS:[EBP-8]
004E11D7  |.  8B86 E4090000   MOV EAX,DWORD PTR DS:[ESI+9E4]
004E11DD  |.  E8 7ECDF5FF     CALL JSBuilde.0043DF60            ;  取得注册码
004E11E2  |.  837D F8 00      CMP DWORD PTR SS:[EBP-8],0
004E11E6  |.  75 1F           JNZ SHORT JSBuilde.004E1207
004E11E8  |.  B8 60134E00     MOV EAX,JSBuilde.004E1360
004E11ED  |.  E8 2A60F5FF     CALL JSBuilde.0043721C            ;  对话框:请输入注册码
004E11F2  |.  8B96 E4090000   MOV EDX,DWORD PTR DS:[ESI+9E4]
004E11F8  |.  A1 F8504F00     MOV EAX,DWORD PTR DS:[4F50F8]
004E11FD  |.  E8 127EF7FF     CALL JSBuilde.00459014
004E1202  |.  E9 1E010000     JMP JSBuilde.004E1325
004E1207  |>  8D55 FC         LEA EDX,DWORD PTR SS:[EBP-4]
004E120A  |.  8B86 E4090000   MOV EAX,DWORD PTR DS:[ESI+9E4]
004E1210  |.  E8 4BCDF5FF     CALL JSBuilde.0043DF60
004E1215  |.  8D55 F4         LEA EDX,DWORD PTR SS:[EBP-C]
004E1218  |.  8B86 E4090000   MOV EAX,DWORD PTR DS:[ESI+9E4]
004E121E  |.  E8 3DCDF5FF     CALL JSBuilde.0043DF60
004E1223  |.  8B45 F4         MOV EAX,DWORD PTR SS:[EBP-C]
004E1226  |.  E8 FD3AF2FF     CALL JSBuilde.00404D28            ;  计算注册码的长度作为循环次数
004E122B  |.  8BD0            MOV EDX,EAX
004E122D  |.  85D2            TEST EDX,EDX
004E122F  |.  7E 3C           JLE SHORT JSBuilde.004E126D
004E1231  |.  B8 01000000     MOV EAX,1
004E1236  |>  8B4D FC         /MOV ECX,DWORD PTR SS:[EBP-4]
004E1239  |.  8A4C01 FF       |MOV CL,BYTE PTR DS:[ECX+EAX-1]
004E123D  |.  80F9 30         |CMP CL,30
004E1240  |.  72 08           |JB SHORT JSBuilde.004E124A
004E1242  |.  8B5D FC         |MOV EBX,DWORD PTR SS:[EBP-4]
004E1245  |.  80F9 39         |CMP CL,39
004E1248  |.  76 1F           |JBE SHORT JSBuilde.004E1269
004E124A  |>  B8 7C134E00     |MOV EAX,JSBuilde.004E137C        ;  对话框:注册码输入有误,请重新输入!
004E124F  |.  E8 C85FF5FF     |CALL JSBuilde.0043721C
004E1254  |.  8B96 E4090000   |MOV EDX,DWORD PTR DS:[ESI+9E4]
004E125A  |.  A1 F8504F00     |MOV EAX,DWORD PTR DS:[4F50F8]
004E125F  |.  E8 B07DF7FF     |CALL JSBuilde.00459014
004E1264  |.  E9 BC000000     |JMP JSBuilde.004E1325
004E1269  |>  40              |INC EAX
004E126A  |.  4A              |DEC EDX
004E126B  |.^ 75 C9           \JNZ SHORT JSBuilde.004E1236      ;  用循环检验注册码是否全部是数字
004E126D  |>  8D55 F0         LEA EDX,DWORD PTR SS:[EBP-10]
004E1270  |.  8B86 E0090000   MOV EAX,DWORD PTR DS:[ESI+9E0]
004E1276  |.  E8 E5CCF5FF     CALL JSBuilde.0043DF60            ;  取得机器码
004E127B  |.  8B45 F0         MOV EAX,DWORD PTR SS:[EBP-10]
004E127E  |.  E8 A17EF2FF     CALL JSBuilde.00409124            ;  机器码的字符串转化为整数
004E1283  |.  E8 FC9BFEFF     CALL JSBuilde.004CAE84            ;  计算真注册码
004E1288  |.  8BD8            MOV EBX,EAX
004E128A  |.  8B45 FC         MOV EAX,DWORD PTR SS:[EBP-4]
004E128D  |.  E8 927EF2FF     CALL JSBuilde.00409124            ;  假注册码的字符串转化为整数
004E1292  |.  3BD8            CMP EBX,EAX
004E1294  |.  0F85 81000000   JNZ JSBuilde.004E131B             ;  关键跳转
004E129A  |.  B2 01           MOV DL,1
004E129C  |.  A1 B8C64600     MOV EAX,DWORD PTR DS:[46C6B8]
004E12A1  |.  E8 12B5F8FF     CALL JSBuilde.0046C7B8
004E12A6  |.  8BD8            MOV EBX,EAX
004E12A8  |.  BA 02000080     MOV EDX,80000002
004E12AD  |.  8BC3            MOV EAX,EBX
004E12AF  |.  E8 A4B5F8FF     CALL JSBuilde.0046C858
004E12B4  |.  33C9            XOR ECX,ECX
004E12B6  |.  BA A0134E00     MOV EDX,JSBuilde.004E13A0         ;  ASCII "System\CurrentControlSet\Services\Class\knightsoft\JSBuilder"
004E12BB  |.  8BC3            MOV EAX,EBX
004E12BD  |.  E8 D6B6F8FF     CALL JSBuilde.0046C998
004E12C2  |.  8D55 EC         LEA EDX,DWORD PTR SS:[EBP-14]
004E12C5  |.  8B86 E0090000   MOV EAX,DWORD PTR DS:[ESI+9E0]
004E12CB  |.  E8 90CCF5FF     CALL JSBuilde.0043DF60
004E12D0  |.  8B45 EC         MOV EAX,DWORD PTR SS:[EBP-14]
004E12D3  |.  E8 4C7EF2FF     CALL JSBuilde.00409124
004E12D8  |.  E8 A79BFEFF     CALL JSBuilde.004CAE84
004E12DD  |.  8BC8            MOV ECX,EAX
004E12DF  |.  BA E8134E00     MOV EDX,JSBuilde.004E13E8         ;  ASCII "registecode"
004E12E4  |.  8BC3            MOV EAX,EBX
004E12E6  |.  E8 FDB7F8FF     CALL JSBuilde.0046CAE8
004E12EB  |.  8BC3            MOV EAX,EBX
004E12ED  |.  E8 36B5F8FF     CALL JSBuilde.0046C828
004E12F2  |.  8BC3            MOV EAX,EBX
004E12F4  |.  E8 0B2AF2FF     CALL JSBuilde.00403D04
004E12F9  |.  B8 FC134E00     MOV EAX,JSBuilde.004E13FC         ;  ××特效梦工厂 XP 注册成功,谢谢您对本软件的支持,您的认可是我最大的动力!
004E12FE  |.  E8 195FF5FF     CALL JSBuilde.0043721C
004E1303  |.  B8 4C144E00     MOV EAX,JSBuilde.004E144C
004E1308  |.  E8 0F5FF5FF     CALL JSBuilde.0043721C
004E130D  |.  A1 A0844E00     MOV EAX,DWORD PTR DS:[4E84A0]
004E1312  |.  8B00            MOV EAX,DWORD PTR DS:[EAX]
004E1314  |.  E8 0BCDF7FF     CALL JSBuilde.0045E024
004E1319  |.  EB 0A           JMP SHORT JSBuilde.004E1325
004E131B  |>  B8 78144E00     MOV EAX,JSBuilde.004E1478         ;  错误,××特效梦工厂 XP 注册认证失败
004E1320  |.  E8 F75EF5FF     CALL JSBuilde.0043721C

进入004E1283     CALL JSBuilde.004CAE84

004CAE9B  |.  BB D9D10E00     MOV EBX,0ED1D9                    ;  EBX赋初值
004CAEA0  |.  8D45 FC         LEA EAX,DWORD PTR SS:[EBP-4]
004CAEA3  |.  BA 68AF4C00     MOV EDX,JSBuilde.004CAF68         ;  ASCII "wangshuang"
004CAEA8  |.  E8 5B9CF3FF     CALL JSBuilde.00404B08
004CAEAD  |.  8B45 FC         MOV EAX,DWORD PTR SS:[EBP-4]
004CAEB0  |.  E8 739EF3FF     CALL JSBuilde.00404D28            ;  取得字符串"wangshuang"的长度作为循环次数
004CAEB5  |.  85C0            TEST EAX,EAX
004CAEB7  |.  7E 1B           JLE SHORT JSBuilde.004CAED4
004CAEB9  |.  BA 01000000     MOV EDX,1
004CAEBE  |>  8B4D FC         /MOV ECX,DWORD PTR SS:[EBP-4]
004CAEC1  |.  0FB64C11 FF     |MOVZX ECX,BYTE PTR DS:[ECX+EDX-1>
004CAEC6  |.  8D0C89          |LEA ECX,DWORD PTR DS:[ECX+ECX*4] ;  ASC[i]×5
004CAEC9  |.  8D0C89          |LEA ECX,DWORD PTR DS:[ECX+ECX*4] ;  ASC[i]再×5,也就是×25
004CAECC  |.  03D9            |ADD EBX,ECX                      ;  结果加到EBX里
004CAECE  |.  03DE            |ADD EBX,ESI                      ;  机器码也加到EBX里
004CAED0  |.  42              |INC EDX
004CAED1  |.  48              |DEC EAX
004CAED2  |.^ 75 EA           \JNZ SHORT JSBuilde.004CAEBE      ;  EBX保存循环结果,继续参与下面的计算
004CAED4  |>  8D45 FC         LEA EAX,DWORD PTR SS:[EBP-4]
004CAED7  |.  BA 7CAF4C00     MOV EDX,JSBuilde.004CAF7C         ;  ASCII "yaoyuan"
004CAEDC  |.  E8 279CF3FF     CALL JSBuilde.00404B08
004CAEE1  |.  8B45 FC         MOV EAX,DWORD PTR SS:[EBP-4]
004CAEE4  |.  E8 3F9EF3FF     CALL JSBuilde.00404D28            ;  取得字符串"yaoyuan"的长度作为循环次数
004CAEE9  |.  85C0            TEST EAX,EAX
004CAEEB  |.  7E 1B           JLE SHORT JSBuilde.004CAF08
004CAEED  |.  BA 01000000     MOV EDX,1
004CAEF2  |>  8B4D FC         /MOV ECX,DWORD PTR SS:[EBP-4]
004CAEF5  |.  0FB64C11 FF     |MOVZX ECX,BYTE PTR DS:[ECX+EDX-1>
004CAEFA  |.  8D0C89          |LEA ECX,DWORD PTR DS:[ECX+ECX*4] ;  ASC[i]×5
004CAEFD  |.  8D0C89          |LEA ECX,DWORD PTR DS:[ECX+ECX*4] ;  ASC[i]再×5,也就是×25
004CAF00  |.  03D9            |ADD EBX,ECX                      ;  结果加到EBX里
004CAF02  |.  03DE            |ADD EBX,ESI                      ;  机器码也加到EBX里
004CAF04  |.  42              |INC EDX
004CAF05  |.  48              |DEC EAX
004CAF06  |.^ 75 EA           \JNZ SHORT JSBuilde.004CAEF2      ;  EBX保存循环结果,继续参与下面的计算
004CAF08  |>  8D45 FC         LEA EAX,DWORD PTR SS:[EBP-4]
004CAF0B  |.  BA 8CAF4C00     MOV EDX,JSBuilde.004CAF8C         ;  ASCII "JSBuilder"
004CAF10  |.  E8 F39BF3FF     CALL JSBuilde.00404B08
004CAF15  |.  8B45 FC         MOV EAX,DWORD PTR SS:[EBP-4]
004CAF18  |.  E8 0B9EF3FF     CALL JSBuilde.00404D28            ;  取得字符串"JSBuilder"的长度,准备循环
004CAF1D  |.  85C0            TEST EAX,EAX
004CAF1F  |.  7E 1B           JLE SHORT JSBuilde.004CAF3C
004CAF21  |.  BA 01000000     MOV EDX,1
004CAF26  |>  8B4D FC         /MOV ECX,DWORD PTR SS:[EBP-4]
004CAF29  |.  0FB64C11 FF     |MOVZX ECX,BYTE PTR DS:[ECX+EDX-1>
004CAF2E  |.  8D0C89          |LEA ECX,DWORD PTR DS:[ECX+ECX*4] ;  ASC[i]×5
004CAF31  |.  8D0C89          |LEA ECX,DWORD PTR DS:[ECX+ECX*4] ;  ASC[i]再×5,也就是×25
004CAF34  |.  03D9            |ADD EBX,ECX                      ;  结果加到EBX里
004CAF36  |.  03DE            |ADD EBX,ESI                      ;  机器码也加到EBX里
004CAF38  |.  42              |INC EDX
004CAF39  |.  48              |DEC EAX
004CAF3A  |.^ 75 EA           \JNZ SHORT JSBuilde.004CAF26      ;  EBX保存循环结果,转化为十进制字符串就是真注册码了
004CAF3C  |>  33C0            XOR EAX,EAX
004CAF3E  |.  5A              POP EDX
004CAF3F  |.  59              POP ECX
004CAF40  |.  59              POP ECX
004CAF41  |.  64:8910         MOV DWORD PTR FS:[EAX],EDX
004CAF44  |.  68 59AF4C00     PUSH JSBuilde.004CAF59
004CAF49  |>  8D45 FC         LEA EAX,DWORD PTR SS:[EBP-4]
004CAF4C  |.  E8 1F9BF3FF     CALL JSBuilde.00404A70
004CAF51  \.  C3              RETN

【注册机源码】

void CMy001Dlg::OnOK() 
{
  // TODO: Add extra validation here
  
  //CDialog::OnOK();

  UpdateData(true);
  int i;
  char cKey[50]={"wangshuangyaoyuanJSBuilder"};
  m_Edit2=0xED1D9;
  for(i=0;i<26;i++){
    m_Edit2 += (m_Edit1+cKey[i]*25);
  }
  UpdateData(false);
}

----------------------------------------------------------------------------------------------
【破解心得】

两个程序的注册信息保存在注册表中,具体在那儿看程序就知道了,注册过程都不是太复杂,不同的是××网页特效制作管理精灵王 V3.75,采用字符串比较真假注册码,而××特效梦工厂 V2.0,采用整数类型比较真假注册码,文章写完时发现××特效梦工厂 V2.0已经升级到V2.3了,好在没有改变注册过程。

----------------------------------------------------------------------------------------------
【破解声明】   我是一只小菜鸟,偶得一点心得,愿与大家分享:)

【版权声明】   本文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢! 
----------------------------------------------------------------------------------------------
                                                                     文章写于2005-6-7 23:31:11