• 标 题:Quick CHM V2.4.9
  • 作 者:风马
  • 时 间:2003/01/15 04:55am
  • 链 接:http://bbs.pediy.com

目标软件:  Quick CHM V2.4.9

软件大小:  1061 KB

软件语言:  简体中文

软件类别:  共享版 / 安装制作

应用平台:  Win9x/NT/2000/XP

下载地址:  http://www.skycn.com/soft/6785.html

软件介绍:
   原名电子文档处理大师。是真正的所见即所得(WYSIWYG)CHM文件制作软件,内置简单易用的所见即所得网页编辑器,使你可以不必在两个软件之间切换,只使用一个软件就可以完成CHM文件的制作。软件采用html help workshop的格式保存和读取,使你不在为格式不同而烦恼。增强反编译功能,反编译后直接可以用QuickCHM读取,使你的工作更轻松。

使用工具:  TRW2000 v1.23

破解过程:

Hmemcpy 设断,来到:

0167:005017CE  MOV      EAX,[EBP-08]
0167:005017D1  MOVZX    EAX,BYTE [EAX+ESI-01]  / * 序列号倒序送入EAX * /
0167:005017D6  ADD      EAX,EBX                / * EAX 加上 EBX * /          
0167:005017D8  MOV      ECX,FF                 / * 0xFF 送入ECX * /
0167:005017DD  CDQ    
0167:005017DE  IDIV     ECX                    / * 整除 ECX * /
0167:005017E0  MOV      EBX,EDX                / * 余数送入 EBX * /
0167:005017E2  CMP      EDI,[EBP-10]           / * 和 0x4 比较 * /
0167:005017E5  JNL      005017EA               / * 大于就跳向 5017EA * /
0167:005017E7  INC      EDI                    / * 数据计数器加 1 * /
0167:005017E8  JMP      SHORT 005017EF
0167:005017EA  MOV      EDI,01                 / * 0x1 送入 ESI * /
0167:005017EF  MOV      EAX,[EBP-1C]
0167:005017F2  MOVZX    EAX,BYTE [EAX+EDI-01]  / * F、0、E、1 依次送入 EAX  * /
0167:005017F7  XOR      EBX,EAX                / * 和上面的余数做异或运算 * /
0167:005017F9  LEA      EAX,[EBP-14]
0167:005017FC  PUSH     EAX
0167:005017FD  MOV      [EBP-28],EBX
0167:00501800  MOV      BYTE [EBP-24],00
0167:00501804  LEA      EDX,[EBP-28]
0167:00501807  XOR      ECX,ECX
0167:00501809  MOV      EAX,005019B8
0167:0050180E  CALL     0040A3DC               / * 正确的序列号依次输出 * /
0167:00501813  LEA      EAX,[EBP-2C]
0167:00501816  PUSH     EAX
0167:00501817  MOV      EAX,[EBP-14]
0167:0050181A  CALL     00404D00
0167:0050181F  MOV      ECX,EAX
0167:00501821  MOV      EDX,[EBP-18]
0167:00501824  MOV      EAX,[EBP-0C]
0167:00501827  CALL     00404F60
0167:0050182C  MOV      EAX,[EBP-2C]
0167:0050182F  MOV      EDX,[EBP-14]
0167:00501832  CALL     00404E4C
0167:00501837  SETZ     [EBP-1D]
0167:0050183B  LEA      EAX,[EBP-30]
0167:0050183E  PUSH     EAX
0167:0050183F  MOV      EAX,[EBP-14]
0167:00501842  CALL     00404D00
0167:00501847  MOV      ECX,EAX
0167:00501849  MOV      EDX,[EBP-18]
0167:0050184C  MOV      EAX,[EBP-0C]
0167:0050184F  CALL     00404F60
0167:00501854  MOV      EDX,[EBP-30]
0167:00501857  MOV      EAX,[EBP-14]
0167:0050185A  CALL     00404E4C             / * 依次比较 * /
0167:0050185F  JNZ      0050186C
0167:00501861  MOV      EAX,[EBP-14]
0167:00501864  CALL     00404D00
0167:00501869  ADD      [EBP-18],EAX
0167:0050186C  DEC      ESI                  / * ESI 减 1 * /
0167:0050186D  TEST     ESI,ESI              / * 测试 ESI * /
0167:0050186F  JNZ      NEAR 005017CE        / * 不为0则向上循环 * /
0167:00501875  CMP      BYTE [EBP-1D],00    
0167:00501879  JZ       NEAR 00501958        / * 否则返回 * /  


最后总结:

以用户名:fengma 为例:

1:取用户名最后一个字母 a(0x61) ;

2:0x61 + 0x80;

3:步骤(2)的结果 MOD 0xFF ;

4:取数据 “FOE1” 的第一个字母 F,与步骤(3)做异或运算(取完则又返回地一个字母);

5:取用户名倒数第二个字母 m(0x6D) ;

……

OK,这下就可以写注册机了!:)


main()
{ char name[15];
 int i,a,b,c=0x80,len,temp_len,temp_data,data[4]={'F','0','E','1'};

 printf("**************************************************************\n");
 printf("*                    Quick CHM V2.4.9 Keygen                 *\n");
 printf("*                Made by fengma(fengma@2911.net)             *\n");
 printf("*                          2003-1-12                         *\n");
 printf("**************************************************************\n");

 printf("\nInput your name:");
 
 gets(name);
 len=strlen(name)-1;
 temp_len=len;
 temp_data=0;
 
 printf("\nYour number is:");
  for(i=0;i<=temp_len;i++)
  { a=name[len]+c;    
    b=(a%0xff);    
    c=b^data[temp_data];
    if(c<0x10)
      printf("0%X",c);
    else
      printf("%X",c);
    if(temp_data>=3)
temp_data=0;
    else
       temp_data++;
    len--;
  }
  printf("\n\nHave fan!\n\nBye!\n");
}

TurboC 2.0 编译通过。

小菜鸟,不足之处,请高手指点。

风马于 2003年1月15日凌晨5:05分