?? 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 + -