• 标 题:ZTZ-IE网络浏览器的破解与注册机,应付PETERCHEN用的 (8千字)
  • 作 者:伪装者[CCG]
  • 时 间:2001-8-11 10:48:35
  • 链 接:http://bbs.pediy.com

ZTZ-IE网络浏览器的破解与注册机
 
(版本1.8)
软件说明: 
  该软件是你快速打开、快速浏览网页的最佳浏览器软件,
该版本在原有功能基础上,添加了字体大小选项、设置为默
认浏览器等项功能,并添加了更多、更新的网址,使你访问
网页更加方便。进一步优化了源代码,稳定性进一步提高。
下载地址:http://202.99.189.4/ztz/ZTZ-IE.zip
使用工具:TRW2000
难度    :0.5 (10为最难,0为最易)
CRACKER :伪装者[BCG&&CCG]
目的    :学习破解一周年纪念+应付PETERCHEN那家伙
过程如下:
1、下载(废话)
2、安装(还是废话)
3、启动ZTZ-IE(……)
4、输入用户名、注册码,
  用户名:cracknow
  注册码:121212
5、启动TRW2000、BPX HMEMCPY
6、按确定,被拦截
7、BC *PMODULE,到ZTZ-IE部分(也叫领空)
8、N次F12(N=7 OR N=8)F9
9、一路F10,直到0167:0046C034 CALL 0046BD9C这行,因为这个CALL就是关键
  的计算注册码的CALL,F8跟进。为什么这么判断?有经验的看一眼下面有一个
  CALL+JNZ,应该就是注册码比较的部分了,没经验的接着F10,等着出错,记
  住位置然后下回在进来。
以下为计算注册码的部分,在这之前有判断用户名长度是否大于3的
在这之后就是计算注册码与输入的注册码的对比
0167:0046BDE4  MOV      EBX,01                    初始化EBX=1
0167:0046BDE9  MOV      ECX,EBX                    ECX=EBX
0167:0046BDEB  IMUL    ECX,EBX                    ECX*=EBX
0167:0046BDEE  MOV      EAX,ECX                    EAX=ECX
0167:0046BDF0  IMUL    EBX                        EAX*=EBX
0167:0046BDF2  LEA      EDX,[EBX+14]              EDX=EBX+0X14
0167:0046BDF5  MOV      EDI,EDX                    EDI=EDX
0167:0046BDF7  CDQ                     
0167:0046BDF8  IDIV    EDI                        EAX/=EDI,EDX=EAX%EDI
0167:0046BDFA  MOV      EDI,EDX                    EDI=EDX
0167:0046BDFC  MOV      EAX,ECX                    EAX=ECX
0167:0046BDFE  LEA      EDX,[EBX+0A]              EDX+=EBX+0XA
0167:0046BE01  MOV      ECX,EDX                    ECX=EDX
0167:0046BE03  CDQ   
0167:0046BE04  IDIV    ECX                        EAX/=ECX,EDX=EAX%ECX
0167:0046BE06  ADD      EDI,EDX                    EDI+=EDX
0167:0046BE08  MOV      EAX,EDI                    EAX=EDI
0167:0046BE0A  MOV      EDX,EBX                    EDX=EBX 
0167:0046BE0C  ADD      EDX,EDX                    EDX+=EDX
0167:0046BE0E  ADD      EAX,EDX                    EAX+=EDX
0167:0046BE10  ADD      EAX,BYTE +08              EAX+=8
0167:0046BE13  MOV      EDX,[EBP-0C]               
0167:0046BE16  MOVZX    EDX,BYTE [EDX+EBX-01]      EDX=STRING[i]
0167:0046BE1B  ADD      EAX,EDX                    EAX+=EDX
0167:0046BE1D  CMP      EAX,BYTE +7A -------------|             
0167:0046BE20  JNG      0046BE2A                  |
0167:0046BE22  SUB      EAX,BYTE +0A              |
0167:0046BE25  CMP      EAX,BYTE +7A              |
0167:0046BE28  JG      0046BE22                  |
0167:0046BE2A  CMP      EAX,BYTE +61              |------>比较EAX是否在'a'~'z'之间,大于每次减10
0167:0046BE2D  JNL      0046BE37                  |      小于每次加10直到EAX在'a'~'z'之间
0167:0046BE2F  ADD      EAX,BYTE +0A              |
0167:0046BE32  CMP      EAX,BYTE +61              |
0167:0046BE35  JL      0046BE2F    --------------|
0167:0046BE37  MOV      [EBP-15],AL               
0167:0046BE3A  LEA      EAX,[EBP-1C]
0167:0046BE3D  MOV      DL,[EBP-15]
0167:0046BE40  CALL    00403D14
0167:0046BE45  MOV      EDX,[EBP-1C]
0167:0046BE48  LEA      EAX,[EBP-10]
0167:0046BE4B  CALL    00403DF4
0167:0046BE50  INC      EBX                      EBX++
0167:0046BE51  DEC      ESI                      ESI--(ESI中为用户名长度)
0167:0046BE52  JNZ      0046BDE9                 
0167:0046BE54  MOV      EAX,[EBP-10]       
0167:0046BE57  CALL    00403DEC
0167:0046BE5C  CMP      EAX,BYTE +0A              比较生成注册码长度是否<10
0167:0046BE5F  JNL      NEAR 0046BEE9            >=则跳
0167:0046BE65  MOV      EAX,[EBP-10]             
0167:0046BE68  CALL    00403DEC                  求用户名长度的CALL
0167:0046BE6D  PUSH    EAX                     
0167:0046BE6E  MOV      EAX,0A
0167:0046BE73  POP      EDX
0167:0046BE74  SUB      EAX,EDX                  10-用户名长度
0167:0046BE76  MOV      ESI,EAX
0167:0046BE78  TEST    ESI,ESI
0167:0046BE7A  JNG      0046BEE9
0167:0046BE7C  MOV      EBX,01  ------------------|
0167:0046BE81  MOV      ECX,EBX                  |
0167:0046BE83  IMUL    ECX,EBX                  |
0167:0046BE86  MOV      EAX,ECX                  |    和上面的计算注册码的循环类似
0167:0046BE88  IMUL    EBX                      |    作用是如果注册码不足10位补齐
0167:0046BE8A  LEA      EDX,[EBX+14]              |    注册码
0167:0046BE8D  MOV      EDI,EDX                  |
0167:0046BE8F  CDQ                                |
0167:0046BE90  IDIV    EDI                      |
0167:0046BE92  MOV      EDI,EDX                  |
0167:0046BE94  MOV      EAX,ECX                  |
0167:0046BE96  LEA      EDX,[EBX+0A]              |
0167:0046BE99  MOV      ECX,EDX                  |
0167:0046BE9B  CDQ                                |
0167:0046BE9C  IDIV    ECX                      |
0167:0046BE9E  ADD      EDI,EDX                  |
0167:0046BEA0  MOV      EAX,EDI                  |
0167:0046BEA2  MOV      EDX,EBX                  |
0167:0046BEA4  ADD      EDX,EDX                  |
0167:0046BEA6  ADD      EAX,EDX                  |
0167:0046BEA8  INC      EAX                      |  ****这里和上面不一样EAX++
0167:0046BEA9  MOV      EDX,[EBP-0C]              | 
0167:0046BEAC  MOVZX    EDX,BYTE [EDX+01]        |      EDX=STRING[1]*********
0167:0046BEB0  ADD      EAX,EDX                  |
0167:0046BEB2  CMP      EAX,BYTE +7A              |
0167:0046BEB5  JNG      0046BEBF                  |
0167:0046BEB7  SUB      EAX,BYTE +0A              |
0167:0046BEBA  CMP      EAX,BYTE +7A              |
0167:0046BEBD  JG      0046BEB7                  |
0167:0046BEBF  CMP      EAX,BYTE +61              |
0167:0046BEC2  JNL      0046BECC                  |
0167:0046BEC4  ADD      EAX,BYTE +0A              |
0167:0046BEC7  CMP      EAX,BYTE +61              |
0167:0046BECA  JL      0046BEC4                  |
0167:0046BECC  MOV      [EBP-15],AL              |
0167:0046BECF  LEA      EAX,[EBP-20]              |
0167:0046BED2  MOV      DL,[EBP-15]              |
0167:0046BED5  CALL    00403D14                  |
0167:0046BEDA  MOV      EDX,[EBP-20]              |
0167:0046BEDD  LEA      EAX,[EBP-10]              |
0167:0046BEE0  CALL    00403DF4                  |
0167:0046BEE5  INC      EBX                      |
0167:0046BEE6  DEC      ESI                      |  ESI=10-注册码长度
0167:0046BEE7  JNZ      0046BE81------------------|
0167:0046BEE9  MOV      EAX,[EBP-10]----------------|
0167:0046BEEC  CALL    00403DEC                    |
0167:0046BEF1  MOV      ESI,EAX                    |
0167:0046BEF3  TEST    ESI,ESI                    |
0167:0046BEF5  JNG      0046BF23                    |
0167:0046BEF7  MOV      EBX,01                      |注册码倒续
0167:0046BEFC  MOV      EAX,[EBP-10]                |
0167:0046BEFF  CALL    00403DEC                    |
0167:0046BF04  SUB      EAX,EBX                    |
0167:0046BF06  MOV      EDX,[EBP-10]                |
0167:0046BF09  MOV      DL,[EDX+EAX]                |
0167:0046BF0C  LEA      EAX,[EBP-24]                |
0167:0046BF0F  CALL    00403D14                    |
0167:0046BF14  MOV      EDX,[EBP-24]                |
0167:0046BF17  LEA      EAX,[EBP-14]                |
0167:0046BF1A  CALL    00403DF4                    |
0167:0046BF1F  INC      EBX                        |
0167:0046BF20  DEC      ESI                        |
0167:0046BF21  JNZ      0046BEFC--------------------|
0167:0046BF23  MOV      EAX,[EBP-08]
0167:0046BF26  MOV      EDX,[EBP-14]

到这里就差不多了,不过我认为这样生成的注册码实在是没什么意思,生成的注册码
大概也就是从'p'到'z'虽然有<0x61 +0xa但是一般只有输入大写字母或数字符号时才
出现,即使26个字母全出全了,这样的注册码算法也太过简单,建议作者在下个版本
中改进。

后面跟这个的注册机
#include "stdio.h"
main()
{ int c,d,i,eax,ebx,ecx,edx,edi;
  unsigned char string[80];
  start:printf("********ZTZ-IE 1.8*********\nThis keygen is made by Pretender\nPlease input your name  : ");
  gets(string);
  d=strlen(string);
  if(d<4) {printf("Your name must more than 3 letters!!!\n\n");goto start;}
  c=string[1];
  for(i=0;;i++)
  {
  ebx=i+1;
  if(i>=d) ebx-=d;
  ecx=ebx;ecx*=ebx;eax=ecx;eax*=ebx;edi=ebx+0x14;edi=eax%edi;
  eax=ecx;edx=ebx+0xa;ecx=edx;edi+=eax%ecx;eax=edi;edx=ebx;
  edx+=edx;eax+=edx;
  if(i<d) eax+=8,eax+=string[i];
  else {if(d>10) {if(i==d) break;}
     if(d<=10) {if(i==10) break;}
     eax+=1,eax+=c;}
  while(eax>0x7a)
  eax-=0xa;
  while(eax<0x61)
  eax+=0xa;
  string[i]=eax;
  }
  printf("Your Register code is  : ");
  for(;i>=0;i--)
  printf("%c",string[i-1]);
printf("\n *****************************      ---    ---    ---\n *Welcome to WWW.CRACKNOW.COM*      /      /      / --\n *****************************      ---    ---    --/\n");
}