⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 drag and veiw45.txt

📁 这是井风的破解心得
💻 TXT
字号:
软件名称:Drag And View 4.50 (FileVersion: 1.0.01)  Dv32.exe  385KB
下载地点:http://www.canyonsw.com
发 信 人: 井  风
时    间: 2001-01-16 
破解工具:Trw20001.22
解题难度:[专  业]      [学  士]      [硕  士]      [博  士]
          ********
前    言:
             星期一才考试完毕,没想刚上手就碰到这个简单的软件,好象tKC先生已破过!
             
过    程:
        1、注册窗口填入: 注册码 ABCD12345678;
        2、用“井风跟踪”法找到出错的CALL,详细过程参见WINZIP8.0破解教学篇;
        3、分析代码:   

0137:00402B24  PUSH     DWORD [00445AEC]
0137:00402B2A  LEA      EAX,[EBP-14]
0137:00402B2D  PUSH     EAX              <========此处可见你输入的开始注册码
0137:00402B2E  PUSH     ESI
0137:00402B2F  CALL     00402B70         <========第二步将找出此CALL,执行则出现错误框。
                                                   深入跟踪这个子程序调用!
0137:00402B34  ADD      ESP,BYTE +0C
0137:00402B37  TEST     EAX,EAX
0137:00402B39  JZ       00402B52
0137:00402B3B  PUSH     BYTE +40
0137:00402B3D  PUSH     DWORD 00441308
0137:00402B42  PUSH     DWORD 004412F0


      4、深入跟踪的代码如下:
0137:00402B70  PUSH     EBP
0137:00402B71  MOV      EBP,ESP
0137:00402B73  PUSH     ESI
0137:00402B74  PUSH     EDI
0137:00402B75  MOV      EDI,[EBP+0C]
0137:00402B78  PUSH     EDI
0137:00402B79  CALL     `KERNEL32!lstrlenA`  <========取得字符串的长度
0137:00402B7F  CMP      EAX,BYTE +0E         <========比较注册码是否为E位(14位)
0137:00402B82  JNZ      00402BD4             <========非14位则去执行A行,出错。
0137:00402B84  PUSH     EDI
0137:00402B85  XOR      ESI,ESI
0137:00402B87  CALL     `USER32!CharUpperA`  <========将小写字母转化大写
0137:00402B8D  XOR      ECX,ECX              <========将ECX计数寄存器清零
0137:00402B8F  MOV      AL,[ECX+EDI]         <========从输入字符串中提取每一位ASCII值到AL
0137:00402B92  CMP      AL,41                )
0137:00402B94  MOVSX    EAX,AL               )    这一段程序的算法如下:
0137:00402B97  JL       00402B9F             )
0137:00402B99  LEA      ESI,[ESI+EAX-41]     )  N---字符为数字  C---字符为字母
0137:00402B9D  JMP      SHORT 00402BA3       )  X---数字的个数  Y---字母的个数
0137:00402B9F  LEA      ESI,[ESI+EAX-30]     ) {[(N1+N2+N3...NX)-30*X]+
0137:00402BA3  CMP      ESI,BYTE +09         )   [(C1+C2+C3...CY)-41*X]}/9=ESI
0137:00402BA6  JNG      00402BAB             )
0137:00402BA8  SUB      ESI,BYTE +09         ) 注:/ 求余,并非除法。  
0137:00402BAB  INC      ECX                  )
0137:00402BAC  CMP      ECX,BYTE +0E         )
0137:00402BAF  JL       00402B8F             )
0137:00402BB1  CMP      ESI,BYTE +04 <========比较ESI中值是否为4,不为4则下一步与5比较
0137:00402BB4  JNZ      00402BC5             
0137:00402BB6  PUSH     DWORD [EBP+10]       
0137:00402BB9  PUSH     DWORD [EBP+08]       
0137:00402BBC  CALL     00402C64             
0137:00402BC1  POP      ECX                  
0137:00402BC2  POP      ECX
0137:00402BC3  JMP      SHORT 00402C02
0137:00402BC5  MOV      EAX,[EBP+10]     <========从堆栈中取出数送到EAX,此处值为5。
0137:00402BC8  CMP      ESI,EAX          <========比较ESI中是否为5,为5则OK,不为5则调用A出错。
0137:00402BCA  JNZ      00402BD4
0137:00402BCC  DEC      EAX
0137:00402BCD  JZ       00402BF4
0137:00402BCF  SUB      EAX,BYTE +04
0137:00402BD2  JZ       00402BED
0137:00402BD4  PUSH     BYTE +10
0137:00402BD6  PUSH     DWORD 00441388
0137:00402BDB  PUSH     DWORD 00441370
0137:00402BE0  PUSH     DWORD [EBP+08]
0137:00402BE3  CALL     `USER32!MessageBoxA`  <========调用产生错误框函数,记为[A]。
0137:00402BE9  XOR      EAX,EAX
0137:00402BEB  JMP      SHORT 00402C02
0137:00402BED  PUSH     DWORD 00441190
0137:00402BF2  JMP      SHORT 00402BF9
0137:00402BF4  PUSH     DWORD 004411E0
0137:00402BF9  CALL     00402C06
0137:00402BFE  POP      ECX
   ·
   ·
   ·

小   结: 
             注册码为14位,只要{[(N1+N2+N3...NX)-30*X]+[(C1+C2+C3...CY)-41*X]}/9的值为5即可。    
         例如11111111111111、aaaaaaaaaaaaaf、22222222222226等。
后   记:
        有疑问请与我联系:hz.cy@163.net

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -