📄 drag and veiw45.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 + -