教師節了,祝所有教師快樂! 獻上中華拼讀王v3.22註冊分析 (5千字)

看雪資料發表於2015-11-15

標 題:教師節了,祝所有教師快樂! 獻上中華拼讀王v3.22註冊分析 (5千字)

發信人:lzqgj  [發短訊息]

時 間:2003-09-10 21:23:06

詳細資訊:


一個語文教師的好幫手,可以在word中快速輸入拼音。
程式語言:VB6
破解工具:OLLYDBG
適合於初學者

程式註冊與重啟判斷採用同一程式碼。
00420493  MOV DWORD PTR DS:[EDX+4],ECX
00420496  PUSH zhpdw.0040DF0C       UNICODE "regnumber"
0042049B  MOV DWORD PTR DS:[EDX+8],EAX
0042049E  MOV DWORD PTR SS:[EBP-1B0],EAX
004204A4  MOV EAX,DWORD PTR SS:[EBP-1AC]
004204AA  PUSH zhpdw.0040DEF8       UNICODE "regist"
004204AF  PUSH zhpdw.0040CEBC       UNICODE "pyzh"
004204B4  MOV DWORD PTR DS:[EDX+C],EAX
004204B7  CALL msvbvm60.rtcGetSetting   --->輸入碼
004204BD  MOV EDX,EAX
004204BF  LEA ECX,DWORD PTR SS:[EBP-2C]
004204C2  CALL msvbvm60.__vbaStrMove
004204C8  MOV EDX,EAX
004204CA  MOV ECX,ESI
004204CC  CALL msvbvm60.__vbaStrCopy
004204D2  LEA ECX,DWORD PTR SS:[EBP-2C]
004204D5  CALL msvbvm60.__vbaFreeStr
004204DB  MOV ECX,DWORD PTR DS:[ESI]
004204DD  PUSH 1
004204DF  PUSH -1
004204E1  PUSH 1
004204E3  PUSH zhpdw.0040C90C         --->替換後的字元,空值
004204E8  PUSH zhpdw.0040DF90         --->需替換的字元,"-"
004204ED  PUSH ECX                    --->輸入碼
004204EE  CALL msvbvm60.rtcReplace    --->替換字元,將"-"替換為空值,即去掉"-"
004204F4  MOV EDX,EAX
004204F6  LEA ECX,DWORD PTR SS:[EBP-28]   --->替換後輸入碼
004204F9  CALL msvbvm60.__vbaStrMove
004204FF  MOV EDX,DWORD PTR SS:[EBP-28]
00420502  MOV EAX,DWORD PTR DS:[ESI]
00420504  PUSH EDX                    --->替換後的輸入碼
00420505  PUSH EAX                    --->替換前的輸入碼
00420506  CALL EBX                    --->__vbstrcomp,比較是否相等,即是否含"-"
00420508  MOV ECX,DWORD PTR SS:[EBP-28]  
0042050B  MOV ESI,msvbvm60.__vbaLenBstr
00420511  MOV EBX,EAX                 --->比較結果
00420513  NEG EBX                     --->取反,相等則錯誤,故必須含"-"
00420515  SBB EBX,EBX
00420517  PUSH ECX                    
00420518  INC EBX
00420519  CALL msvbvm60.__vbaLenBstr  --->讀替換後輸入碼長度
0042051B  XOR EDX,EDX
0042051D  CMP EAX,8                   --->與8比較
00420520  SETLE DL                    --->大於等於8則置DL為0
00420523  OR EBX,EDX                  --->EBX與EDX是否等於0
00420525  JNZ zhpdw.004206F6          --->任意一個不等於0則錯,故必須含"-",且去掉"-"後長度大於等於8
0042052B  MOV EAX,DWORD PTR SS:[EBP-28]
0042052E  PUSH EAX
0042052F  CALL ESI
00420531  MOV ECX,DWORD PTR SS:[EBP+8]
00420534  MOV EBX,msvbvm60.__vbaVarTstEq
0042053A  MOV DWORD PTR SS:[EBP-268],EAX
00420540  MOV DWORD PTR DS:[ECX+44],1
00420547  MOV EDX,DWORD PTR SS:[EBP+8]        --->以下為迴圈判斷註冊碼
0042054A  MOV EAX,DWORD PTR DS:[EDX+44]
0042054D  CMP EAX,DWORD PTR SS:[EBP-268]
00420553  JG zhpdw.004206F6
00420559  LEA EDX,DWORD PTR SS:[EBP-58]
0042055C  PUSH EDX
0042055D  PUSH EAX
0042055E  LEA ECX,DWORD PTR SS:[EBP-28]
00420561  LEA EAX,DWORD PTR SS:[EBP-1B8]
00420567  MOV DWORD PTR SS:[EBP-1B0],ECX
0042056D  PUSH EAX
0042056E  LEA ECX,DWORD PTR SS:[EBP-68]
00420571  PUSH ECX
00420572  MOV DWORD PTR SS:[EBP-50],8
00420579  MOV DWORD PTR SS:[EBP-58],2
00420580  MOV DWORD PTR SS:[EBP-1B8],4008
0042058A  CALL msvbvm60.rtcMidCharVar       --->取中間字元,每次8位
00420590  LEA EDX,DWORD PTR SS:[EBP-68]
00420593  PUSH EDX
00420594  LEA EAX,DWORD PTR SS:[EBP-2C]
00420597  PUSH EAX
00420598  CALL msvbvm60.__vbaStrVarVal      --->取出字元轉為串
0042059E  PUSH EAX                          --->取出的字串
0042059F  CALL msvbvm60.rtcR8ValFromBstr    --->轉為浮點值
004205A5  FSUB QWORD PTR DS:[4016C0]        --->減[4016C0]的值,我這裡是8074191
004205AB  LEA ECX,DWORD PTR SS:[EBP-78]
004205AE  PUSH ECX
004205AF  FSTP QWORD PTR SS:[EBP-70]        --->儲存結果
004205B2  FSTSW AX
004205B4  TEST AL,0D
004205B6  JNZ zhpdw.00420DD3
004205BC  LEA EDX,DWORD PTR SS:[EBP-88]
004205C2  PUSH EDX
004205C3  MOV DWORD PTR SS:[EBP-78],5
004205CA  CALL msvbvm60.rtcHexVarFromVar    --->結果轉為十六進位制
004205D0  SUB ESP,10
004205D3  MOV EDX,ESP
004205D5  MOV ECX,0A
004205DA  MOV DWORD PTR DS:[EDX],ECX
004205DC  MOV DWORD PTR SS:[EBP-1E8],ECX
004205E2  MOV ECX,DWORD PTR SS:[EBP-1E4]
004205E8  MOV EAX,80020004
004205ED  MOV DWORD PTR DS:[EDX+4],ECX
004205F0  PUSH zhpdw.0040CFA8          UNICODE "fontcolor"
004205F5  MOV DWORD PTR DS:[EDX+8],EAX
004205F8  MOV DWORD PTR SS:[EBP-1E0],EAX
004205FE  MOV EAX,DWORD PTR SS:[EBP-1DC]
00420604  PUSH zhpdw.0040CECC          UNICODE "setting"
00420609  PUSH zhpdw.0040CEBC          UNICODE "pyzh"
0042060E  MOV DWORD PTR DS:[EDX+C],EAX
00420611  CALL msvbvm60.rtcGetSetting     --->讀登錄檔資訊,本機碼,
                                             我這裡是131A5C3,即20030915,感覺是時間限制
00420617  LEA ECX,DWORD PTR SS:[EBP-88]
0042061D  PUSH ECX
0042061E  LEA EDX,DWORD PTR SS:[EBP-98]
00420624  PUSH EDX
00420625  MOV DWORD PTR SS:[EBP-90],EAX
0042062B  MOV DWORD PTR SS:[EBP-98],8008
00420635  CALL EBX         --->__vbavartsteq,比較本機碼與計算後的輸入碼是否相等。
00420637  LEA ECX,DWORD PTR SS:[EBP-2C]
0042063A  MOV SI,AX
0042063D  CALL msvbvm60.__vbaFreeStr
00420643  LEA EAX,DWORD PTR SS:[EBP-98]
00420649  PUSH EAX
0042064A  LEA ECX,DWORD PTR SS:[EBP-88]
00420650  PUSH ECX
00420651  LEA EDX,DWORD PTR SS:[EBP-78]
00420654  PUSH EDX
00420655  LEA EAX,DWORD PTR SS:[EBP-68]
00420658  PUSH EAX
00420659  LEA ECX,DWORD PTR SS:[EBP-58]
0042065C  PUSH ECX
0042065D  PUSH 5
0042065F  CALL msvbvm60.__vbaFreeVarList
00420665  ADD ESP,18
00420668  CMP SI,DI
0042066B  JE SHORT zhpdw.004206DB      --->相等則成功

以下略,從第一位開始,每次取8位字元進行計算並比較,經過數次迴圈結束。

小結:註冊碼形式為任意XXXX-XXXXXXXX,長度沒有限制,"-"前為註冊姓名,"-"後為要比較的註冊碼,正確結果為8074191+20030915=281051060
我用QGJ-281051060

前段時間跟了幾個程式都未果,雖然可以顯示為註冊成功,但功能依然有限制,又找不到地方,感覺破解越來越難了。突然看到這麼簡單的程式,簡直不敢相信自己的眼睛。希望程式沒有其它的限制吧。
希望論壇能多出些詳細的破文,讓我等菜鳥多學習學習。

相關文章